Eine Form immer anzeigen (OnTop) - auch bei Spielen!
Hi,
Ich habe erkannt, dass das Thema Form StayOnTop schon heiß diskutiert wird. Allerdings geht es mir um einen spezielleren Fall. Ich würde gerne eine kleine Form (originell Form3 genannt :wink: ) immer "über" alle anderen Fenster und Programmen (d.h. auch Vollbildschirm-anwendungen wie Spiele und 3D-Applets mit Java oder Flash) anzeigen. Im Thread "Form unschliessbar und onTop machen?" von Novo gibt es viele unterschiedliche Meinungen ob ein solchen Programm möglich/sinnvoll/legal/schädlich oder nicht ist :gruebel:. Ich sage dazu nur: XFire! XFire hat nämlich die Funktion seine Aktivität beim Starten von Spielen durch einen "OnTop"-PopUp bemerkbar zu machen. Dieses PopUp, dass immer unten rechts im Bildschirm auftaucht, ist nie von anderen Fenstern bzw. von visuellen Elementen bedeckt. Nun zu meiner Form3; Ich habe aus Novos Thread folgenden Code entnommen:
Delphi-Quellcode:
Für "normale" Programme, die lediglich Fenster bzw. Forms mit 2D-Inhalten benutzen, funktioniert diese Methode. Lediglich bei Vollbild-Spielen und 3D-Inhalten wird Form3 überdeckt.
type
TForm3 = class(TForm) //... private { Private-Deklarationen } procedure CreateParams(var Params: TCreateParams); override; public { Public-Deklarationen } end; //... procedure TForm3.CreateParams(var Params: TCreateParams); begin inherited; // Flags setzen Params.Style := Params.Style or WS_OVERLAPPED; // Parent auf "Desktop" setzen Params.WndParent := GetDesktopWindow; end; Nun zur Essenz dieses Threads: (Wie) Ist es möglich, eine Form so darzustellen, dass sie immer als oberstes Fenster erscheint; Auch, wenn 3D Inhalte dargestellt werden. Beispiel: XFire InGame-PopUps Über jede Hilfe wäre ich sehr dankbar. Bitte startet aber nicht noch eine Diskussion über die Anwendung bzw. den Sinn eines solchen oder ähnlichen Forms... :wall: |
Re: Eine Form immer anzeigen (OnTop) - auch bei Spielen!
Hi,
hast du es mal mit
Delphi-Quellcode:
MyForm := TForm.Create(self);
Application.NormalizeTopMosts; SetWindowPos(MyForm.Handle, HWND_TOPMOST, 0,0,0,0, SWP_NOACTIVATE+SWP_NOMOVE+SWP_NOSIZE); MyForm.Show; probiert? Das kann laut Dokumentation z.B. für Meldungsfenster genutzt werden, die dann auch über den Fenstern im Vordergrund liegen dürfen, auch wenn diese den FormStyle-Wert fsStayOnTop haben. Ob das dann auch für Spiele etc. gilt, kann ich dir nicht sagen. Gruss BlackDragon |
Re: Eine Form immer anzeigen (OnTop) - auch bei Spielen!
Bei Vollbildanwendungen bei OpenGL oder DirectX kann es zu Problemen damit kommen und/oder das Fenster wird nicht angezeigt.
Themen dazu hatten wir dazu schon in der DP durchgekaut. ;) |
Re: Eine Form immer anzeigen (OnTop) - auch bei Spielen!
<==== OFFTOPIC ====>
Zitat:
Zitat:
<==== OFFTOPIC ====> |
Re: Eine Form immer anzeigen (OnTop) - auch bei Spielen!
Zitat:
|
Re: Eine Form immer anzeigen (OnTop) - auch bei Spielen!
Ich weiß eure "Besorgnis" zu schätzen, aber ein Kollege von mir hat gemeint, dass es THEORETISCH möglich sei mit einer entsprechenden DirektX-Komponent einen Form "direkt auf den Bildschirm" zu zeichnen... Mein Form3 enthält ja nur ein bisschen Text und ein TImage. An Interaktivität muss er nur anclickbar sein; Das war's... Es muss doch irgendwo einen einfachen Ansatz geben, oder? (auch wenn dieser nich für alle 3d-Anwednung gilt)
|
Re: Eine Form immer anzeigen (OnTop) - auch bei Spielen!
Zitat:
Edit: vielleicht hilft das |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:24 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