Problem mit Liste der geöffneten MDI-Child-Fenster
Liste der Anhänge anzeigen (Anzahl: 3)
Hallo,
bei mir raucht's mal wieder! :gruebel: :drunken: Also, ich habe da einen Editor als MDI-Anwendung und möchte mir die göffneten Child-Fenster als TabSheets in einem PageControl anzeigen lassen. Dazu nutze ich folgende Prozedur:
Delphi-Quellcode:
Diese Prozedur rufe ich nun beim OnCreate des ChildFensters auf. Soweit so gut. procedure TFrameForm.MakeChilds; var i, c: integer; begin i := 0; c := 0; for i := 0 to PageControl1.PageCount -1 do PageControl1.Pages[i].Free; for c:=0 to MDIChildCount -1 do with tTabSheet.Create(Self) do begin PageControl := PageControl1; caption := MDIChildren[c].caption; end; if MDIChildCount = 0 then CoolBar1.Height := Toolbar2.Height +4 else CoolBar1.Height := Toolbar2.Height + PageControl1.Height +8; end; Bei zwei Childs funzt das auch, siehe Bild 'korrekt.jpg'; beim Öffnen des dritten Childs kommt's dann, siehe 'unkorrekt.jpg'; beim vierten ist dann wieder alles in Butter -> 'geht_wieder.jpg'. Hat jemand eine halbwegs logische Erklärung dafür? :wiejetzt: Ach ja, irgendwie muss ich noch auf das Beenden eines Childs reagieren, aber wie? Beim OnDestroy mit o.g. Prozedur zählt immer noch das gerade geschlossene Fenster mit. :shock: |
Re: Problem mit Liste der geöffneten MDI-Child-Fenster
Hallo,
das ist völlig klar, beim freigeben der PageControls gehst Du falsch herum vor. Ändere Deine Schleife von
Delphi-Quellcode:
in
for i := 0 to PageControl1.PageCount -1 do
Delphi-Quellcode:
und alles ist wunderbar.
for i := PageControl1.PageCount -1 downto 0 do
Uwe |
Re: Problem mit Liste der geöffneten MDI-Child-Fenster
@ uwewo:
Es scheint wohl so, habe den Code umgestellt auf:
Delphi-Quellcode:
Jetzt funktioniert es richtig! Danke für den Tipp!!
for i := PageControl1.PageCount -1 downto 0 do
PageControl1.Pages[i].Free; Hhm, nun brauche ich nur noch ne vernünftige Lösung für das Schliessen der Childs. Mit dieser Schleife im OnDestroy oder OnClose des ChildFensters wird immer noch das eigentlich gerade geschlossene Fenster mit angezeigt. |
Re: Problem mit Liste der geöffneten MDI-Child-Fenster
Zitat:
Dann kannst Du den abtesten und das Fenster ignorieren.. Frank :coder: |
Re: Problem mit Liste der geöffneten MDI-Child-Fenster
Hi hincapie,
eigentlich finde ich es eh nicht so toll, daß Du jedesmal alle PageControls entfernst und dann alle wieder erstellst. Du kannst doch auch über den Index, einzelne bei Gelegenheit freigeben und neue einfach hinzufügen. Oder verstehe ich es nicht richtig. Uwe |
Re: Problem mit Liste der geöffneten MDI-Child-Fenster
Zitat:
|
Re: Problem mit Liste der geöffneten MDI-Child-Fenster
Zitat:
Wie sollte das denn Deiner Meinung nach aussehen? :?: |
Re: Problem mit Liste der geöffneten MDI-Child-Fenster
Du kannst alternativ auch testen, ob das Fenster bald zerstört werden wird:
Delphi-Quellcode:
Dann kannst du die Routine auch im OnDestroy der MDI-Fenster benutzen (wenn das Ereignis ausgelöst wird ist das Flag csDestroying schon gesetzt).
for c:=0 to MDIChildCount -1 do
if not (csDestroying in MDIChildren[c].ComponentState) then with tTabSheet.Create(Self) do begin PageControl := PageControl1; caption := MDIChildren[c].caption; end; |
Re: Problem mit Liste der geöffneten MDI-Child-Fenster
Zitat:
|
Re: Problem mit Liste der geöffneten MDI-Child-Fenster
So, gleicher Kontext, neues Problem:
Ich möchte nun mit einem Klick auf das TabSheet das dazugehörige Child-Fenster in den Vordergrund bringen. Diese Anweisung funktioniert nur bedingt:
Delphi-Quellcode:
Beim ersten Klick wechselt nur die Reihenfolge der Tabsheets im PageControl, beim nächsten Klick wird erst das richtige Childfenster in den Vordergrund gebracht.
procedure TFrameForm.PageControl1Change(Sender: TObject);
begin MdiChildren[PageControl1.ActivePageIndex].BringToFront; end; Hat jemand eine Erklärung dafür? :gruebel: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz