2つの TMemo のスクロールを同期させる
|
Q:
memo1 のスクロールバーを動かすと、memo2 も同じようにスクロールさせたいです。
A:[Delphi-ML:67004] Halbow さん
垂直スクロールバーについてだけ、回答します。Memo1 と Memo2 は Width や Height 、Font.Size など同一のプロパティーであると仮定しています。
TRichEdit で同様のことをする方法が[Tips:322]にあります。
type
TForm1 = class(TForm)
Memo1: TMemo;
Memo2: TMemo;
procedure FormCreate(Sender: TObject);
private
{ Private 宣言 }
public
Memo1Proc:TWndMethod;
MKEY:WORD;
procedure Memo1SuclassProc(var Msg:TMessage);
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1Proc := Memo1.WindowProc;
Memo1.WindowProc := Memo1SuclassProc;
end;
procedure TForm1.Memo1SuclassProc(var Msg: TMessage);
begin
Memo1Proc(Msg);
case Msg.Msg of
WM_VSCROLL:Memo2.Dispatch(Msg);
CN_COMMAND:
if (Msg.WParamHi = EN_VSCROLL) then begin
case MKEY of
VK_DOWN:Memo2.Perform(EM_LINESCROLL,0,1);
VK_UP :Memo2.Perform(EM_LINESCROLL,0,-1);
VK_HOME:if (GetAsyncKeyState(VK_CONTROL) and $8000) <> 0 then begin
Memo2.SelStart := 0;
Memo2.Perform(EM_SCROLLCARET,0,0);
end;
VK_END:if (GetAsyncKeyState(VK_CONTROL) and $8000) <> 0 then begin
Memo2.SelStart := Length(Memo2.Text);
Memo2.Perform(EM_SCROLLCARET,0,0);
end;
end;
MKEY := 0;
end;
CN_KEYDOWN:MKEY := Msg.WParam;
end;
end;
|
|