![]() |
[gelöst] Fensterreihenfolge
Hallo,
ich habe ein Programm, dessen Hauptfenster beim Start nicht angezeigt wird. Es gibt lediglich ein Symbol im Tray. Ich benutze hierzu Application.ShowMainForm:=False; in der dpr. Es gibt mehrere Fenster, die jeweils separat benutzbar sein sollen und daher mit Show aufgerufen werden. Wenn ich dann eines der Fenster anzeige, erscheint auch in der Taskleiste ein Eintrag, der beim Schließen aber wieder verschwindet. Zusätzlich gibt es beim Taskleisteneintrag natürlich ein System-Popup-Menü, in dem u.a. der Eintrag "Schließen" enthalten ist. Das ist so auch i.O. Allerdings teilen sich alle Fenster stets nur einen solchen Eintrag in der Taskleiste (Gruppieren ist ausgeschaltet). Ablauf:
Ich möchte gern, dass immer nur das letzte Fenster (in meinem Beispiel das zweite) geschlossen wird, welches geöffnet wurde. Wie bekomme ich das raus? Ich habe mehr als 2 Fenster. Öffne ich also Fenster 1, 2, 3, 4, n, dann sollen die in der Reihenfolge n, 4, 3, 2, 1 geschlossen werden. Ich hoffe, ich konnte mein Problem verständlich machen. Idee: Ich nehme eine Liste oder ein Array, in dem ich für jedes geöffnete Fenster einen Eintrag mache und dann beim Schließen jeweils die Liste durchgehe. Ich halte das aber für sehr aufwendig und möchte daher eben auch gern wissen, ob jemand eine bessere Idee oder das vielleicht sogar schon einmal gemacht hat. Gruß & Dank, Alex |
Re: Fensterreihenfolge
Ich an Deiner Stelle würde auch einfach eine Liste hernehmen, wo die Fensterhandles eingetragen werden. Das ist IMHO überhaupt nicht umständlich, da letztes Fenster -> letzter Listeneintrag. Das sollten nur ein paar Zeilen Code sein.
|
Re: Fensterreihenfolge
Hallo und Danke DeddyH,
"umständlich" ist vielleicht etwas über das Ziel hinausgeschossen. Mir ist nur nicht bekannt, ob es vielleicht schon eine solche Liste von Windows gibt und ich mit einer API-Function oder dergleichen einfach das Handle des obersten Fensters meines Programmes bekomme und das Fenster schließe. Dann brauche ich noch nicht einmal eine Liste. Deshalb eben auch meine Frage. Wenn es so etwas nicht gibt, mache ich es über die Liste. Bei der Größe des Projektes kommt es darauf auch nicht mehr an. Gruß, Alex |
Re: Fensterreihenfolge
Moment, willst Du die Fenster nun anhand ihrer Erstellungsreihenfolge schließen oder anhand ihrer Z-Order? Für Letzteres gibt es evtl. eine Möglichkeit, aber da müsste ich erst recherchieren.
|
Re: Fensterreihenfolge
Entschuldigung - hab mich vermutlich unklar ausgedrückt.
Die Fenster werden beim Programmstart alle erstellt, sind nur nicht sichtbar und bleiben bis zum Programmende unverändert; von Benutzereingaben abgesehen. Mich interessiert daher im Grunde die Reihenfolge, in denen Visible:=True; (Show macht glaube ich genau das) gesetzt wird. Wenn das die Z-Order ist, dann wäre es das, was ich brauche. Falls unter Erstellungsreihenfolge verstanden wird, wann das Create des Fenster aufgerufen wird, dann kann ich die ja selbst in der dpr oder im sonstigen Code festlegen. Damit hätte ich ja auch kein Problem. |
Re: Fensterreihenfolge
Vielleicht habe ich mich auch nicht klar ausgedrückt. Mir geht es darum: sollen die Fenster in der Reihenfolge geschlossen werden, in der sie (zeitlich) angezeigt werden oder in der, in der sie übereinander liegen? Ich kann ja mehrere Fenster öffnen und zwischen diesen hin- und herwechseln, das aktuell im Vordergrund liegende hat dann die höchste Z-Order.
|
Re: Fensterreihenfolge
Zitat:
|
Re: Fensterreihenfolge
Hmm... da dürftest Du vermutlich am Ehesten mit
![]() |
Re: Fensterreihenfolge
Danke für den Tip!
Ich habe mal die Forensuche mit "Z-Order" bemüht und ![]() |
Re: Fensterreihenfolge
Liste der Anhänge anzeigen (Anzahl: 1)
Ich bekomme es einfach nicht hin :wall:
Ich habe ein Test-Programm geschrieben, das ich als Anhang beigefügt habe. Es hinterlässt ggf. Speicherlecks, reicht zur Anschauung aber aus. Mein Problem ist auch, dass mein Hauptprogramm auch ein Fenster hat, das aber wie die anderen Fenster gleichrangig behandelt wird. Es soll auch "geschlossen" werden wie die anderen Fenster, ohne dass das Programm beendet wird. Ich muss also bei der Prüfung auch dessen Handle, Z-Order usw. prüfen. Danke für Eure Hinweise, Alex |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:08 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