![]() |
Alle Tabs eines PageControls schließen
Hallo ich möchte gans gerne alle Tabs meines Page controls schließen bis auf das erste Tab.
Ich hatte da auch was gemacht und das funzt nicht ich bekomme dann einen Zugriffsfehler aber ich weiß nicht warum. Eigentlich müsste das so funktionieren
Delphi-Quellcode:
begin
// don't close the first tab PageControl3.ActivePageIndex:=PageControl3.PageCount-1; while PageControl3.ActivePageIndex > 0 do begin if PageControl3.ActivePageIndex > 0 then begin if PageControl3.ActivePage.Controls[0] is TSynEdit then begin // Free (TSynEdit(PageControl3.ActivePage.Controls[0])).free; HTMLEDIT := nil; // Free active Tab PageControl3.ActivePage.Free; end; PageControl3.ActivePageIndex:=PageControl3.ActivePageIndex-1; end; end; PageControl3Change(html); end; |
Re: Alle Tabs eines PageControls schließen
:hi: hi!
warum machst du es dir so umständlich, würds nicht auch so gehn?
Delphi-Quellcode:
Natürlich musst du dein PageControl anpassen ;)
var
i: Integer; begin i := PageControl1.PageCount -1; If i <= 0 then exit; repeat PageControl1.Pages[i].Destroy; Dec(i, 1); until PageControl1.PageCount = 1; end; Durch aufrufen von Destroy werden alle auf der Seite des PageControl abgelegten Kompos gleich mit zersört/speicher freigegeben. mfg phlux :hi: |
Re: Alle Tabs eines PageControls schließen
mmmm stimmt so gehts natürlich auch danke
|
Re: Alle Tabs eines PageControls schließen
NIEMALS!!!! .Destroy direkt aufrufen -
|
Re: Alle Tabs eines PageControls schließen
stimmt ersetze destroy durch free ;)
|
Re: Alle Tabs eines PageControls schließen
Zitat:
|
Re: Alle Tabs eines PageControls schließen
Also für noch besser halte ich es die Tabs nicht zu löschen, sondern sie bestehen zu lassen und sie nur aus dem PageControl zu entfernen:
Delphi-Quellcode:
var
i: Integer; begin i := PageControl1.PageCount -1; If i <= 0 then exit; repeat PageControl1.Pages[i].PageControl:=nil; Dec(i, 1); until PageControl1.PageCount = 1; end; |
Re: Alle Tabs eines PageControls schließen
Den Code kann man aber noch verbessern:
Zitat:
Delphi-Quellcode:
mfg
var
i: Integer; begin for i := PageControl1.PageCount -1 downto 1 do begin PageControl1.Pages[i].Free; end; end; Christian //Edit: Hilfe. Ich bin ja viel zu spät! Ich dachte DP hätte n eingebauten "Schutz" gegen sowas. :gruebel: Jedenfalls bakam ich sonst als die Nachricht, dass zwischendurch gepostet wurde |
Re: Alle Tabs eines PageControls schließen
Free is nich sicherer als Destroy
aber Free sorgt dafür das alle möglichen speicherbereiche und deinitialisierungs routinnen vom object aufgerufen werden und als letztes .Destroy aufruft - ums mal ganz einfach auszudrücken sicher könnte man .destroy auch direkt aufrufen, aber es wird dann vllt der speicher nicht freigegeben und kann so zu memleaks führen </klugscheiß> |
Re: Alle Tabs eines PageControls schließen
Zitat:
Werden die Tabs denn dann noch vom PageControl gefreed, wenn sie ausm PageControl entfernt sind? mfg Christian |
Re: Alle Tabs eines PageControls schließen
Zitat:
mfg Christian |
Re: Alle Tabs eines PageControls schließen
Zitat:
|
Re: Alle Tabs eines PageControls schließen
Zitat:
|
Re: Alle Tabs eines PageControls schließen
Zitat:
Free ist in Verbindung mit FreeAndNil() ein bisschen sicherer, weil dann eineige AV's verhindert werden. Kurz der Quellcode von Free:
Delphi-Quellcode:
Destroy ist der Destruktor, der die ganzen Objekte usw. freigibt.
procedure TObject.Free;
begin if Self <> nil then Destroy; end; So, das musste mal gesagt werden ;) |
Re: Alle Tabs eines PageControls schließen
Zitat:
mfg Christian |
Re: Alle Tabs eines PageControls schließen
Zitat:
|
Re: Alle Tabs eines PageControls schließen
im obersten object TObject ist das vllt so ~sigh~
dann frag ich mich wozus noch derartige functionen wie FreeInstance, CleanupInstance & co gibt </rhetorisch frag> ich halt mich da raus - denk doch was du willst |
Re: Alle Tabs eines PageControls schließen
@r2c2: ich hatte es in ne repeatschleife gepackt weil ich dachte downto geht nicht mehr in delphi ;) wars dann step was nicht mehr ging :gruebel:
|
Re: Alle Tabs eines PageControls schließen
downto geht in delphi noch genauso wie in turbopasal auch
|
Re: Alle Tabs eines PageControls schließen
Zitat:
mfg Christian |
Re: Alle Tabs eines PageControls schließen
step gabs in Pascal/Delphi NOCH NIE :) das ein schlüsselwort aus dem *Basic* wortschatz
|
Re: Alle Tabs eines PageControls schließen
Hmmmm....
Was hat das denn jetzt alles mit dem Thread zu tun? :gruebel: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:52 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