Autor Beitrag
Gerhard_S
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98



BeitragVerfasst: Mi 18.09.13 22:30 
Hallo,
folgender Code sollte es tun:
ausblenden 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);
//  TabSheetPlus.InsertControl(WB1); //kein Unterschied zu folgendem zu sehen
    TControl(WB1).Parent := TabSheetPlus;
    WB1.Align := alClient;
    WB1.Visible := True;
    WB1.Navigate(Edit1.Text); //funktioniert nicht
    TabSheetPlus.Caption := Edit1.Text;
    PageControl1.ActivePage:= TabSheetPlus;
    //NewTab erzeugen funktioniert
    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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Button1Click(Sender: TObject); //ausgeführt, wenn TabSheetPlus aktiv ist
var i : integer;
begin
 for i:=0 to PageControl1.ActivePage.ControlCount -1 do
    if PageControl1.ActivePage.Controls[i] is TWebbrowser then
      begin
       ShowMessage('Soso'); //wird angezeigt  
      end;
end;

Aber das hier funktioniert problemlos:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 257



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Do 19.09.13 10:41 
user profile iconGerhard_S hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 305
Erhaltene Danke: 61

Win 7
Delphi 10.2 Tokyo Enterprise
BeitragVerfasst: Do 19.09.13 11:58 
Lass diese Zeile weg, dann gehts :

ausblenden Delphi-Quelltext
1:
// NewTab.Visible := True;					
Gerhard_S Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98



BeitragVerfasst: Do 19.09.13 14:08 
So geht's mit der Anzeige der Website:
ausblenden 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.
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 305
Erhaltene Danke: 61

Win 7
Delphi 10.2 Tokyo Enterprise
BeitragVerfasst: Do 19.09.13 14:18 
Das Ereignis OnShow des TTabSheets ist da sicher auch kein geeigneter Ort für solch Code.
Gerhard_S Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98



BeitragVerfasst: Do 19.09.13 15:40 
Welches andere Ereignis als "OnEnter" bietet sich denn an?
Das hier zeigt jedenfalls überhaupt keine Reaktion:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 305
Erhaltene Danke: 61

Win 7
Delphi 10.2 Tokyo Enterprise
BeitragVerfasst: Do 19.09.13 15:48 
Ins FormCreate vielleicht, aber ich hab keine Ahnung wann dein Programm das machen soll.
Gerhard_S Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 305
Erhaltene Danke: 61

Win 7
Delphi 10.2 Tokyo Enterprise
BeitragVerfasst: 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.

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98



BeitragVerfasst: Do 19.09.13 18:15 
Danke, so geht's.