Delphi はじめの一歩
タブブラウザを作る
<Lesson22> アクティブなウインドウが変わった時の処理
子ウインドウの[戻る]と[進む]の押せるかどうかの状態を、それぞれの子ウインドウに記憶させといて、アクティブな子ウインドウが切り替わったときに、それに合わせて、BackButtonとForwardButtonの状態も変化させます。
|
まず、エディタのCHILDWINタブを選びます。 そしたら、下図のように、usesにMAINを追加してください。 こうしないと、IEWindow側から、MainFormのコンポーネントを操作出来ません。 |
|
|
左図のように、typeに
TEnabled = record
FBack:Boolean;
FForward:Boolean;
end;
と追加し、privateに
E:TEnabled;と追加してください。 recordは複数の変数を一緒に扱いたい時に使います。 FBackに戻れるかどうかを、FForwardに進めるかどうかを格納します。 上記のソースはTEnabledという、Boolean型の変数を2つ持つレコード型をつくり、EというTEnabled型の変数を作っています。 Boolean型の変数には、TrueかFalseかを格納できます。 TEnabled、FBack、FForwardは自分で勝手に付けた名前で、違う名前を付けてもOKです。 |
|
戻れるかどうか、または進めるかどうかの状態は、アクティブな子ウインドウ以外は変化しないはずなので、変化したと云う事は自身がアクティブなので、状態をEに格納すると同時に、ボタンの状態も変化させます。 レコード型が持つ変数(例えばTEnabledに対するFForward)を扱うときは、例えばこの場合だと、下記のようにE.FForwardという風にします。 [IEWindow WebBrowser1 OnCommandStateChangeイベント]
procedure TIEWindow.WebBrowser1CommandStateChange(Sender: TObject;
Command: Integer; Enable: WordBool);
begin
case Command of
CSC_NAVIGATEFORWARD:
begin
E.FForward := Enable;
MainForm.Forward1.Enabled := Enable;
end;
CSC_NAVIGATEBACK:
begin
E.FBack := Enable;
MainForm.Back1.Enabled := Enable;
end;
end;
end;
|
|
もし、子ウインドウを閉じたときに、それが最後の1つで、子ウインドウが1つも開いていない状態になるのなら、[戻る]も[進む]も押せないように変化させます。 [IEWindow OnCloseイベント]
procedure TIEWindow.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if MDIChildCount = 1 then
begin
MainForm.Back1.Enabled := False;
MainForm.Forward1.Enabled := False;
end;
Action := caFree;
end;
|
|
自身がアクティブになった時に、自身の[戻る]と[進む]の状態をボタンに反映させます。 [IEWindow OnActivateイベント] procedure TIEWindow.FormActivate(Sender: TObject); begin MainForm.Back1.Enabled := E.FBack; MainForm.Forward1.Enabled := E.FForward; end; |