Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Zur Laufzeit erzeugter TWebbrowser navigiert nicht
Gerhard_S - Mi 18.09.13 22:30
Titel: Zur Laufzeit erzeugter TWebbrowser navigiert nicht
Hallo,
folgender Code sollte es tun:
Delphi-Quelltext
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:
| uses SHDocVw; ... procedure TForm1.TabSheetPlusShow(Sender: TObject); var WB1: TWebBrowser; NewTab: TTabSheet; begin Edit1.Text := 'http://www.wikipedia.de'; PageControl1.ActivePage:= TabSheetPlus; try WB1 := TWebbrowser.Create(TabSheetPlus); TControl(WB1).Parent := TabSheetPlus; WB1.Align := alClient; WB1.Visible := True; WB1.Navigate(Edit1.Text); TabSheetPlus.Caption := Edit1.Text; PageControl1.ActivePage:= TabSheetPlus; NewTab:= TTabSheet.Create(PageControl1); NewTab.Visible := True; NewTab.PageControl := Form1.PageControl1; NewTab.Caption := ' + '; except WB1.Free; NewTab.Free; end; end; |
doch leider navigiert der WB nicht zum Ziel.
Eine Browserinstanz ist allerdings vorhanden, wie folgendes zeigt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.Button1Click(Sender: TObject); var i : integer; begin for i:=0 to PageControl1.ActivePage.ControlCount -1 do if PageControl1.ActivePage.Controls[i] is TWebbrowser then begin ShowMessage('Soso'); end; end; |
Aber das hier funktioniert problemlos:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.FormCreate(Sender: TObject); var WB: TWebbrowser; begin WB := TWebbrowser.Create(TabSheet1); TControl(WB).Parent := TabSheet1; WB.Align := alClient; WB.Silent := True; WB.Visible := True; PageControl1.ActivePage := TabSheet1; Edit1.Text := 'http://www.google.de'; WB.Navigate(Edit1.Text); TabSheet1.Caption := Edit1.Text; end; |
Woran kann dieses unterschiedliche Verhalten liegen?
Jakane - Do 19.09.13 10:26
mach mal das try-except weg, vielleicht wirft er ein Fehler und du siehst den blos nicht
Gerd Kayser - Do 19.09.13 10:41
Gerhard_S hat folgendes geschrieben : |
Woran kann dieses unterschiedliche Verhalten liegen? |
Mir fällt auf, dass die Reihenfolge von ActivePage und dem Navigate in beiden Sourcen unterschiedlich ist. Stell mal die beiden Zeilen um. Vielleicht liegt es daran.
baumina - Do 19.09.13 11:58
Lass diese Zeile weg, dann gehts :
Gerhard_S - Do 19.09.13 14:08
So geht's mit der Anzeige der Website:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.TabSheetPlusShow(Sender: TObject); var NewWeb: TWebBrowser; begin Edit1.Text := 'http://wikipedia.de'; StatusBar1.Panels[0].Text := 'TabSheetPlus gewählt'; NewWeb:=TWebBrowser.Create(TabSheetPlus); TWinControl(NewWeb).parent := TabSheetPlus; NewWeb.Align:= alClient; NewWeb.Visible := True; NewWeb.Navigate(Edit1.Text); TabSheetPlus.Caption := Edit1.Text; end; |
Wenn ich aber im gleichen Zug einen neuen Tab erzeugen will, zeigt der Cursor kurz das Aktivitätssymbol, das Tabsheet bleibt aber weiß. Langsam wird mir mulmig.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TForm1.TabSheetPlusShow(Sender: TObject); var NewTab: TTabSheet; NewWeb: TWebBrowser; begin Edit1.Text := 'http://wikipedia.de'; StatusBar1.Panels[0].Text := 'TabSheetPlus gewählt'; NewWeb:=TWebBrowser.Create(TabSheetPlus); TWinControl(NewWeb).parent := TabSheetPlus; NewWeb.Align:= alClient; NewWeb.Visible := True; NewWeb.Navigate(Edit1.Text); TabSheetPlus.Caption := Edit1.Text; NewTab:= TTabSheet.Create(Form1.PageControl1); TWinControl(NewTab).parent := Form1.PageControl1; NewTab.PageIndex := TabSheetPlus.PageIndex + 1; NewTab.PageControl := Form1.PageControl1; NewTab.Caption := ' + '; end; |
baumina - Do 19.09.13 14:18
Das Ereignis OnShow des TTabSheets ist da sicher auch kein geeigneter Ort für solch Code.
Gerhard_S - Do 19.09.13 15:40
Welches andere Ereignis als "OnEnter" bietet sich denn an?
Das hier zeigt jedenfalls überhaupt keine Reaktion:
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.TabSheetPlusEnter(Sender: TObject); begin ShowMessage('On Enter '); end; |
wobei ich für OnShow schon die funktionierende Kurzvariante nehme.
baumina - Do 19.09.13 15:48
Ins FormCreate vielleicht, aber ich hab keine Ahnung wann dein Programm das machen soll.
Gerhard_S - Do 19.09.13 15:59
Es soll so sein, wie im Firefox zu sehen:
Bei Klick auf das Plus-Tabsheet öffnet sich ein leeres Tabsheet (Caption: 'Neuer Tab'); außerdem wird ein neues Tabsheet mit + als Caption erzeugt.
Leider kann ich nicht erkennen, ob der Webbrowser auf dem leeren Tabsheet schon vorhanden ist oder ob er erst nach einer Eingabe in das Edit-Feld erzeugt wird.
baumina - Do 19.09.13 16:12
Ich habe kein Firefox, aber wie wäre es denn, wenn Du gleich zu Anfang 2 TabSheets machen würdest. Im 2. würde dann das "+" stehen (aber kein Webbrowser drauf haben), hier könntest du z.B. den Tag auf 1 stellen, damit du weisst, dass dieses ein neues Tabsheet ist. Im OnChange des TPageControls könntest du dann anhand des ActivePageIndexes schauen, ob dieses TabSheet den Tag=1 hat, wenn ja, Tag auf 0 setzen und deinen Code dazu (Webbrowser auf das aktive Tabsheet erzeugen) und Tag des neue erzeugten Tabsheets (ohne Webbrowser) wieder auf 1 setzen. Anstatt den Tag zu setzen, kannst auch einfach schauen, ob das aktive Tabsheet einen Webbrowser hat.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure TForm1.PageControl1Change(Sender: TObject); var NewTab: TTabSheet; NewWeb: TWebBrowser; begin if PageControl1.ActivePage.Tag = 0 then begin Exit; end;
PageControl1.ActivePage.Tag := 0; NewWeb:=TWebBrowser.Create(PageControl1.ActivePage); TWinControl(NewWeb).parent := PageControl1.ActivePage; NewWeb.Align:= alClient; NewWeb.Visible := True; NewWeb.Navigate('http://wikipedia.de'); PageControl1.ActivePage.Caption := 'http://wikipedia.de'; NewTab:= TTabSheet.Create(PageControl1); TWinControl(NewTab).parent := PageControl1; NewTab.PageControl := PageControl1; NewTab.Caption := ' + '; NewTab.Tag := 1; end; |
Gerhard_S - Do 19.09.13 18:15
Danke, so geht's.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!