![]() |
Tab Register mit Close Button
Hallo zusammen,
ich habe mal eine Frage und zwar wie kann ich in meinen erzeugten Tab-Registern weitere Schaltflächen einbinden wie z.B. eine Close Schaltfläche für das Register. Die Schaltfläche soll im Tab erscheinen, nicht auf der Seite selbst (so wie bei Firefox etc). Gruss dTrace |
Re: Tab Register mit Close Button
Guck mal, ob das TabControl von der JVCL das kann.
|
Re: Tab Register mit Close Button
Hallo dtrace,
du kannst den Button selbst auf das TPageControl zeichnen, dies geht mehr oder minder einfach. Ein kleines Beispiel von mir findest du ![]() Schöne Grüße |
Re: Tab Register mit Close Button
Vielen Dank :-D
wie weise ich den dynamisch Ereignisse hinzu? Z.B. Möchte ich dass wenn ich auf das Button Klicke, dass z.B. ein Ereignis wie z.B. showmessage ausgelöst wird. |
Re: Tab Register mit Close Button
Hallo nochmal,
ich habe (leider) grad kein Delphi installiert, vlt. hilft dir das aber trotzdem. Ich habe aus dem Code aus dem Beispiel einfach eine kleine Klasse erstellt, die könnte zum Beispiel so aussehen:
Delphi-Quellcode:
Da das Objekt rwCloseButton von TSpeedButton abgeleitet ist, verfügt es auch über eine OnClick() Prozedur, die zum Beispiel wie folgt aussehen kann:
TrwCloseButton = class(TSpeedButton)
private FHotTrack: Boolean; protected procedure Paint; override; public constructor Create(AOwner: TComponent); override; property HotTrack: Boolean read FHotTrack write FHotTrack default True; end;
Delphi-Quellcode:
Hoffe geholfen zu haben. :-)
procedure TForm.rwCloseButtonClick(Sender: TObject);
begin (Sender as TrwCloseButton).Visible := false; //Tab schließen etc pp end; |
Re: Tab Register mit Close Button
Vielen Danke :-D
komme endlich weiter. Aber eins noch, ich nutze das Tab Register für meinen selbstgebauten Browser. Da das Caption Property des aktiven Tab-Registers sich ständig ändern kann wenn ich eine neue Seite aufrufe, blieb die Schaltfläche an der festgesetzten Position stehen. Das konnte ich wie folgt lösen:
Delphi-Quellcode:
Das funktioniert wunderbar, wenn ich nur 1 Tab habe. Aber sobald ich mehrere Tabs offen habe, dann gibt es ein großes Durcheinander mit den Schaltflächen, da ich ja wesentlich mehr als eine Schaltfläche habe. Wie spreche ich die Schaltfläche des aktiven Tabs an? Leider funktioniert das nicht mit "with Tab.activepage do"... da die Schaltfläche sich nicht auf die aktive Seite befindet.
procedure TFMain.WebBrowser1TitleChange(ASender: TObject;
const Text: WideString); var Index: Integer; begin Index := tab.ActivePageIndex; tab.Pages[Index].Caption := Text + ' '; Rect := Tab.TabRect(Tab.ActivePageIndex); with Tab do if ControlCount > 0 then begin if Controls[0] is TSpeedbutton then begin TSpeedbutton(Controls[1]).top := Rect.Top + 2; //hier muss die 1 ausgetauscht werden TSpeedbutton(Controls[1]).left := Rect.Right -10; //hier muss die 1 ausgetauscht werden // Result := (TEmbeddedWB(ActivePage.Controls[0])); end else // Result := Webbrowser1; end; end; hast du eine Idee? |
Re: Tab Register mit Close Button
Ich kenne alle diese Probleme, hatte die TabButtons in meinen Editor eingebaut und mir tagelang die Zähne daran ausgebissen. Ich habe es dann letztendlich so gelöst, eine andere Möglichkeit fand ich nicht:
Bei jedem neuen Tab oder wenn sich die Breite ändert, lasse ich alle Buttons neu zeichnen. Ebenso beim Schließen eines Tabs. Ich habe das nur Quick&Dirty realisiert und es ist schlichtweg zu schlecht um es hier ins Forum zu stellen, knobel einfach mal ein bisschen selber, musste ich ja auch. :P |
Re: Tab Register mit Close Button
Problem gelöst :lol: :lol: :lol:
Und hier ist der Source Code für die dynamische Anpassung :wink:
Delphi-Quellcode:
//Alle Controlls anpassen
for k := 0 to tab.PageCount - 1 do begin Rect2 := Tab.TabRect(k); with Tab do if ControlCount > 0 then begin j := k; if Controls[j] is TSpeedbutton then begin TSpeedbutton(Controls[j]).top := Rect2.Top + 2; TSpeedbutton(Controls[j]).left := Rect2.Right -10; end else end; end; |
Re: Tab Register mit Close Button
Mach dich mal ans Schließen der Tabs, da wirst du noch viel Freude haben. :P
|
Re: Tab Register mit Close Button
Funktioniert auch wunderbar :lol:
habe somit alle Probleme gelöst. Hier der SourceCode für das schließen:
Delphi-Quellcode:
procedure TFMain.closeTab;
var WB: TEmbeddedWB; j: Integer; k: Integer; begin WB := GetcurrentWB; Rect2 := Tab.TabRect(Tab.ActivePageIndex); WB.Destroy; //Closebutton zerstören with Tab do begin if ControlCount > 0 then begin j := Tab.ActivePageIndex; if Controls[j] is TSpeedbutton then begin TSpeedbutton(Controls[j]).Destroy; end; end; end; tab.Pages[tab.ActivePageIndex].Destroy; //Tab zerstören //Alle Controlls anpassen for k := 0 to tab.PageCount - 1 do begin Rect2 := Tab.TabRect(k); with Tab do if ControlCount > 0 then begin j := k; if Controls[j] is TSpeedbutton then begin TSpeedbutton(Controls[j]).top := Rect2.Top + 2; TSpeedbutton(Controls[j]).left := Rect2.Right - 10; end; end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:48 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-2025 by Thomas Breitkreuz