LabVIEWForum.de
Sichtbarkeit eines Fensters bestimmen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Sichtbarkeit eines Fensters bestimmen (/Thread-Sichtbarkeit-eines-Fensters-bestimmen)



Sichtbarkeit eines Fensters bestimmen - THL - 05.12.2016 17:38

Hallo ihr Labview-Spezialisten,

ich würde gerne innerhalb eines VIs ermitteln ob das Frontpanel eines anderen VIs (zumindest teilweise) sichtbar ist oder durch andere Fenster vollständig verdeckt wird.
Hintergrund: Ich habe im Haputprogramm einen Knopf mit dem ich beim Einschalten eine Unteranwendung starte (mit entsprechendem angezeigten Frontpanel) und beim Ausschalten
dies Anwendung beende. Mir schwebt vor, mit dem gleichen Knopf das Frontpanel dieser Anwendung nach vorne zu holen, falls dieses nicht mehr sichtbar ist. Mit anderen Worten:
- Knopf ist auf "AUS" und wird gedrückt: Knopf geht auf "EIN", Anwendung wird gestartet, Anwendungs-Frontpanel wird angezeigt
- Knopf ist auf "EIN", wird gedrückt und Anwendungs-Frontpanel ist sichtbar: Knopf geht auf "AUS", Anwendung wird beendet, Anwendungs-Frontpanel wird geschlossen
- Knopf ist auf "EIN", wird gedrückt und Anwendungs-Frontpanel ist komplett verdeckt (oder minimiert): Knopf bleibt auf "EIN", Anwendungs-Frontpanel wird nach vorne geholt/angezeigt

Gibt es da was mit Labview-Bordmitteln? Bei meiner Suche bin ich derzeit nur auf die Windows-Funktion GetWindowRng (aus user32.dll) gestoßen,
bei der man den Rückgabewert wohl auf NULLREGION testen soll. Da ich mit DLL-Aufrufen bislang wenig zu tun hatte, sind für mich Begriffe wie window-Handle nur Bahn
Kann mir da evtl. jemand auf die Sprünge helfen?


RE: Sichtbarkeit eines Fensters bestimmen - BNT - 05.12.2016 21:03

Such in den VI-Properties mal nach 'is front most' oä.
Gruß Holger


RE: Sichtbarkeit eines Fensters bestimmen - Freddy - 06.12.2016 09:02

Zunächst starte man das VI über eine Referenz. Mit der Referenz gibt es die Möglichkeit der Abfrage "ist im Vordergrund".

Gruß
Freddy


RE: Sichtbarkeit eines Fensters bestimmen - THL - 06.12.2016 09:55

Danke für die Antwort, aber leider klappt es mit der frontmost-Abfrage nicht. Sobald ich im Hauptprogramm den Knopf drücke, ist automatisch *dieses* Fenster im Vordergrund und eben nicht das Fenster der Anwendung, die ich testen möchte. Ich habe jetzt mal auf die schnelle was zusammengestoppelt und wie man sieht, schafft man es nicht, über die frontmost-Abfrage das entsprechende Fenster zu schließen, da der Rückgabewert immer 'false' ist. Was ich bräuchte wäre statt "isFrontmost" ein "isVisible".
[attachment=57000][attachment=57001][attachment=57002]


RE: Sichtbarkeit eines Fensters bestimmen - Freddy - 06.12.2016 10:05

Zitat:Was ich bräuchte wäre statt "isFrontmost" ein "isVisible"
Da habe ich etwas Verständigungsprobleme. Wenn ich auf einem VI aktiv bin kann kann ich nicht ein anders auf IsVisible testen bzw. es ist immer false, weil ich eben nicht drauf bin.
Oder verstehe ich das falsch?


RE: Sichtbarkeit eines Fensters bestimmen - THL - 06.12.2016 10:34

Siehe mein Beispiel: Man startet 'demo_main'. Drückt man die (ausgeschalteten) Knöpfe 'bigWindow' und 'smallWindow' starten entsprechende Unteranwendungen.
Wird das Fenster 'smallWindow' vom Fenster 'bigWindow' verdeckt, so soll ein Druck auf den (jetzt eingeschalteten) Knopf 'smallWindow' dieses Fenster nach vorne bringen/sichtbar machen.
Das tut es in meinem Beispiel ja auch.
Ist stattdessen das Fenster 'smallWindow' jedoch sichtbar/im Vordergrund, so soll nun ein Druck auf den Knopf 'smallWindow' die Anwendung 'smallWindow' beenden und dessen Fenster schließen.
Und daran scheitert es, da ich nicht bestimmen kann, ob das Fenster 'smallWindow' (für den Benutzer) sichtbar ist oder nicht.
Die Frontmost-Abfrage von 'smallWindow' hilft da nicht weiter, da in dem Augenblick in dem ich den Knopf 'smallWindow' im Hauptprogramm drücke, automatisch das Fenster des Hauptprogramms in den Verdergrund gelangt und das von 'smallWindow' nach hinten rutscht.

Deshalb meinte ich nur, ich dass einen Eigenschaftsknoten von der Art "is visible?" bräuchte.


RE: Sichtbarkeit eines Fensters bestimmen - BNT - 06.12.2016 10:44

Ich glaube, dass Du den Knöpfen im demo_main.vi zu viele Funktionen zuweist.
Trenne doch einfach die Funktionen in 'VI öffnen', 'VI schließen' und 'VI in den Vordergrund'.

Dann wird es einfach.
Gruß Holger


RE: Sichtbarkeit eines Fensters bestimmen - Freddy - 06.12.2016 10:50

ich kann zur Zeit nicht Deine Beispiele austesten. Aber versuch doch mal den Methodenknoten.


RE: Sichtbarkeit eines Fensters bestimmen - THL - 06.12.2016 11:40

(06.12.2016 10:44 )BNT schrieb:  Ich glaube, dass Du den Knöpfen im demo_main.vi zu viele Funktionen zuweist.
Trenne doch einfach die Funktionen in 'VI öffnen', 'VI schließen' und 'VI in den Vordergrund'.

Dann wird es einfach.
Gruß Holger
Hast ja recht. Ein separater Knopf "VI in den Vordergrund bringen" (der dann auch noch ausgegraut sein kann, wenn das entsprechende VI gar nicht läuft) wäre die einfachste Lösung.
Meine Idee war einfach mal ein Versuch ein schon bestehendes Programm um ein kleines Gimmick zu ergänzen und es dem Benutzer zu erleichtern in einem mit Fenstern zugekleisterten Bildschirm das gewünschte Panel schnell anzeigen zu lassen - und das ohne ein sorgsam designtes Hauptmenü umzumodeln Big Grin

Ich habe inzwischen auch schon eine "von Hinten durch die Brust ins Auge"-Lösung gefunden. Bleibt abzuwarten ob ich das dann auch so implementiere Denknach
[attachment=57007][attachment=57009][attachment=57008][attachment=57010][attachment=57011]


RE: Sichtbarkeit eines Fensters bestimmen - BNT - 06.12.2016 14:16

Alternativ könntest Du die offenen Fenster zur Answahl im Menü verfügbar machen.

[attachment=57015]

Gruß Holger