![]() |
On Button click close all TPageControl TTabSheet`s
How to make this: On Button click close all TPageControl TTabSheet`s ?
|
Re: On Button click close all TPageControl TTabSheet`s
And more one question - how to make this: on right mouse click - TTabSheet under mouse show? :)
|
Re: On Button click close all TPageControl TTabSheet`s
Try this:
Delphi-Quellcode:
Notice that you can't have a context menu associated with the tab sheet header anymore.
procedure TWebForm.CloseAllButtonClick(Sender: TObject);
begin with PageControl do while PageCount > 0 do ActivePage.Free; end; procedure TWebForm.PageControlContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean); var i: integer; begin i := PageControl.IndexOfTabAt(MousePos.X, MousePos.Y); if i <> -1 then begin PageControl.ActivePageIndex := i; Handled := true; end; end; marabu |
Re: On Button click close all TPageControl TTabSheet`s
Zitat:
ich erweitere die fragestellung um die tatsache, dass ich nur einen gezielten tab schließen will. ich habs schon mit
Delphi-Quellcode:
versucht aber hmpf...nix da. knallt mir die anwendungen speicherverletzungen ums ohr.pagecontrol.pages[tabindex].destroy; //beziehungsweise pagecontrol.pages[tabindex].free; |
Re: On Button click close all TPageControl TTabSheet`s
Hallo.
Destroy() ist grundsätzlich falsch. Free() sollte funktionieren. Ist denn TabIndex ein gültiger Index? Oder kann es sein, dass der Fehler erst nach dem Free() auftritt? Zur Verdeutlichung zeige ich dir die Löschroutine für ActivePage:
Delphi-Quellcode:
Vielleicht setzt du mal einen Haltepunkt auf die Zeile mit Free in deinem Code und gehst mit F8 drüber hinweg.
procedure TDemoForm.TabCloseActionExecute(Sender: TObject);
var i: Integer; begin with PageControl do begin i := ActivePageIndex; ActivePage.Free; if i < PageCount then ActivePageIndex := i; end; end; Grüße vom marabu |
Re: On Button click close all TPageControl TTabSheet`s
Zitat:
frage noch dazu: ich erstelle meine tabs dynamisch und lad darin forms die aus dll´s stammen. aktualisiert sich der index der tabs, bzw wird der index eines zerstörten tabs wieder belegt, wenn ich einen neuen tab öffne?! sprich: wenn tab 2 zerstört wird, tab neu anlegen wird automatisch wieder index 2 vergeben?! |
Re: On Button click close all TPageControl TTabSheet`s
jep.
Das Page- bzw. TabControl reorganisiert die Tabindizes automatisch, wenn du einen aus der Mitte rauslöscht. Dann gibt es wieder die Indizes von 0 bis ... Sprich du löscht Page 2 und 3, dann wird aus Page 4 (falls vorhanden) Page 2 und aus Page 5 Page 3. Eine neue Page bekommt dann den Index 3 und ist Page 4. [EDIT] //hier noch mal ein wenig code wie ichs in meinem pagecontrolderivat gelöst habe
Delphi-Quellcode:
procedure TO12PageControl.ClosePage (Index: Integer);
begin //Event auslösen, falls es etwas aufzuräumen gibt if assigned(FOnBeforeCloseTab) then FOnBeforeCloseTab(Self, Index); //wenn index < letzte seite dann aktive seite = nächste seite if (Index < (PageCount - 1)) and (ActivePageIndex = Index) then ActivePageIndex := Index + 1; //SelectNextPage(True); //wenn index = letzte seite dann aktive seite = vorherige seite if (Index = PageCount) and (PageCount > 0) then ActivePageIndex := Index - 1; //seite löschen Pages[Index].free; //event auslösen, falls man jetzt etwas mit der neuen aktive seite machen möchte if assigned(FOnCloseTab) then FOnCloseTab(Self, ActivePageIndex); end; |
Re: On Button click close all TPageControl TTabSheet`s
Hmmm, bei mir gibt's nur eine AccessViolation.
Dazu sei gesagt, dass ich Lazarus benutze, daher könnte sich mein Ergebnis von anderen unterscheiden. Aber woher kann die kommen und wie verhindere ich sie? [EDIT] Hmm, jetzt funzt es... [EDIT2] Hää, jetzt doch nich mehr. Ich bin verwirrt. Hiillffee, ich versteh die Welt nicht mehr... :glaskugel: |
Re: On Button click close all TPageControl TTabSheet`s
Zeig ansonsten mal etwas Code, damit man mal rüberschauen kann.
|
Re: On Button click close all TPageControl TTabSheet`s
Delphi-Quellcode:
Pages ist das TPageControl.
procedure TForm1.MenuItem54Click(Sender: TObject);
begin reg[Pages.ActivePage.Tag].synedit.free; Pages.ActivePage.Free; // Hier liegt das Problem UpdateStatus('Done.'); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:26 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