delphi仿IE浏览器标签页效果演示

3 篇文章 0 订阅

看到有同学提问, 自己试炼了一把, 只为实现标签页效果, 未作细化和完善工作.


路过的同学多多指教

--------------------------------------------------------------

a.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>

<body>
<label>btn
<input id="aa" type="button" οnclick="location='http://www.google.com'" name="Submit" value="提交" />
</label>
<a id="bb" href="http://www.baidu.com">ahref</a>
<br />
<label>btn
<input id="aa" type="button" οnclick="" name="Submit" value="提交" />
</label>
<a href="http://so.com" target="_blank">so</a>
</body>
</html>

单元文件

unit Unit11;


interface


uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleCtrls, SHDocVw, ComCtrls;


type
  TForm11 = class(TForm)
    pgc1: TPageControl;
    procedure FormCreate(Sender: TObject);
    procedure pgc1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    function NewWindow(const URL : string = ''): TWebBrowser;
    procedure MyBeforeNavigate2(ASender: TObject; const pDisp: IDispatch;
      var URL, Flags, TargetFrameName, PostData, Headers: OleVariant;
      var Cancel: WordBool);
    procedure MyNewWindow2(ASender: TObject; var ppDisp: IDispatch;
      var Cancel: WordBool);
    procedure closePage(aTab: TTabSheet);
    { Private declarations }
  public
    { Public declarations }
  end;


var
  Form11: TForm11;


implementation


{$R *.dfm}
function TForm11.NewWindow(const URL : string = '') : TWebBrowser;
var
  aTab : TTabSheet;
begin
  aTab := TTabSheet.Create(pgc1);
  aTab.PageControl := pgc1;
  aTab.Caption := 'tab' + IntToStr(pgc1.PageCount);
  pgc1.ActivePage := aTab;
  aTab.Align := alClient;


  result := TWebBrowser.Create(self);
  aTab.InsertControl(result);
  result.Align := alClient;
  result.OnBeforeNavigate2 := MyBeforeNavigate2;
  result.OnNewWindow2 := MyNewWindow2;
  if URL <> '' then
    result.Navigate(url);
end;


procedure TForm11.closePage(aTab : TTabSheet);
var
  i : integer;
begin
  if aTab = nil then Exit;


  for I := aTab.ComponentCount - 1 downto 0 do
  begin
    if aTab.Components[i] is TWebBrowser then
      TWebBrowser(aTab.Components[i]).Stop;
    aTab.Components[i].Free;
  end;


  aTab.Free;
end;


procedure TForm11.pgc1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
Index: Integer;
begin
  //左键点击并且双击
  if (Button = mbLeft) and (ssDouble in Shift) then
  begin
    Index := pgc1.IndexOfTabAt(X, Y);
    if Index >= 0 then
      closePage(pgc1.Pages[Index]);


  end;


end;


procedure TForm11.MyNewWindow2(ASender: TObject; var ppDisp: IDispatch;
  var Cancel: WordBool);
begin
  //新链接事件处理
  ppDisp := NewWindow().DefaultInterface;
end;


procedure TForm11.FormCreate(Sender: TObject);
begin
//  NewWindow('http://news.baidu.com');
  NewWindow(ExtractFilePath(Application.ExeName)+'a.html');
end;


procedure TForm11.MyBeforeNavigate2(ASender: TObject; const pDisp: IDispatch;
  var URL, Flags, TargetFrameName, PostData, Headers: OleVariant;
  var Cancel: WordBool);
begin
  //Todo 事务处理
end;


end.


界面文件

object Form11: TForm11
  Left = 0
  Top = 0
  Caption = 'Form11'
  ClientHeight = 461
  ClientWidth = 769
  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 pgc1: TPageControl
    Left = 0
    Top = 0
    Width = 769
    Height = 461
    Align = alClient
    TabOrder = 0
    ExplicitTop = 56
    ExplicitHeight = 405
  end
end






  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先申明:<br>1:本人是新人,沒有分不能下載其他高手的資源,所以才要積分下載<br>2:此程序正在編寫中。拿出來目的是希望能和有這個有興趣的朋友認識,一起研究學習。然後提出一系列問題希望有高手能指點一二。<br>3:如果你電腦沒有安裝DELPHI 還需要幾個文件才可以運行(為了減小主程序大小!)已上大家上傳下載地址(放到此程序同一目錄及可):http://download.csdn.net/source/493197<br><br>目前已實際的功能有:<br><br>1.輸入網址回車與直接選擇地址欄項都是直接打開頁面,選擇後面的搜索。可在地址欄直接輸入關鍵字用右鍵選擇(搜索按鈕上)的引擎進行搜索<br><br>2.頁面控制一:右下角按鈕1控制是否打開到新窗口(地址欄回車),第二個控制是否關閉到最后一個頁簽,第三個控制開啟的新地址在最后還是在當前右邊。<br><br>3.頁面控制二:地址欄前的加號是新增空白頁,搜索按鈕後面第一個圖標。提取網頁源代碼(已實現提取所有源碼與選擇部分源碼),第二個圖標控制地址欄處於上方還是下方,第三個圖標控制頁簽是處於上方還是下方,由於不能解決動態改變pagecontrol1的tabposition 會重繪使得WEB無法顯示。所有改到所有頁面關都關閉以后才能生效<br><br>4.頁面控制三:在頁簽上有雙擊關閉/右鍵閩南單擊關閉和F4快捷關閉,所以在關閉其它頁面事件放到地址欄上。地址欄右鍵單擊出來關閉左邊全部,右邊全部(未實現,由於關閉后頁時,當前頁簽會往后跳,造成有閃的感覺。)如果隱藏主菜單會出現主菜單上面的快捷鍵無效!<br><br>5.群組收藏功能,快捷鍵ctrl+d,可加入收藏群組,目前不能更新新的群組的內容。編輯功能未實現<br><br>還有好多的問題。正在準備解決中<br><br>有些目前自己解決不了的問題在這里請求高手們出招:<br><br>還是一個一個的解決並提出來:<br><br>目前正處理的問題:如何關閉右邊所有頁簽。如果熱循環關閉當前右邊一個會造成當前頁的變換而形成閃動。不好!<br><br>如何解決....?<br>已在論壇發貼地址:http://topic.csdn.net/u/20080612/13/16e13b55-b27d-490e-8591-4240feddb9bd.html<br>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值