-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathMainUnit.pas
More file actions
118 lines (97 loc) · 3.04 KB
/
MainUnit.pas
File metadata and controls
118 lines (97 loc) · 3.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
unit MainUnit;
interface
uses
Classes, Windows, OleCtrls, SHDocVw;
const
EVENT_BEFORE_NAVIGATE = 1;
type
TWebBrowserEventProc = procedure(EventCode: Integer; URL: PWideChar) of object;
TInnoWebBrowser = class
private
FWebBrowser: TWebBrowser;
FEventCallback: TWebBrowserEventProc;
procedure OnBeforeNavigate2(ASender: TObject; const pDisp: IDispatch; var URL: OleVariant;
var Flags: OleVariant; var TargetFrameName: OleVariant; var PostData: OleVariant;
var Headers: OleVariant; var Cancel: WordBool);
public
constructor Create;
destructor Destroy; override;
procedure InitWebBrowser(ParentWnd: HWND; Left, Top, Width,
Height: Integer; CallbackProc: TWebBrowserEventProc);
procedure ShowWebBrowser(Visible: Boolean);
procedure NavigateWebBrowser(URL: PWideChar);
end;
procedure CreateWebBrowser(ParentWnd: HWND; Left, Top, Width,
Height: Integer; CallbackProc: TWebBrowserEventProc); stdcall;
procedure DestroyWebBrowser; stdcall;
procedure ShowWebBrowser(Visible: Boolean); stdcall;
procedure NavigateWebBrowser(URL: PWideChar); stdcall;
implementation
var
InnoWebBrowser: TInnoWebBrowser;
procedure CreateWebBrowser(ParentWnd: HWND; Left, Top, Width, Height: Integer;
CallbackProc: TWebBrowserEventProc);
begin
DestroyWebBrowser;
InnoWebBrowser := TInnoWebBrowser.Create;
InnoWebBrowser.InitWebBrowser(ParentWnd, Left, Top, Width, Height, CallbackProc);
end;
procedure DestroyWebBrowser;
begin
InnoWebBrowser.Free;
InnoWebBrowser := nil;
end;
procedure ShowWebBrowser(Visible: Boolean);
begin
if Assigned(InnoWebBrowser) then
InnoWebBrowser.ShowWebBrowser(Visible);
end;
procedure NavigateWebBrowser(URL: PWideChar);
begin
if Assigned(InnoWebBrowser) then
InnoWebBrowser.NavigateWebBrowser(URL);
end;
{ TInnoWebBrowser }
constructor TInnoWebBrowser.Create;
begin
FWebBrowser := TWebBrowser.Create(nil);
end;
destructor TInnoWebBrowser.Destroy;
begin
FWebBrowser.Free;
inherited;
end;
procedure TInnoWebBrowser.InitWebBrowser(ParentWnd: HWND; Left, Top, Width, Height: Integer;
CallbackProc: TWebBrowserEventProc);
begin
FWebBrowser.ParentWindow := ParentWnd;
FWebBrowser.Left := Left;
FWebBrowser.Top := Top;
FWebBrowser.Width := Width;
FWebBrowser.Height := Height;
FWebBrowser.OnBeforeNavigate2 := OnBeforeNavigate2;
FEventCallback := CallbackProc;
end;
procedure TInnoWebBrowser.NavigateWebBrowser(URL: PWideChar);
begin
FWebBrowser.Navigate(URL);
end;
procedure TInnoWebBrowser.OnBeforeNavigate2(ASender: TObject; const pDisp: IDispatch; var URL,
Flags, TargetFrameName, PostData, Headers: OleVariant; var Cancel: WordBool);
var
URLString: WideString;
begin
if Assigned(FEventCallback) then
begin
URLString := URL;
FEventCallback(EVENT_BEFORE_NAVIGATE, PWideChar(URLString));
end;
end;
procedure TInnoWebBrowser.ShowWebBrowser(Visible: Boolean);
begin
if Visible then
FWebBrowser.Show
else
FWebBrowser.Hide;
end;
end.