Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Webbrowser mit Tabsheets, Zurück/Vorwärts Button spinnt... (https://www.delphipraxis.net/46367-webbrowser-mit-tabsheets-zurueck-vorwaerts-button-spinnt.html)

Teklab 23. Mai 2005 20:51


Webbrowser mit Tabsheets, Zurück/Vorwärts Button spinnt...
 
Hallo,

ich nutze für meinen WebBrowser die Standard TWebBrowser Komponente.
Wenn man das Programm startet läd er im ersten Tabsheet eine Seite,
wenn ich dann auf Links und so klicke funzt der Vor und Zurück Button
wunderbar.

Doch wenn ich nun ein "Link im neuen Fenster" Befehl ausführe, wird
ein neues Tabsheet mit einem neuen WebBrowser geöffnet und der Vor und
Zurück Button stellt sich auf null...


Was kann ich dagegen tun? Alles in Array auslagen? kam mir irgendwie in
den Sinn... aber wie oder was schlagt ihr so vor?

toms 23. Mai 2005 23:41

Re: Webbrowser mit Tabsheets, Zurück/Vorwärts Button spinnt.
 
Hallo,

Schau dir mein Mini Webbrowser Demo an.

Luckie 23. Mai 2005 23:44

Re: Webbrowser mit Tabsheets, Zurück/Vorwärts Button spinnt.
 
Zitat:

Zitat von Teklab
Doch wenn ich nun ein "Link im neuen Fenster" Befehl ausführe, wird
ein neues Tabsheet mit einem neuen WebBrowser geöffnet und der Vor und
Zurück Button stellt sich auf null...

Wohin soll es denn in dem neuen TWebBrowser zurückgehen? Es gibt ja nichts "davor".

Teklab 24. Mai 2005 07:57

Re: Webbrowser mit Tabsheets, Zurück/Vorwärts Button spinnt.
 
Ach so, ich meine ja auch wenn ich wieder auf den ersten Tabsheet klicke und das erste BrowserFenster wieder
angezeigt wird sind die buttons immer noch inaktiv. :)

Airblader 24. Mai 2005 08:38

Re: Webbrowser mit Tabsheets, Zurück/Vorwärts Button spinnt.
 
Naja, hört sich halt nach einem Fehler an, bei dem du vergisst, die Buttons wieder zu aktivieren.
Du könntest ruhig auch ein bisschen Code posten, damit wir nicht hellsehen müssen ;)

air

Teklab 24. Mai 2005 08:53

Re: Webbrowser mit Tabsheets, Zurück/Vorwärts Button spinnt.
 
Nein ich vergesse ihn nicht zu aktivieren, er nimmt dann nur die Haltung des neuen Tabsheets/Browsers an, da der neu ist setzt er die Vor und Zurück Buttons auf Null.

1. klicke ich im neuen Fenster auf einen Link dann wird der Zurück Button aktiviert und klicke ich nun Tabsheet 1 an ist der Zurück Button immer noch aktiv obwohl es ja die Startseite war. Und es kommt beim klick dann ein Error.

2. genauso ist es umgekehrt.

Delphi-Quellcode:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = Chr(vk_Return) then
WebBrowser1.Navigate(Edit1.Text);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if CheckBox1.Checked then
WebBrowser1.Refresh;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
WebBrowser1.GoBack;
end;

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
WebBrowser1.GoForward;
end;

procedure TForm1.BitBtn3Click(Sender: TObject);
begin
WebBrowser1.Stop;
end;

procedure TForm1.BitBtn4Click(Sender: TObject);
begin
WebBrowser1.Refresh;
end;

procedure TForm1.FormResize(Sender: TObject);
var
  r: TRect;
const
  SB_GETRECT = WM_USER + 10;
begin
  Edit1.Width := Form1.Width-68;
  Statusbar1.Perform(SB_GETRECT, 0, Integer(@R));
  ProgressBar1.Parent := Statusbar1;
  ProgressBar1.SetBounds(10, r.Top+2, 102, r.Bottom - r.Top-4);
with Statusbar1 do
begin
  Panels[1].Width := Width-125;
  Panels[0].Width := 125;
  Refresh;
end;
end;

procedure TForm1.WebBrowser1ProgressChange(ASender: TObject; Progress,
  ProgressMax: Integer);
var
  Position: Integer;
begin
  try
    if ProgressMax <> 0 then
    begin
      ProgressBar1.Enabled := true;
      Position := (Progress * 100) div ProgressMax;
      ProgressBar1.Position := Position;
    end;
  except
  end;
end;

procedure TForm1.WebBrowser1DocumentComplete(ASender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  ProgressBar1.Position := 0;
  ProgressBar1.Enabled := false;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  Webbrowser1.GoHome;
  FormResize(nil);
  Bitbtn1.Enabled := false;
  Bitbtn2.Enabled := false;
  Timer2.Enabled := false;
end;

procedure TForm1.WebBrowser1StatusTextChange(ASender: TObject;
  const Text: WideString);
begin
  StatusBar1.Panels[1].Text := Text;
end;

procedure TForm1.Schliessen1Click(Sender: TObject);
begin
close;
end;

procedure TForm1.WebBrowser1CommandStateChange(ASender: TObject;
  Command: Integer; Enable: WordBool);
begin
  case Command of
    CSC_NAVIGATEBACK: Bitbtn1.Enabled := Enable;
    CSC_NAVIGATEFORWARD: Bitbtn2.Enabled := Enable;
  end;
end;

procedure TForm1.BitBtn5Click(Sender: TObject);
begin
  Webbrowser1.GoHome;
end;

procedure TForm1.BitBtn6Click(Sender: TObject);
begin
  WebBrowser1.GoSearch;
end;

procedure TForm1.BitBtn7Click(Sender: TObject);
begin
  WebBrowser1.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_PROMPTUSER);
end;

procedure TForm1.BitBtn8Click(Sender: TObject);
begin
  WebBrowser1.Navigate('http://www.teklab.de/chat');
end;

procedure TForm1.BitBtn9Click(Sender: TObject);
begin
if LinkManager = 1 then begin
PageControl2.Visible := false;
LinkManager := 0;
end
else begin
PageControl2.Visible := true;
LinkManager := 1;
end;
end;

procedure TForm1.Seiteeinrichten1Click(Sender: TObject);
begin
  WebBrowser1.ExecWB(OLECMDID_PAGESETUP, OLECMDEXECOPT_PROMPTUSER);
end;

procedure TForm1.Drucken1Click(Sender: TObject);
begin
  WebBrowser1.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_PROMPTUSER);
end;

procedure TForm1.Druckvorschau1Click(Sender: TObject);
begin
  WebBrowser1.ExecWB(OLECMDID_PRINTPREVIEW, OLECMDEXECOPT_PROMPTUSER);
end;

procedure TForm1.Einstellungen1Click(Sender: TObject);
begin
  WebBrowser1.ExecWB(OLECMDID_PROPERTIES, OLECMDEXECOPT_PROMPTUSER);
end;

procedure TForm1.WebBrowser1NewWindow2(ASender: TObject; var ppDisp: IDispatch;
  var Cancel: WordBool);
  var
TabSheet: TTabSheet;
Web: TWebbrowser;
begin
  if Timer2.Enabled = false then Timer2.Enabled := true;
  if PopupBlocker < 2 then begin
  TabSheet := TTabSheet.Create(Form1.PageControl1);
  with TabSheet do
  begin
    PageControl := Form1.PageControl1;
  end;
  Web := TWebbrowser.CreateParented(TabSheet.Handle);
  TabSheet.InsertControl(Web);
  TWinControl(Web).align := alClient;
  ppDisp := Web.DefaultDispatch;
  Web.OnNewWindow2 := Webbrowser1NewWindow2;
  Web.OnCommandStateChange := Webbrowser1CommandStateChange;
  web.OnDocumentComplete := Webbrowser1DocumentComplete;
  Web.OnProgressChange := Webbrowser1ProgressChange;
  Web.OnstatusTextChange := Webbrowser1StatusTextChange;
  Pagecontrol1.Pages[pagecontrol1.PageCount - 1].caption := WebBrowser1.LocationName;
  PageControl1.ActivePage:=PageControl1.Pages[pagecontrol1.PageCount - 1];
end;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
  PopupBlocker := PopupBlocker+1;
  if PopupBlocker = 20 then begin
  PopupBlocker := 0;
  Timer2.Enabled := false;
  end;
end;
Falls noch jemand weiß, wie ich über das Menü -> Bearbeiten -> Suche
Die Suchfunktion ausführen kann wäre es mir auch ne große Hilfe *G*

toms 24. Mai 2005 10:01

Re: Webbrowser mit Tabsheets, Zurück/Vorwärts Button spinnt.
 
Wenn du mein Kommentar ignorierst, dann wiederhole ich ihn gerne:

Schau dir doch mal mein Mini Webbrowser Demo an.
Dort findest du auch eine "Menü -> Bearbeiten -> Suche" und vieles mehr....

Teklab 24. Mai 2005 13:46

Re: Webbrowser mit Tabsheets, Zurück/Vorwärts Button spinnt.
 
Ja, da steig ich irgendwie noch weniger durch, da dort was mit CurrentWB steht.
und dazu noch einige andere Dateien benötigt werden und ich nicht alles nutzen
will. ich machs nun ganz einfach. Ist sicher dumm ;)

aber ich weiß es leider nicht besser. Da mein Programm eh schon XML Datenbanken
verwendet werde ich einfach Tabellen anlegen wo von jedem TabSheet die Seite
gespeichert wird ;) und die danach einfach wieder gelöscht wird.

toms 25. Mai 2005 07:54

Re: Webbrowser mit Tabsheets, Zurück/Vorwärts Button spinnt.
 
Du kannst einfach fuer jeden Webbrowser den Vor & Zurueck Button Status speichern,
indem du:

// Den Webbrowser um Vor & Zurueck Status erweiterst:

Delphi-Quellcode:
type
  TWebbrowser = class(SHDocVw.TWebbrowser)
  private
    // Save CSC_NAVIGATEFORWARD and CSC_NAVIGATEBACK states
    FNavForward: Boolean;
    FNavBack: Boolean;
  public
  end;
.....

// Im OnCommandStateChange werden die Stati gesetzt

Delphi-Quellcode:
procedure TfrmMyBrowser.WebBrowser1CommandStateChange(Sender: TObject;
  Command: Integer; Enable: WordBool);
begin
  case Command of
    CSC_NAVIGATEBACK: begin
        // CSC_NAVIGATEBACK Status vom aktuellen Webbrowser speichern
        TWebbrowser(Sender).FNavBack := Enable;
        ToolbtnBack.Enabled := Enable;
      end;
    CSC_NAVIGATEFORWARD: begin
        // Save CSC_NAVIGATEFORWARD Status vom aktuellen Webbrowser speichern
        TWebbrowser(Sender).FNavForward := Enable;
        ToolBtnForward.Enabled := Enable;
      end;
  end;
end;
// Wenn der User ein anderes Tab auswaehlt, dann den Status
// vom Vor u. Zurueck Button aendern.

Delphi-Quellcode:
procedure TfrmMyBrowser.PageControlChange(Sender: TObject);
begin
  // Set Toolbutton State Back Forward
  ToolbtnBack.Enabled := TWebbrowser(ActivePage.Controls[0]).FNavBack;
  ToolBtnForward.Enabled := TWebbrowser(ActivePage.Controls[0]).FNavForward;
end;
Bei erzeugen eines neuen Browsers muss immer

Delphi-Quellcode:
NeuerWebbrowser.FNavForward := False;
NeuerWebbrowser.FNavBack := False;
gesetzt werden

Teklab 25. Mai 2005 08:52

Re: Webbrowser mit Tabsheets, Zurück/Vorwärts Button spinnt.
 
Thx das war jetzt verständlich werd es gleich mal ausprobieren. :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz