Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi SetWindowPos Alternative (https://www.delphipraxis.net/174826-setwindowpos-alternative.html)

Ondeth 12. Mai 2013 14:28

Delphi-Version: XE2

SetWindowPos Alternative
 
Hallo :)

Ich würde gerne wissen, ob es noch eine andere Möglichkeit gibt, ein Fenster dauerhaft im Vordergrund anzuzeigen als :

Code:
SetWindowPos(Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE + SWP_NOMOVE + SWP_NOSIZE);
Grund dafür :

Ich will mir ein kleines Programm für ein Spiel schreiben, welches nach Drücken zweier Tasten vor dem "Vollbild-Spielefenster" angezeigt werden soll. Soweit so gut...Das Programm ist fertig, nur scheint SetWindowPos nicht auszureichen , da sich mein Programm hinter dem Spielefenster öffnet ,und nicht davor... :?:

Hat einer von Euch zufällig eine Idee , wie ich das Problem lösen könnte ?

Schonmal Danke für die Antworten :)

EWeiss 12. Mai 2013 14:32

AW: SetWindowPos Alternative
 
In dem man SetWindowPos an der richtigen position im Code aufruft ;)

gruss

Ondeth 12. Mai 2013 14:34

AW: SetWindowPos Alternative
 
Ähm ... ja :D

Stehe ich echt so auf dem Schlauch ? :?

Da bleibt jetzt nur noch die Frage , was du mit richtiger Stelle meinst :cyclops:

Denn der Witz ist ja : mit anderen Programmen funktioniert es wunderbar

EWeiss 12. Mai 2013 14:38

AW: SetWindowPos Alternative
 
Zitat:

was du mit richtiger Stelle meinst
Prüfe doch einfach mal ob du dein Spielefenster wirklich geöffnet hast
bevor du SetWindowPos aufrufst.

Sollte sich die ZOrder ändern dann mußt du sie halt erneut setzen
und zwar nach jedem öffnen deines Programm Fensters.

Notfalls in einem Thread oder aber Timer(Was allerdings nicht so schön wäre)
Ein SpielFenster hat halt die Eigenschaft sich immer in den Vordergrund zu setzen.

gruss

Ondeth 12. Mai 2013 14:40

AW: SetWindowPos Alternative
 
Ok, werde ich mal ausprobieren

Fürs Erste mal Danke :thumb:

EWeiss 12. Mai 2013 14:53

AW: SetWindowPos Alternative
 
Zitat:

Zitat von Ondeth (Beitrag 1215123)
Ok, werde ich mal ausprobieren

Fürs Erste mal Danke :thumb:

Du könntest auch noch das SpielFenster deaktivieren in der zeit wo dein ProgrammFenster geöffnet ist.
Ob das sinnvoll ist kann ich nicht sagen da ich nicht weiß ob du gleichzeitig das Spielfenster noch bedienen willst.

Hier im Forum suchenEnableWindow

gruss

Ondeth 12. Mai 2013 14:57

AW: SetWindowPos Alternative
 
Hmm ...hast recht :)

Ich hatte eigentlich nicht vor das Fenster zu bedienen während das Programm geöffnet ist...

Hättest du noch eine Idee, wie sich das anstellen ließe ? :oops:

EWeiss 12. Mai 2013 15:10

AW: SetWindowPos Alternative
 
Wenn du das spiel gestartet hast deaktiviere es bevor du SetWindowPos verwendest
ansonsten wird sich das Window des Spiels wieder in den Vordergrund setzen.

Ich bin mir nicht sicher ob das überhaupt funktioniert denn bei DirektX ist das mit dem FensterHandle immer so eine sache
bin mir nicht sicher ob das im Vollbild noch gültig ist.

Prüfe also mal ob das Handle dann überhaupt noch existiert.

Delphi-Quellcode:
EnableWindow(SpielFensterHandle, False);

Beim beenden deines Programms wieder auf True setzen.

HWND_TOPMOST
Platziert das Fenster über allen nicht obersten Fenster.
Das Fenster behält seine oberste Stellung, auch wenn es deaktiviert ist.

gruss

Ondeth 12. Mai 2013 15:49

AW: SetWindowPos Alternative
 
Das Ergebnis meines "Ausprobierens" sieht folgendermaßen aus :

Code:
EnableWindow(game, False);
SetWindowPos(Handle,HWND_TOPMOST,Left,Top, Width,Height,SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
Mit dem Code wird dann ja das Spielefenster deaktiviert und das Programmfenster nach oben gebracht... (hoffe ich jetzt einfach mal ^^)

Habe das ganze mal ausprobiert , aber es klappt nicht wirklich ... Das Programmfenster erscheint immer mal wieder für Bruchteile von Sekunden im Spielefenster und verschwindet dann wieder...

Habe ich was falsch gemacht ? :?:

EWeiss 12. Mai 2013 15:52

AW: SetWindowPos Alternative
 
Delphi-Quellcode:
EnableWindow(game, False);


Was ist das game!
Hier solltest du dann das Handle des SpielFenster verwenden
Irgendwo in deinem Quelltext wirst du dieses doch ermitteln oder?
Über FindWindow und konsorten.

Irgendetwas dort hineinzuschreiben was keine gültigkeit hat wird dir nichts bringen.
Das Handle in EnableWindow und SetWindowPos müssen gültig sein.

Delphi-Quellcode:
SetWindowPos(Handle,HWND_TOPMOST,0, 0, 0, 0,SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);

Warum positionen des Fensters angeben wenn du dieses nur in der ZOrder verändern willst?
Zudem hast du flags addiert die den Resitz des Fensters grundsätzlich unterbinden..
Delphi-Quellcode:
SWP_NOMOVE + SWP_NOSIZE


gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:03 Uhr.
Seite 1 von 3  1 23      

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