Delphi はじめの一歩
タブブラウザを作る
<Lesson21> 基本動作を書く −(2)
ブラウザの基本的な動作を書いていきます。
Lesson4 、 Lesson9 、 Lesson10 と内容が一緒ですので、初めから例外処理(エラーを回避する処理)も一緒に書いていきます。
|
エディタのMAINタブを選び、MainFormのソースを編集します。 ActionList1のBack1のOnExecuteイベントを下記のようにしてください。 MainFormからIEWindowに貼り付けたコンポーネントを操作する場合、 どのフォームのコンポーネントなのかを示す必要が有ります。 例えば WebBrowser1.GoBack;というような書き方をするとエラーが起き、 Child.WebBrowser1.GoBack;(ChildをIEWindowとする)というようにしなければなりません。 下記のソースは、アクティブな(一番手前に来ている)状態の子ウインドウのWebページを1つ戻す。という意味を持ちます。 ActiveMDIChildはアクティブな子ウインドウという意味で、TIEWindowは、IEWindowタイプというような意味です。 TIEWindow(ActiveMDIChild)という風にする事を型キャストといいます。 TIEWindowに型キャストすることで、IEWindowとして扱う事が出来るようになり、IEWindowの持つコンポーネントを操作することが出来ます。 しかし、ActiveMDIChildがもしIEWindowでない場合(例えば、子ウインドウがWebページ表示用とソース表示用の二種類有るとして、ソース表示用がアクティブだった場合)に、こうすると例外(エラー)が発生します。 [MainForm Back1 OnExecuteイベント] procedure TMainForm.Back1Execute(Sender: TObject); begin TIEWindow(ActiveMDIChild).WebBrowser1.GoBack; end; |
|
先ほどと同様にForward1のOnExecuteイベントを下記のようにしてください。 これは、アクティブな子ウインドウのWebページを1つ進める。という意味です。 [MainForm Forward1 OnExecuteイベント] procedure TMainForm.Forward1Execute(Sender: TObject); begin TIEWindow(ActiveMDIChild).WebBrowser1.GoForward; end; |
下記のソースで、
var Child:TIEWindow;はローカル変数の宣言です。 変数とは、データの容器のようなものです。 ローカル変数とは、宣言したprocedureまたはfunction内でしか使えない変数のことです。 ローカル変数に割り当てられたメモリは、そのprocedureまたはfunctionが終われば解放されます。 Child := TMDIChild.Create(Application);はIEWindowを新たに作り、それを、変数Childに代入する事を意味します。 次の行はChild(今作った子ウインドウ)のWebBrowser1にホームを表示させるを意味します。 [MainForm Home1 OnExecuteイベント]
procedure TMainForm.Home1Execute(Sender: TObject);
var
Child:TIEWindow;
begin
Child := TIEWindow.Create(Application);
Child.WebBrowser1.GoHome;
end;
|
子ウインドウが1つも開いていない場合に再読込しようとすると、エラーが起きますので、その場合も例外処理します。if (条件1) and (条件2) then begin 内容A end;で、もし条件1を満たし、さらに条件2を満たすなら内容Aを実行する。という意味です。 条件を(カッコ)で囲むのと、囲まないので、若干違う処理をしますが、その解説はここでは MDIChildCountは開いている子ウインドウの数です。 [MainForm Refresh1 OnExecuteイベント]
procedure TMainForm.Refresh1Execute(Sender: TObject);
begin
if (MDIChildCount > 0) and
(TIEWindow(ActiveMDIChild).WebBrowser1.Document <> nil) then
begin
TIEWindow(ActiveMDIChild).WebBrowser1.Refresh;
end;
end;
|
|
同様に、子ウインドウが1つ以上開いていて、アクティブな子ウインドウが読込中なら停止ボタンを機能させる。 [MainForm Stop1 OnExecuteイベント]
procedure TMainForm.Stop1Execute(Sender: TObject);
begin
if (MDIChildCount > 0) and
(TIEWindow(ActiveMDIChild).WebBrowser1.Busy = True) then
begin
TIEWindow(ActiveMDIChild).WebBrowser1.Stop;
end;
end;
|
|
下記の処理は、 Lesson9 と同様の処理をしてから、URLを渡してprocedure CreateMDIChildを起こす。という意味です。 CreateMDIChildには、後で、新しい子ウインドウを作り、そこに、渡されたURLのWebページを表示する。という処理を書きます。 [MainForm Navigate1 OnExecuteイベント]
procedure TMainForm.Navigate1Execute(Sender: TObject);
var
URL:string;
begin
if Edit1.Text = '' then
begin
Edit1.Text := 'about:blank';
end;
URL := Edit1.Text;
CreateMDIChild(URL);
end;
|