AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Problem mit zur Laufzeit erstelltem Button
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit zur Laufzeit erstelltem Button

Ein Thema von Fox80 · begonnen am 4. Mai 2007 · letzter Beitrag vom 5. Mai 2007
Antwort Antwort
Fox80

Registriert seit: 18. Apr 2007
Ort: Rostock
3 Beiträge
 
#1

Problem mit zur Laufzeit erstelltem Button

  Alt 4. Mai 2007, 00:51
Hi,

ich möchte in meinem zur Laufzeit erstellten Tabsheet mittels Button das Tabsheet wieder schließen.

folgenden Code habe ich:

Delphi-Quellcode:
procedure THauptseite.closeButtonClick(Sender: TObject);
begin
  if navpagecontrol.ActivePageIndex > 0 then NavPageControl.ActivePage.Free;
end;

// target_new
procedure THauptseite.WebBrowserNewWindow2(Sender: TObject;
  var ppDisp: IDispatch; var Cancel: WordBool);
var
  TabSheet: TTabSheet;
  Web: TWebbrowser;
  newNav: TPanel;
  closeTabButton: TButton;
begin
  TabSheet := TTabSheet.Create(NavPageControl);
  TabSheet.PageControl := NavPageControl;
  newNav := TPanel.Create(TabSheet);
  newNav.parent := TabSheet;
  with newNav do begin
    height := 30;
    align := altop;
  end;
  closeTabButton := TButton.Create(newNav);
  closeTabButton.Parent := newNav;
  with closeTabButton do begin
    caption := 'closeTab';
    width := 60;
    height := 20;
    top := 5;
  end;
  CloseTabButton.OnClick := closeButtonClick;
  Web := TWebBrowser.Create(TabSheet);
  Web := TWebbrowser.CreateParented(TabSheet.Handle);
  TabSheet.InsertControl(Web);
  Web.Align := alClient;
  Web.OnNewWindow2 := WebbrowserNewWindow2;
  NavPageControl.ActivePageIndex := NavPageControl.PageCount-1;
  ppDisp := Web.DefaultDispatch;

end;
Ist es möglich den bereits vorhandenen Button zu "kopieren" anstatt einen neuen zur Laufzeit zu erstellen?
Ich würde auch gerne die "vor/zurück/aktualsieren" Buttons des "echten" Webbrowsers nutzen/kopieren, so daß sie auch nur im aktiven tabsheet arbeiten.

Zweite Frage: wie bekomme ich nun noch den neuen Locationname in die Tabsheet.caption des neu erzeugten Fensters?
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Problem mit zur Laufzeit erstelltem Button

  Alt 4. Mai 2007, 06:29
Hi Fox80!

Das "Kopieren" wird nicht so einfach möglich sein. So wie du es jetzt machst, ist das ganz ok.
Die Vor/Zurück/Refresh Aktionen kannst du auch mit einem eigenen Button auslösen. Einfach einen dynamisch erstellen und onClick die entsprechende Aktion ausführen.

Folgendes Leak solltest du noch beheben:
Delphi-Quellcode:
Web := TWebBrowser.Create(TabSheet); //Dieser Webbrowser wird wahrscheinlich nie freigegeben werden
Web := TWebbrowser.CreateParented(TabSheet.Handle);

PS:
Das Ganze kann man auch schön mit einem Frame lösen.
Du erstellst dir einen Frame der ein Webbrowser-Control und alle zugehörigen Buttons enthält. Den Code dafür schreibst du auch gleich in den Frame.
Und wenn ein neuer Tab geöffnet werden soll, erzeugst du einfach einen neuen Frame in diesem Tabsheet. Ist einfach und spart viel Arbeit.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Blackheart

Registriert seit: 4. Mai 2005
846 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Problem mit zur Laufzeit erstelltem Button

  Alt 4. Mai 2007, 07:37
Du kannst auch deinen Button per Parent setzen wenn das reicht.
Button.Parent:=AktuellesTabSheet;
Blackheart
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Problem mit zur Laufzeit erstelltem Button

  Alt 4. Mai 2007, 07:38
Herzlich willkommen in der Delphi-PRAXiS, Fox80.

Anstelle einzelne Buttons für jedes TabSheet vorzusehen würde ich eine Symbolleiste (ToolBar) verwenden, deren Actions auf das jeweils aktuelle TabSheet wirken.

Für dein Problem mit der Anzeige der Location findest du vielleicht hier eine Anregung: klick

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
Fox80

Registriert seit: 18. Apr 2007
Ort: Rostock
3 Beiträge
 
#5

Re: Problem mit zur Laufzeit erstelltem Button

  Alt 4. Mai 2007, 11:46
Danke schon einmal für die Infos

Zitat von marabu:
Für dein Problem mit der Anzeige der Location findest du vielleicht hier eine Anregung: klick

Freundliche Grüße vom marabu
nunja, soweit war ich schon einmal - allerdings wird dann jeder Caption in den neuen Tabsheets der Locationname vom 1ten Browser gegeben

Delphi-Quellcode:
procedure THauptseite.WebBrowserNewWindow2(Sender: TObject;
  var ppDisp: IDispatch; var Cancel: WordBool);
var
  TabSheet: TTabSheet;
  newNav: TPanel;
  closeTabButton: TButton;
  Web: TWebbrowser;
begin
  TabSheet := TTabSheet.Create(NavPageControl);
  TabSheet.PageControl := NavPageControl;
...

  Web.OnNewWindow2 := WebbrowserNewWindow2;
  Web.OnBeforeNavigate2 := WebbrowserBeforeNavigate2;

...

end;
Delphi-Quellcode:
procedure THauptseite.WebBrowserBeforeNavigate2(Sender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
begin
  NavPageControl.ActivePage.Caption := Webbrowser.LocationName;
end;
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#6

Re: Problem mit zur Laufzeit erstelltem Button

  Alt 4. Mai 2007, 12:50
Hast du den Unterschied bemerkt? Ich verwende den URL aus dem Event anstelle von Location. Da ich nicht unbedingt alle Parameter aus dem URL in der Caption sehen möchte, zerlege ich den URL zuerst in seine Bestandteile und baue mir die Anzeige dann nach Bedarf zusammen.

Freundliche Grüße
  Mit Zitat antworten Zitat
Fox80

Registriert seit: 18. Apr 2007
Ort: Rostock
3 Beiträge
 
#7

Re: Problem mit zur Laufzeit erstelltem Button

  Alt 4. Mai 2007, 23:02
gesehen schon, allerdings möchte ich wie gesagt den Locationname, nicht die URL sehen
muss ja irgendwie möglich sein auf dem zur laufzeit erstellten webbrowser das in die caption zu bekommen
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Problem mit zur Laufzeit erstelltem Button

  Alt 5. Mai 2007, 14:47
Hallo,

der URL steht vor dem Laden des HTML-Dokuments fest, der LocationName (TITLE) erst hinterher:

Delphi-Quellcode:
procedure TDemoForm.WebBrowserDocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
  with pDisp as IWebBrowser2 do
    PageControl.ActivePage.Caption := LocationName;
end;
Wenn jede Instanz von TWebBrowser diesen event handler benutzt, dann sparst du dir das Suchen nach dem WebBrowser auf der ActivePage. Bei Webseiten mit Frames kann man das noch etwas verfeinern, damit der Title nicht n-mal ausgewertet wird.

Freundliche Grüße
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz