Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Form immer im vordergrund (https://www.delphipraxis.net/69703-form-immer-im-vordergrund.html)

ghost007 18. Mai 2006 18:59


Form immer im vordergrund
 
Hallo,
hab mal wieder ein problem ...
Gibt es eine möglichkeit, wie ich meine form immer ontop habe, und man sie sogar vor einem spiel sieht, das im vollbild modus läuft.
d.h. spiel läuft, man spielt ganz normal, blos vor der spiel-form is noch meine form, z.b. klein rechts unten in der ecke.

Danke schon mal :)

MfG - Ghost

Corpsman 18. Mai 2006 19:03

Re: Form immer im vordergrund
 
Delphi-Quellcode:
Form1.Formstyle:=fsStayOnTop;
Am Besten ist aber du machst das zur Debugg Zeit.

Wenn du das erst zur Runtime machst geht es anders, das weis ich aber grad net auswendig.

ghost007 18. Mai 2006 20:12

Re: Form immer im vordergrund
 
hallo,
danke für deine antwort.
1.wie "zur debugg zeit" ?
2.ich habe bereits bei meiner form
oncreate
Delphi-Quellcode:
Form1.Formstyle:=fsStayOnTop;
Aber die form bleibt nicht sichtbar vor dem spiel(im vollbildmodus)
:wall:

[EDIT] ich glaube auch nicht das es mit dem StayOnTop getahn is ... :(

ghost007 18. Mai 2006 21:05

Re: Form immer im vordergrund
 
Hi,
oder muss man das ganz von einer ganz anderen seite angehen?
mit nem Grafik hook, falls es sowas gibt?!

Corpsman 18. Mai 2006 21:58

Re: Form immer im vordergrund
 
OK Probiers mal damit

Mit

Stayontop :Boolean
Delphi-Quellcode:
    If Stayontop Then
      SetWindowPos (Form1.Handle, HWND_TOPMOST, -1, -1, -1, -1, SWP_NOMOVE + SWP_NOSIZE)
    Else
      SetWindowPos (Form1.Handle, HWND_NOTOPMOST, -1, -1, -1, -1, SWP_NOMOVE + SWP_NOSIZE)
So mache ich das in meinem Project

ghost007 18. Mai 2006 22:21

Re: Form immer im vordergrund
 
hallo,
danke für die antwort, aber wo soll das hin?

Da ich nicht weiß was du meinst hab ich es mal hier rein:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
If Stayontop Then
      SetWindowPos (Form1.Handle, HWND_TOPMOST, -1, -1, -1, -1, SWP_NOMOVE + SWP_NOSIZE)
    Else
      SetWindowPos (Form1.Handle, HWND_NOTOPMOST, -1, -1, -1, -1, SWP_NOMOVE + SWP_NOSIZE)
end;
Das wird da aber nix :(

Vjay 18. Mai 2006 22:25

Re: Form immer im vordergrund
 
Hallo Ghost,
ohne zuviel verraten und somit die Spannung aus dem Faden nehmen zu wollen, schau dir mal die Delphi-Hilfe zu setWindowPos und WM_WINDOWPOSCHANGING an.

*EDIT* zu deinem Text,

Mach dir eine Prozedur mit einem Parameter namens Stayontop.

ghost007 18. Mai 2006 22:36

Re: Form immer im vordergrund
 
hi,
also.
habe mir jetzt mal diese procedure gebastelt:
Delphi-Quellcode:
procedure Stayontop (Stayontop:Boolean);
begin
If Stayontop Then
      SetWindowPos (Form1.Handle, HWND_TOPMOST, -1, -1, -1, -1, SWP_NOMOVE + SWP_NOSIZE)
    Else
      SetWindowPos (Form1.Handle, HWND_NOTOPMOST, -1, -1, -1, -1, SWP_NOMOVE + SWP_NOSIZE)
end;
ABER:
1.Ich starte ein Spiel im vollbildmodus
2.wenn ich da hin gehe, wo im windows die form ist, wird mein zeiger zu nem normalem curosr, aber die form kann man nicht sehen.

:wall:

Vjay 18. Mai 2006 22:38

Re: Form immer im vordergrund
 
Okay,

tschuldigung das ich frage, hört sich vielleicht etwas komisch an, aber: Rufst du die Prozedur überhaupt auf? Wenn ja starte ich sofortig mein Delphi und bastel dir was. Muss aber gleich in die Falle, also poste fix ;)

ghost007 18. Mai 2006 22:40

Re: Form immer im vordergrund
 
;) natürlich rufe ich die prozedur auf ^^

mit dem tastekürzel F5 (globaler hotkey)

[EDIT]Man sieht die form einmal kurz aufleuchten, und dann verschwindet se weider, wenn man aber an die stelle klickt, wo sie aufgeläuchtet hat, komme ich ins windows und hab die form makiert ... :(

[EDIT]Ich teste das ganze mit Warcraft 3, falls euch das was sagt. Aber ich denke das das spiel keine rolle spielt

Vjay 18. Mai 2006 22:49

Re: Form immer im vordergrund
 
Also bei mir macht es das hier:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
 setWindowPos(handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE or SWP_SHOWWINDOW);
end;
Es gibt natürlich zwei Möglichkeiten dass es trotzdem nicht funktioniert, die nicht unbedingt mit deinem Programm zu tun haben.
1. Das Spiel verwendet selbige Technik um sich nach vorne zu bringen (es kann nunmal nur ein Fenster ganz vorne sein).
2. OpenGL/Direct3d "übermalt" es einfach.

Versuch mal die Forumssuche, glaube mich zu erinnern, dass jemand vor einiger Zeit das gleiche versucht hat. Der saubere Weg wäre dennoch ein Hook auf die verwendete Grafikbibliothek. Gibt es glaube ich auch Beispiele bei google, ist auch garnicht so schwer zu programmieren, wenn man einmal verstanden hat wie es funktioniert.

Um zwischen 1 und 2 zu unterscheiden setzt du dir einen Timer aufs Form mit Intervall 1 und zeichnest dort das Form neu. Wenn das Form plötzlich im Spiel flackernd sichtbar ist (wovon ich ausgehe) wird es lediglich von d3d etc. übermalt.

Gruss

*EDIT*
Jap dann wirst du übermalt, also entweder mit Timer dich ständig neu zeichnen = flickernd sichtbar oder direct3d hooken.
Das Form anklicken kannst du nicht, da sobald es den Focus erhält Warcraft sich minimiert.

ghost007 18. Mai 2006 22:50

Re: Form immer im vordergrund
 
ok, probier ich gleich aus

ghost007 18. Mai 2006 22:55

Re: Form immer im vordergrund
 
:oops: :wall:
Es flackert nicht mal ... nur wenn ich an die stelle geh, wird mein cursor zu nem normalen cursor, wenn ich klicke, komme ich in 's windows

[EDIT]Das is aber komisch, weil ich das form zwar nicht sehe, bin aber in wacraft drin, undw enn ich an die stelle klicke, an der es im windows ist, dann minimiert sich warcraft :(

Dann muss ich wohl hooken, kannst du mir da ein tutorial empfehlen?
Weil ehrlich gesagt finde ich in google nix und hier im forum auch net :?

Das schaut dann so aus:
http://p4p4schlumpf.p4.funpic.de/Cursor.jpg
Nur das auf dem warcraft cursor nich der normale windows pfeil ist.(der wir ja bei screenshots net mit gespeichert)

jim_raynor 19. Mai 2006 05:54

Re: Form immer im vordergrund
 
Ich würde nicht versuche WOW zu hooken. Es könnte dann schnell passieren, dass dein Account wegen Cheating gesperrt wird ... Lass WOW einfach im Fenstermodus laufen. Dann klappt das definitiv mit dem Top-Most. Oder nimm einen zweiten Monitor und lass das Programm dort laufen ;)

Vjay 19. Mai 2006 09:25

Re: Form immer im vordergrund
 
Er schrieb Warcraft 3, nicht World of Warcraft ;)

Ok aber J.R. hat natürlich Recht, bei einem Hook musst du dich in den Spiele-Prozess einklinken und es gibt Spiele wie WoW die dieses bemerken und dir wirklich übel nehmen.

Wenn du es trotzdem so machen möchtest, kann ich dir "uallHook" von Brechi, oder madCodeHook von www.madshi.net ans Herz legen. Beide bieten sehr gute Möglichkeiten Fremdprogramme umzubiegen.

Was du also tun musst, solltest du den Aufwand wagen ist ein simpler (simpel dank den Units der beiden) Codehook auf die Flip-Funktion von Direct3d. Das ist es, wie z.B. Fraps funktioniert.
Die Lösung mit dem zweiten Monitor dürfte allerdings einfacher sein ;)

ghost007 19. Mai 2006 12:50

Re: Form immer im vordergrund
 
hi,
1 frage: was meinst ihr mit nem 2ten monitor? hardware monitor? oder was?

ghost007 19. Mai 2006 13:59

Re: Form immer im vordergrund
 
komisch ... :wall:

jim_raynor 19. Mai 2006 14:10

Re: Form immer im vordergrund
 
Zitat:

Zitat von ghost007
hi,
1 frage: was meinst ihr mit nem 2ten monitor? hardware monitor? oder was?

Ja, korrekt ;)

ghost007 19. Mai 2006 14:57

Re: Form immer im vordergrund
 
was 'n das für ne schwachsinnige lösung?
nen 2ten monitor kaufen für 'n programm?
Das soll bei anderen leuten auch noch laufen ...


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