掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
2つのRichEditの同期をとるには? (ID:14547)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
Fusaさん同様,「同期をとる」の意味を (1)RichEdit1に文字を入力 (2)同じ文字がRichEdit2に反映(入力)される と解釈します.HDDの中から見つけて,一応動作確認しました. ( WindowsXP + Delphi5) FormにRichEditを2つ,ボタンを2つ配置して以下のコードとして見て下さい. 動作は,RichEditのWindowProcプロパティを変更して,RichEdit1で発生 するメッセージを全てRichEdit2に送る,というものです. 全てが都合悪ければ適当に変更して下さい. //============================================================================= // スクロールバーを表示する場合は予め表示しておかないと,スクロールバーの表 // 示位置が乱れてしまうようだ(?). //============================================================================= procedure TForm1.FormCreate(Sender: TObject); begin RichEdit1.HideScrollBars:=False; RichEdit2.HideScrollBars:=False; RichEdit1.ScrollBars :=ssVertical; RichEdit2.ScrollBars :=ssVertical; end; //============================================================================= // アプリ終了時 // RichEdit1のウィンドウプロシージャーを変更していたら元に戻す //============================================================================= procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin if Assigned(OriginalProc) then begin RichEdit1.WindowProc:=OriginalProc; end; end; //============================================================================= // [連動入力開始] // RichEdit1のウィンドウプロシージャーをSubClassProcというメソッドに変更する // RichEdit1の新しいWindowProc(SubClassProc)を定義してからSetFocusしてしまう // と都合が悪い. //============================================================================= procedure TForm1.Button1Click(Sender: TObject); begin RichEdit1.SetFocus; OriginalProc:=RichEdit1.WindowProc; RichEdit1.WindowProc:=SubClassProc; end; //============================================================================= // [連動入力停止] // RichEdit1のウィンドウプロシージャーを元に戻す //============================================================================= procedure TForm1.Button2Click(Sender: TObject); begin if Assigned(OriginalProc) then begin RichEdit1.WindowProc:=OriginalProc; RichEdit1.SetFocus; end; end; //============================================================================= // RichEdit1の新しいウィンドウプロシージャー // ここでは全てのメッセージをRichEdit2に送っている. //============================================================================= procedure TForm1.SubClassProc(var Msg: TMessage); begin OriginalProc(Msg); SendMessage(RichEdit2.Handle,Msg.Msg ,Msg.WParam,Msg.LParam); end; //============================================================================= // RichEdit2にフォーカスが移動したら連動入力を止める // SubClassProc内で全てのメッセージを処理してしまっているので,RichEdit1の // OnExitでは連動入力を停止することはできない. //============================================================================= procedure TForm1.RichEdit2Enter(Sender: TObject); begin if Assigned(OriginalProc) then begin RichEdit1.WindowProc:=OriginalProc; end; end;
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.