Delphi-PRAXiS
Seite 2 von 3     12 3      

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 16:10

AW: SetWindowPos Alternative
 
Game bezeichnet bei mir das Handle des Spielefensters...
Ich hab es kurz vor dem "Codeschnipsel von eben" ermittelt.

Da werde ich doch noch einmal drüber schauen müssen :)

EWeiss 12. Mai 2013 16:14

AW: SetWindowPos Alternative
 
Zitat:

Zitat von Ondeth (Beitrag 1215138)
Game bezeichnet bei mir das Handle des Spielefensters...
Ich hab es kurz vor dem "Codeschnipsel von eben" ermittelt.

Da werde ich doch noch einmal drüber schauen müssen :)

oops.. OK ;)
Wenn das Handle von SetWindowPos das deines Programms ist dann sollte das so stimmen
vorrausgesetzt das Game Handle ist gültig.

gruss

Ondeth 12. Mai 2013 16:24

AW: SetWindowPos Alternative
 
Naja , es läuft so "halb" ...

Sobald das Spielfenster deaktiviert ist und das Fenster meines Programmes HWND_TOPMOST ist , "blitzt" mein Programmfenster immer mal wieder im Spiel auf , um Sekundebruchteile später wieder zu verschwinden :shock: Es wird eben nie "richtig" angezeigt....

Wenn ich dann durch Druck der Tastenkombination das ganze wieder rückgängig mache (also Spiel aktivieren und NOTOPMOST), ist nur das Spielefenster im Vordergrund (wie es auch sein soll :-D )

Ich glaub schon bald nicht mehr dran , dass das noch klappt :D

EWeiss 12. Mai 2013 16:33

AW: SetWindowPos Alternative
 
Zitat:

Es wird eben nie "richtig" angezeigt....
Da wäre die frage kannst du noch eingaben machen im Spiel nachdem es deaktiviert wurde?
Wenn Ja dann ist dein Handle nicht gültig für das Spielfenster.

Was du noch versuchen könntest

Delphi-Quellcode:
// Zeichnen zulassen
SendMessageW(WinHandle, WM_SETREDRAW, Integer(TRUE), 0);
// Zeichnen unterbinden
SendMessageW(WinHandle, WM_SETREDRAW, Integer(FALSE), 0);
Es wäre möglich das die Paint routine des SpieleFensters eine erneute ZOrder verursacht.

Mehr fällt mir jetzt auch nicht ein. :oops:

PS:
Wie schon gesagt DirectX Fenster haben nichts gemein mit normalen WindowFenster daher denke ich das
dein vorhaben im FullScreen nicht funktionieren wird ohne über DirectX zu gehen und eventuelle Hooks dafür
zu verwenden.

gruss

Ondeth 12. Mai 2013 16:49

AW: SetWindowPos Alternative
 
Zitat:

Da wäre die frage kannst du noch eingaben machen im Spiel nachdem es deaktiviert wurde?
Sobald ich die Maus bewege, fliege ich aus dem Spielefenster raus und mein Programmfenster wird angezeigt :)
Tastendrucke allerdings werden im Spiel übernommen :? -> Daraus schließe ich einfach mal,dass das Handle nicht gültig ist...

Jetzt werde ich aber erstmal deine Idee ausprobieren :lol:

EWeiss 12. Mai 2013 16:53

AW: SetWindowPos Alternative
 
Zitat:

Zitat von Ondeth (Beitrag 1215143)
Zitat:

Da wäre die frage kannst du noch eingaben machen im Spiel nachdem es deaktiviert wurde?
Sobald ich die Maus bewege, fliege ich aus dem Spielefenster raus und mein Programmfenster wird angezeigt :)
Tastendrucke allerdings werden im Spiel übernommen :?

Jetzt werde ich aber erstmal deine Idee ausprobieren :lol:

Viel Glück!

Einen ähnlichen Thread hatten wir schon mal..
http://www.delphipraxis.net/47398-os...mm-legen.html#

gruss

Ondeth 12. Mai 2013 17:01

AW: SetWindowPos Alternative
 
Hat sich nichts geändert , aber dein Link ist interessant(hab ich bei der Suche heute morgen wahrscheinlich übersehen)-den werde ich mir gleich mal anschauen :)

Vielen Dank für deine Hilfe & deine Zeit :thumb:

EWeiss 12. Mai 2013 19:10

AW: SetWindowPos Alternative
 
Zitat:

Vielen Dank für deine Hilfe & deine Zeit
Kein problem ;)
-------------------------------
Grundsätzlich kann man das verwirklichen was du vorhast
Dazu muss man nur die Form als Bitmap in den Speicher kopieren dann weiter auf den BackBuffer(Offscreen Surface) von DDraw.

Das Bitmap kann man mit CreateDIBSection erstellen.

Das problem dabei mal wieder wie kommt man an den BackBuffer einer DirectX Anwendung.
Solange ich das Fenster für DX selbst erstelle ist das kein problem dann geht es auch mit Fullscreen.

Hab es vorhin mal in VB auf die schnelle getestet da ich keine lust hatte die Header Dateien für Delphi zusammen zu suchen.
Da funktioniert das ohne flackern oder sonstige schwierigkeiten.

Na ja denke das hilft dir jetzt so auch nicht weiter.

gruss

BUG 12. Mai 2013 23:35

AW: SetWindowPos Alternative
 
Wenn du noch weiter suchen willst: Hier im Forum suchenoverlay ist ein gutes Stichwort.

Es scheint relativ gut möglich zu sein, ein Overlay für ein bestimmtes Spiel zu programmieren. Allgemeine Ansätze scheinen da schwieriger zu sein, vor allem weil verschieden Versionen von DirectX bzw. OpenGL gibt.

EWeiss 13. Mai 2013 09:33

AW: SetWindowPos Alternative
 
Hier ist mal ein DDraw Sample wie so etwas funktionieren könnte.
Beim beenden hab ich aber einen AV.. Und nein den find ich nicht ;)

Ein paar kleine sachen könnte auch noch verbessert werden.
Wie immer verwendung auf eigene gefahr!

Vielleicht könnte man die Zeichnen Routine der Form noch beschleunigen.
Wäre was für die DirectX Spezialisten hier.

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:22 Uhr.
Seite 2 von 3     12 3      

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