MemoのLinesプロパティ設定時制御


HUMOUR  2004-08-13 03:31:01  No: 10392

TCustoemMemoから継承されたTCCMemoコンポーネントを作っています。
TCCMemoコンポーネントのLinesプロパティ設定時に「文字列リスト設定」ダイアログに直接に入力した文字が「OK」ボタンを押下すると全部全角に変換してほしいんです。このやり方よろしくお願いします。


あいうえお  2004-08-13 13:12:27  No: 10393

こんな感じでしょうかね?
設定時の確認はしてません
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;


HUMOUR  2004-08-13 19:40:40  No: 10394

ご回答有り難うございます。
設定時の確認がほしいんです。
Linesプロパティ設定時に「文字列リスト設定」ダイアログに直接に入力した文字が「OK」ボタンを押下すると全部全角に変換してほしいんですけど、解決やり方があるんですか?


jok  2004-08-13 22:36:51  No: 10395

> 設定時の確認がほしいんです。

実行時に CCMemo1.Text を設定したときにはその機能が実現できてるんですか?
できているとすると、それを設計時だけ機能させるには

if (csDesigning in ComponentState) then

というふうに、設計時であることを確認するだけです。


HUMOUR  2004-08-13 23:14:42  No: 10396

「procedure CMCHANGED(var Message: TMessage); message CM_CHANGED;」
上記の手続きを使って全角変換処理をしたら実行時に全角変換機能が実現できるんですが、「procedure WMSetText(var Msg:TMessage);message WM_SETTEXT」手続きを使えばプロパティ設定時に全角変換ができないんです。だから、Linesプロパティで直接に文字を入力して「文字列リスト」ダイアログで「OK]ボタンを押下するときにどんな手続き処理が行なうのかが一応はっきりしなければならないものだと思うんです。
もし、「if (csDesigning in ComponentState) then」文で実現できればどの手続きに実装するんですか?よろしくお願いします。


jok  2004-08-13 23:25:28  No: 10397

> 「procedure CMCHANGED(var Message: TMessage); message CM_CHANGED;」
> 上記の手続きを使って全角変換処理をしたら実行時に全角変換機能が実現できるんですが

設計時にはどうなのですか?
もしだめなら、それはプロパティーエディタを新しくつくることになると思います。
わたしは作ったことがないので具体的には知りませんが。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加