Some more tips to make a webbrowser application that rocks!
Get the right popupwindow sizeIn
episode #2 we managed to retain the ASP.NET Session for popup windows in our TWebbrowser application.
Initially we don't know what the size of our popup form must be. Fortunately TWebbrowser has two events for that, so that we can size our window accordingly.
Use the
OnWindowSetHeight and
OnWindowSetWidth event to do this.
procedure TfrmPopUpBrowser.WebBrowser1WindowSetHeight(
ASender: TObject; Height: Integer);
begin
Self.Height := WebBrowser1.Height + 20;
end;
procedure TfrmPopUpBrowser.WebBrowser1WindowSetWidth(
ASender: TObject; Width: Integer);
begin
Self.Width := WebBrowser1.Width + 20;
end;
The additional distance of 20, is to avoid scrollbars.
Filling up a combobox with the visited websitesIf you use a combobox to harvest the visited websites, just like Internet Explorer then you could use the
OnDocumentComplete event to get the complete URL and then add it to your combobox. I use this event for three reasons:
1. It gives you a complete URL (not www.codegear.com not http://www.codegear.com but http://www.codegear.com/)
2. If the typed address is not available (a non existing website) the
OnNavigateError event will trigger, so you could then decide not to add the URL to the webbrowser.
3. Having a good URL gives the ability to locate the URL in combobox again if the user navigates back to the page.
You don't have this advantages if you add the URL into the combobox directly after input.
procedure TfrmPopUpBrowser.WebBrowser1DocumentComplete(
ASender: TObject;
const pDisp: IDispatch;
var URL: OleVariant);
begin
AddAddressToCombobox(URL);
end;
procedure TfrmPopUpBrowser.AddAddressToCombobox(
Adres : string);
begin
Adres := LowerCase(Adres);
If (Adres <> '')
and (cboAddress.Items.IndexOf(Adres) = -1) then begin
cboApplication.Items.Add(Adres);
end;
end;
end;
Enable/Disable navigatebuttons (back/forward) automaticallyIf you put two buttons on your form to navigate back and forward in the webbrowser you will get an error if there is no page to go back to. (Webbrowser1.GoBack and Webbrowser1.GoForward methods)
You can use the
OnCommandChange event to make this buttons 'case sensitive':
procedure TfrmPopUpBrowser.WebBrowser1CommandStateChange(
ASender: TObject; Command: Integer; Enable: WordBool);
begin
case Command of
CSC_NAVIGATEBACK: tbApplicationBack.Enabled := Enable;
CSC_NAVIGATEFORWARD: tbApplicationNext.Enabled := Enable;
end;
end;
Add a progress bar to your applicationIf you want to see the load progress of a page then use the
OnProgressChange event.
procedure TfrmPopUpBrowser.WebBrowser1ProgressChange(
ASender: TObject; Progress, ProgressMax: Integer);
begin
ProgressBar.Max := ProgressMax;
ProgressBar.Min := 0;
ProgressBar.Position := Progress;
end;
Have the url in your statusbar or labelUse the OnStatusChange event to show the navigated address in a label or statusbar.
procedure TfrmPopUpBrowser.WebBrowser1StatusTextChange(
ASender: TObject; const Text: WideString);
begin
StatusBar.SimpleText := Text;
end;