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;

>> Lesson22に進む