Delphi Tips 
-----------------------------

0321  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 2002/05/17 osamu rev 1.4
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 2002/05/17 osamu 編集
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;
参照: [Delphi-ML:67004] <Standard> <コンポーネント > [Tips:322]

[新規作成] [最新の情報に更新]

How To
Lounge
KeyWords


Tips
Delphi
Home
Osamu Takeuchi osamu@big.or.jp