procedure TChildForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
MainForm.DelChild(self);
if MainForm.MDIChildCount <= 1 then
TChildForm.Create(Mainform);
end;
function BrowserProc(hwndMe:HWND;msg,wParam,lParam:Cardinal):Cardinal;stdcall;
begin
if msg = WM_DESTROY then
PostMessage(Windows.GetParent(hwndMe),WM_CLOSE,0,0);
Result := CallWindowProc(Pointer(GetProp(hwndMe,'OldProc')),hwndMe,msg,wParam,lParam);
end;
procedure TChildForm.FormCreate(Sender: TObject);
begin
MainForm.AddChild(self);
cmbURL.Width:=pnlURL.Width;
StopEnabled := false;
BackEnabled := false;
ForwardEnabled := false;
Title := Caption;
SetProp(Browser.Handle,'OldProc',GetWindowLong(Browser.Handle,GWL_WNDPROC));
SetWindowLong(Browser.Handle,GWL_WNDPROC,Cardinal(@BrowserProc));
Browser.Navigate('about:blank');
end;
procedure TChildForm.GotoURL(AURL: String);
begin
Browser.Navigate(AURL);
end;
procedure TChildForm.BrowserBeforeNavigate2(Sender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
begin
Cancel := not MainForm.IsURLAllowed(URL);
end;
procedure TChildForm.BrowserNewWindow2(Sender: TObject;
var ppDisp: IDispatch; var Cancel: WordBool);
begin
ppDisp := TChildForm.Create(MainForm).Browser.Application;
end;
procedure TChildForm.cmbURLKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var
doc:OleVariant;
begin
if Key = VK_RETURN then
begin
if cmbURL.Items.IndexOf(cmbURL.Text) = -1 then
cmbURL.Items.Add(cmbURL.Text);
if CompareText(Copy(cmbURL.Text,1,11),'javascript:')= 0 then
begin
if Browser.Document <> nil then
begin
doc := Browser.Document;
doc.parentWindow.execScript(Copy(cmbURL.Text,12,32767));
end;
end
else
GotoURL(cmbURL.Text);
end;
end;
procedure TChildForm.BrowserStatusTextChange(Sender: TObject;
const Text: WideString);
begin
if MainForm.ActiveMDIChild = self then
MainForm.stbMain.SimpleText := text
end;
procedure TChildForm.BrowserTitleChange(Sender: TObject;
const Text: WideString);
begin
Title := Text;
Caption := Text;
MainForm.ChildCaption(self);
if Browser.Document <> nil then
cmbURL.Text := Browser.LocationURL;
end;
procedure TChildForm.BrowserProgressChange(Sender: TObject; Progress,
ProgressMax: Integer);
begin
if ProgressMax <> 0 then
begin
if Progress > ProgressMax then
Caption := Title +':Waiting...'
else
Caption := Title +':' + IntToStr(Progress * 100 div ProgressMax) +'%';
end
else
begin
Caption := Title;
end;
end;
procedure TChildForm.BrowserCommandStateChange(Sender: TObject;
Command: Integer; Enable: WordBool);
begin
case Command of
-1: StopEnabled := Enable;
1 : ForwardEnabled := Enable;
2 : BackEnabled := Enable;
end;
end;
procedure TChildForm.FormActivate(Sender: TObject);
begin
MainForm.ChildActive(self);
end;