Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   ShowWindow Verständnisfrage (https://www.delphipraxis.net/166861-showwindow-verstaendnisfrage.html)

Popov 2. Mär 2012 21:38

ShowWindow Verständnisfrage
 
Kann mir das einer erklären. Irgendwie verstehe ich das nicht.

Was ich will ist paar Fenster ohne Fokusverlust sichtbar machen, deshalb ShowWindow und nicht Show.

http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

Zitat:

Die Funktion ShowWindow darf pro Programm nur einmal mit dem Parameter ShowWindow aus der Funktion WinMain aufgerufen werden. Spätere Aufrufe von der Funktion ShowWindow müssen einen in der Tabelle aufgeführten Werte verwenden, statt einem, der durch den Parameter CmdShow aus der Funktion WinMainfestgelegt ist.

MGC 2. Mär 2012 21:54

AW: ShowWindow Verständnisfrage
 
Zitat:

Zitat von Popov (Beitrag 1154216)
Was ich will ist paar Fenster ohne Fokusverlust sichtbar machen, deshalb ShowWindow und nicht Show.

Wie meinst Du das? Möchtest Du mehrere Fenster sichtbar machen, die alle gleichzeitig den Eingabefokus haben?

Popov 2. Mär 2012 21:59

AW: ShowWindow Verständnisfrage
 
Nein, ich will aus Form1 Form2, Form3, usw. aufrufen ohne das Form1 den Fokus verliert. Eigentlich nichts wildes.

MGC 2. Mär 2012 22:23

AW: ShowWindow Verständnisfrage
 
So wie ich das kenne, soll ein Fenster beim ersten Aufruf mit showwindow mit den nCmdShow-Daten aus WinMain aufgerufen werden. Jeder weitere Aufruf von ShowWindow muss die Angabe einer nCmdShow-Message haben. Mögliche nCmdShow-Messages findest Du in der angegebenen Tabelle.

Dieses Vorgehen ist eigentlich recht einfach, da beim ersten Aufruf die grundlegenden Daten für den WindowState aufgerufen werden sollen. Spätere Aufrufe mit ShowWindow sollen den WindowSate verändern.

Zitat:

The first time an application calls ShowWindow, it should use the WinMain function's nCmdShow parameter as its nCmdShow parameter. Subsequent calls to ShowWindow must use one of the values in the given list, instead of the one specified by the WinMain function's nCmdShow parameter.

Popov 2. Mär 2012 22:33

AW: ShowWindow Verständnisfrage
 
Genau so habe ich es verstanden.

Bzw. nicht verstanden.

Sorry.

MGC 2. Mär 2012 22:50

AW: ShowWindow Verständnisfrage
 
Liste der Anhänge anzeigen (Anzahl: 1)
experimentiere doch mal ein wenig mit Show und ShowWindow im vergleich.
Ich hänge Dir mal ein "schell-mal-dahin-geklatscht"-Projekt an. Dabei habe ich bei ShowWindow vermieden WinMain aufzurufen und somit nicht die Vorgaben aus der IDE aufgerufen.
Wenn Du nun Deine Form über ShowWindow aufrufst wirst Du bemerken, dass Du sie mit einem normalen Form2.Hide nicht wieder verstecken kannst.
Nach einem Klick auf den Button für das normale Delphi-Form.Show kannst Du das Form auch wieder normal verstecken. Wenn Du nun z.B. Form2 noch mal mit ShowWindow aufrufst wirst Du Dein erwartetes Ergebnis erhalten, aber dennoch immer mit Focus, obwohl ich es als nicht aktiv aufgerufen habe.
Du wirst Dich mit ShowWindow also vollkommen selbst um Deine Fenster kümmern müssen. Daher verwende ich ShowWindow nur wenn ich von außerhalb über das Handle auf eine Form einer App zugreifen muss.

//Edit: Ich denke mal, so ähnlich wie es beim Anklicken der Buttons mit Delphi-FormX.Show realisiert ist, möchtest Du es auch gern haben.

Popov 2. Mär 2012 23:28

AW: ShowWindow Verständnisfrage
 
Ok, jetzt verstehe ich zumindest grob was du meinst. Inwieweit ich da noch tiefer einsteige muß ich morgen gucken.

Das ganze ist mir vielleicht deshalb nicht aufgefallen, weil ich die Fenster einerseits mit ShowWindow anzeige, aber mit ShowWindow(xyz.Handle, SW_HIDE) wieder schließe. Und das geht.

Meine vordringlichste Frage wäre hier: ist das insoweit ok, solange ich beides über ShowWindow erledige?

Natürlich ist mein obiges Beispiel stark vereinfacht dargestellt. Um genauer zu sein sollen (meine Fenster) aufpoppen ohne dabei dem gerade aktiven Fenster den Fokus zu klauen. Es sind einfache Messagefenster die für paar Sekunden erscheinen und wieder verschwinden sollen.

MGC 3. Mär 2012 00:01

AW: ShowWindow Verständnisfrage
 
Eigentlich spricht nichts dagegen mit den SW_Commands zu arbeiten, solange Du Dich auch selbst um die korrekte Initialisierung kümmerst.

Solltest Du Dich vielleicht doch noch für die Delphi-Variante entscheiden, d.h. mit Form.Show und Form.Hide arbeiten, dann solltest Du bei Deinen Message-Forms noch über den Objekt-Inspektor den PopUp-Mode auf pmExplicit setzen, damit Dein Form auch im Vordergrund angezeigt wird und den Focus über den Code wieder an Deine MainForm zurückgeben.

Jede Technik hat ihren eigenen Aufwand. Du musst Dich meines Erachtens nur entscheiden an welcher Stelle er für Dich übersichtlicher/praktikabler ist. :wink:

Popov 3. Mär 2012 00:15

AW: ShowWindow Verständnisfrage
 
Zitat:

Zitat von MGC (Beitrag 1154234)
...Objekt-Inspektor den PopUp-Mode auf pmExplicit setzen

Ich glaube das ist paar Nummern weiter als D7

Zitat:

Jede Technik hat ihren eigenen Aufwand. Du musst Dich meines Erachtens nur entscheiden an welcher Stelle er für Dich übersichtlicher/praktikabler ist. :wink:
Ja, das Ganze ist inzwischen ein Mix aus Delphi und Api, aber es funktioniert. Das TopMost erledige auch über Api.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:25 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