AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[gelöst] Fensterreihenfolge

Ein Thema von Schwedenbitter · begonnen am 20. Mai 2010 · letzter Beitrag vom 20. Mai 2010
Antwort Antwort
Seite 1 von 2  1 2      
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#1

[gelöst] Fensterreihenfolge

  Alt 20. Mai 2010, 10:54
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:
  • Programm startet nur im Tray ohne Fenster
  • Benutzer öffnet Fenster und es erscheint ein Eintrag in der Taskbar
  • Benutzer öffnet weiteres Fenster und es bleibt bei einem Eintrag in der Taskbar
  • Benutzer macht Rechtsklick auf Taskbar und klickt auf "Schließen"
  • mein Programm ruft das Ereignis OnFormCloseQuery mit der entsprechenden Procedure auf
Mein Ziel:
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
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

Re: Fensterreihenfolge

  Alt 20. Mai 2010, 10:57
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Fensterreihenfolge

  Alt 20. Mai 2010, 11:05
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
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#4

Re: Fensterreihenfolge

  Alt 20. Mai 2010, 11:07
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Fensterreihenfolge

  Alt 20. Mai 2010, 11:13
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.
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#6

Re: Fensterreihenfolge

  Alt 20. Mai 2010, 11:16
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Fensterreihenfolge

  Alt 20. Mai 2010, 11:24
Zitat von DeddyH:
Sollen die Fenster in der Reihenfolge geschlossen werden, in der sie (zeitlich) angezeigt werden oder in der, in der sie übereinander liegen?
Gute Frage! Über diese 3. Variante hatte ich mir - ehrlich gesagt - noch keine Gedanken gemacht . Wie wäre es denn bei MDI. Ich vermute mal, dass - wenn es eine Z-Order gibt - sie überlicher Weise in dieser Reihenfolge geschlossen werden. Der Benutzer hat wohl auch eher dieses oberste Fenster im Blick, wenn er auf Schließen klickt und nicht die anderen...
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#8

Re: Fensterreihenfolge

  Alt 20. Mai 2010, 11:33
Hmm... da dürftest Du vermutlich am Ehesten mit MSDN-Library durchsuchenGetWindow zum Ziel kommen. Welches Fenster und welchen Parameter man da aber nun am Günstigsten angibt müsste ich auch erst ausprobieren.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Fensterreihenfolge

  Alt 20. Mai 2010, 11:39
Danke für den Tip!

Ich habe mal die Forensuche mit "Z-Order" bemüht und MSDN-Library durchsuchenGetTopWindow schien mir am passendstens. Ich werde mal beides an einem separaten Programm probieren.
Alex Winzer
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#10

Re: Fensterreihenfolge

  Alt 20. Mai 2010, 12:28
Ich bekomme es einfach nicht hin

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
Angehängte Dateien
Dateityp: zip z_order_p_207.zip (1,5 KB, 4x aufgerufen)
Alex Winzer
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22: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