TCustoemMemoから継承されたTCCMemoコンポーネントを作っています。
TCCMemoコンポーネントのLinesプロパティ設定時に「文字列リスト設定」ダイアログに直接に入力した文字が「OK」ボタンを押下すると全部全角に変換してほしいんです。このやり方よろしくお願いします。
こんな感じでしょうかね?
設定時の確認はしてません
procedure WMSetText(var Msg:TMessage);message WM_SETTEXT;
procedure TCCMemo.WMSetText(var Msg: TMessage);
var
P: PChar;
begin
inherited;
with Msg do
if not ReadOnly then
begin
P := StrNew(PChar(LParam));
Lines.Text := AnsiLowerCase(String(P));
StrDispose(P);
end;
end;
ご回答有り難うございます。
設定時の確認がほしいんです。
Linesプロパティ設定時に「文字列リスト設定」ダイアログに直接に入力した文字が「OK」ボタンを押下すると全部全角に変換してほしいんですけど、解決やり方があるんですか?
> 設定時の確認がほしいんです。
実行時に CCMemo1.Text を設定したときにはその機能が実現できてるんですか?
できているとすると、それを設計時だけ機能させるには
if (csDesigning in ComponentState) then
というふうに、設計時であることを確認するだけです。
「procedure CMCHANGED(var Message: TMessage); message CM_CHANGED;」
上記の手続きを使って全角変換処理をしたら実行時に全角変換機能が実現できるんですが、「procedure WMSetText(var Msg:TMessage);message WM_SETTEXT」手続きを使えばプロパティ設定時に全角変換ができないんです。だから、Linesプロパティで直接に文字を入力して「文字列リスト」ダイアログで「OK]ボタンを押下するときにどんな手続き処理が行なうのかが一応はっきりしなければならないものだと思うんです。
もし、「if (csDesigning in ComponentState) then」文で実現できればどの手続きに実装するんですか?よろしくお願いします。
> 「procedure CMCHANGED(var Message: TMessage); message CM_CHANGED;」
> 上記の手続きを使って全角変換処理をしたら実行時に全角変換機能が実現できるんですが
設計時にはどうなのですか?
もしだめなら、それはプロパティーエディタを新しくつくることになると思います。
わたしは作ったことがないので具体的には知りませんが。
ツイート | ![]() |