程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> TPageControl 上有多個 TWebBrowser 時, 如何協調 Back、Forward

TPageControl 上有多個 TWebBrowser 時, 如何協調 Back、Forward

編輯:Delphi

 代碼:

unit Unit1; 
 
interface 
 
uses 
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
 Dialogs, StdCtrls, ExtCtrls, OleCtrls, SHDocVw, ComCtrls; 
 
type 
 TForm1 = class(TForm) 
  Panel1: TPanel; 
  Edit1: TEdit; 
  Button1: TButton; 
  Button2: TButton; 
  Button3: TButton; 
  PageControl1: TPageControl; 
  procedure CommandStateChange(ASender: TObject; Command: Integer; Enable: WordBool); 
  procedure Button1Click(Sender: TObject); 
  procedure Button2Click(Sender: TObject); 
  procedure Button3Click(Sender: TObject); 
  procedure FormCreate(Sender: TObject); 
  procedure PageControl1Changing(Sender: TObject; var AllowChange: Boolean); 
  procedure PageControl1Change(Sender: TObject); 
 end; 
 
var 
 Form1: TForm1; 
 
implementation 
 
{$R *.dfm}  
 
var 
 TabSheetArr : array[0 ..2 ] of TTabSheet; 
 WebBrowserArr: array[0..2] of TWebBrowser; 
 BoolArr   : array[0..2] of record B,F: Boolean end; 
 WebActive: TWebBrowser; 
 
procedure TForm1.FormCreate(Sender: TObject); 
var 
 i: Integer; 
begin 
 Button1.Caption := 'Go'; 
 Button1.Default := True; 
 Button2.Caption := 'Back'; 
 Button3.Caption := 'Forward'; 
 Button2.Enabled := False; 
 Button3.Enabled := False; 
 Edit1.Text := 'http://del.cnblogs.com'; 
 
 for i := 0 to Length(TabSheetArr) - 1 do 
 begin 
  TabSheetArr[i] := TTabSheet.Create(PageControl1); 
  TabSheetArr[i].PageControl := PageControl1; 
  TabSheetArr[i].Caption := 'TabSheet' + IntToStr(i+1); 
  WebBrowserArr[i] := TWebBrowser.Create(TabSheetArr[i]); 
  TWinControl(WebBrowserArr[i]).Parent := TabSheetArr[i]; 
  WebBrowserArr[i].Align := alClIEnt; 
 end; 
 PageControl1.ActivePageIndex := 0; 
 WebActive := WebBrowserArr[0]; 
 WebActive.Navigate(Edit1.Text); 
 WebActive.OnCommandStateChange := CommandStateChange; 
end; 
 
procedure TForm1.PageControl1Changing(Sender: TObject; 
 var AllowChange: Boolean); 
var 
 i: Integer; 
begin 
 i := PageControl1.ActivePageIndex; 
 BoolArr[i].B := Button2.Enabled; 
 BoolArr[i].F := Button3.Enabled; 
end; 
 
procedure TForm1.PageControl1Change(Sender: TObject); 
var 
 i: Integer; 
begin 
 i := PageControl1.ActivePageIndex; 
 WebActive := WebBrowserArr[i]; 
 Edit1.Text := WebActive.LocationURL; 
 WebActive.OnCommandStateChange := CommandStateChange; 
 Button2.Enabled := BoolArr[i].B; 
 Button3.Enabled := BoolArr[i].F; 
end; 
 
procedure TForm1.Button1Click(Sender: TObject); 
begin 
 WebActive.Navigate(Edit1.Text); 
end; 
 
procedure TForm1.Button2Click(Sender: TObject); 
begin 
 WebActive.GoBack; 
end; 
 
procedure TForm1.Button3Click(Sender: TObject); 
begin 
 WebActive.GoForward; 
end; 
 
procedure TForm1.CommandStateChange(ASender: TObject; Command: Integer; Enable: WordBool); 
begin 
 case Command of 
  CSC_NAVIGATEBACK  : Button2.Enabled := Enable; 
  CSC_NAVIGATEFORWARD: Button3.Enabled := Enable; 
 end; 
end; 
 
end. 

窗體:

object Form1: TForm1 
 Left = 0 
 Top = 0 
 Caption = 'Form1' 
 ClIEntHeight = 388 
 ClIEntWidth = 737 
 Color = clBtnFace 
 Font.Charset = DEFAULT_CHARSET 
 Font.Color = clWindowText 
 Font.Height = -11 
 Font.Name = 'Tahoma' 
 Font.Style = [] 
 OldCreateOrder = False 
 OnCreate = FormCreate 
 PixelsPerInch = 96 
 TextHeight = 13 
 object Panel1: TPanel 
  Left = 0 
  Top = 0 
  Width = 737 
  Height = 30 
  Align = alTop 
  Caption = 'Panel1' 
  TabOrder = 0 
  DesignSize = ( 
   737 
   30) 
  object Edit1: TEdit 
   Left = 8 
   Top = 5 
   Width = 425 
   Height = 21 
   TabOrder = 0 
   Text = 'Edit1' 
  end 
  object Button1: TButton 
   Left = 439 
   Top = 2 
   Width = 66 
   Height = 25 
   Caption = 'Button1' 
   TabOrder = 1 
   OnClick = Button1Click 
  end 
  object Button2: TButton 
   Left = 574 
   Top = 2 
   Width = 75 
   Height = 25 
   Anchors = [akTop, akRight] 
   Caption = 'Button2' 
   TabOrder = 2 
   OnClick = Button2Click 
  end 
  object Button3: TButton 
   Left = 655 
   Top = 2 
   Width = 75 
   Height = 25 
   Anchors = [akTop, akRight] 
   Caption = 'Button3' 
   TabOrder = 3 
   OnClick = Button3Click 
  end 
 end 
 object PageControl1: TPageControl 
  Left = 0 
  Top = 30 
  Width = 737 
  Height = 358 
  Align = alClIEnt 
  TabOrder = 1 
  OnChange = PageControl1Change 
  OnChanging = PageControl1Changing 
 end 
end 

 把上面的例子全部改成動態建立的方法(在之前的窗體上多加一個 Button4 用於添加頁面):

unit Unit1; 
 
interface 
 
uses 
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
 Dialogs, StdCtrls, ExtCtrls, OleCtrls, SHDocVw, ComCtrls; 
 
type 
 TForm1 = class(TForm) 
  Panel1: TPanel; 
  Edit1: TEdit; 
  Button1: TButton; 
  Button2: TButton; 
  Button3: TButton; 
  PageControl1: TPageControl; 
  Button4: TButton; 
  procedure CommandStateChange(ASender: TObject; Command: Integer; Enable: WordBool); 
  procedure Button3Click(Sender: TObject); 
  procedure Button1Click(Sender: TObject); 
  procedure Button2Click(Sender: TObject); 
  procedure FormCreate(Sender: TObject); 
  procedure PageControl1Changing(Sender: TObject; var AllowChange: Boolean); 
  procedure PageControl1Change(Sender: TObject); 
  procedure Button4Click(Sender: TObject); 
 private 
  procedure GetBackForwardBool; 
 end; 
 
var 
 Form1: TForm1; 
 
implementation 
 
{$R *.dfm} 
 
var 
 TabSheetArr : array of TTabSheet; 
 WebBrowserArr: array of TWebBrowser; 
 BoolArr   : array of record B,F: Boolean end; 
 WebActive: TWebBrowser; 
 
procedure TForm1.FormCreate(Sender: TObject); 
var 
 i: Integer; 
begin 
 Button1.Caption := 'Go'; 
 Button1.Default := True; 
 Button2.Caption := 'Back'; 
 Button3.Caption := 'Forward'; 
 Button2.Enabled := False; 
 Button3.Enabled := False; 
 
 Button4.Caption := 'AddPage'; 
 Button4.Click; 
 WebActive := WebBrowserArr[0]; 
 WebActive.OnCommandStateChange := CommandStateChange; 
end; 
 
procedure TForm1.GetBackForwardBool; 
begin 
 BoolArr[PageControl1.ActivePageIndex].B := Button2.Enabled; 
 BoolArr[PageControl1.ActivePageIndex].F := Button3.Enabled; 
end; 
 
procedure TForm1.PageControl1Changing(Sender: TObject; var AllowChange: Boolean); 
begin 
 GetBackForwardBool; 
end; 
 
procedure TForm1.PageControl1Change(Sender: TObject); 
var 
 i: Integer; 
begin 
 i := PageControl1.ActivePageIndex; 
 WebActive := WebBrowserArr[i]; 
 Edit1.Text := WebActive.LocationURL; 
 WebActive.OnCommandStateChange := CommandStateChange; 
 Button2.Enabled := BoolArr[i].B; 
 Button3.Enabled := BoolArr[i].F; 
end; 
 
procedure TForm1.Button1Click(Sender: TObject); 
begin 
 WebActive.Navigate(Edit1.Text); 
end; 
 
procedure TForm1.Button2Click(Sender: TObject); 
begin 
 WebActive.GoBack; 
end; 
 
procedure TForm1.Button3Click(Sender: TObject); 
begin 
 WebActive.GoForward; 
end; 
 
procedure TForm1.Button4Click(Sender: TObject); 
var 
 n: Integer; 
begin 
 n := Length(TabSheetArr); 
 if n > 0 then GetBackForwardBool; 
 SetLength(TabSheetArr, n+1); 
 SetLength(WebBrowserArr, n+1); 
 SetLength(BoolArr, n+1); 
 
 TabSheetArr[n] := TTabSheet.Create(PageControl1); 
 TabSheetArr[n].PageControl := PageControl1; 
 TabSheetArr[n].Caption := 'TabSheet' + IntToStr(n+1); 
 WebBrowserArr[n] := TWebBrowser.Create(TabSheetArr[n]); 
 TWinControl(WebBrowserArr[n]).Parent := TabSheetArr[n]; 
 WebBrowserArr[n].Align := alClIEnt; 
 PageControl1.ActivePageIndex := n; 
 PageControl1.OnChange(PageControl1); 
end; 
 
procedure TForm1.CommandStateChange(ASender: TObject; Command: Integer; Enable: WordBool); 
begin 
 case Command of 
  CSC_NAVIGATEBACK  : Button2.Enabled := Enable; 
  CSC_NAVIGATEFORWARD: Button3.Enabled := Enable; 
 end; 
end; 
 
end. 



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved