Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Eine Form immer anzeigen (OnTop) - auch bei Spielen! (https://www.delphipraxis.net/130447-eine-form-immer-anzeigen-ontop-auch-bei-spielen.html)

qb-tim 8. Mär 2009 19:41


Eine Form immer anzeigen (OnTop) - auch bei Spielen!
 
Hi,

Ich habe erkannt, dass das Thema Hier im Forum suchenForm 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:
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;
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.

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:

_BlackDragon_ 13. Mär 2009 12:22

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

turboPASCAL 13. Mär 2009 13:20

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. ;)

_BlackDragon_ 13. Mär 2009 14:26

Re: Eine Form immer anzeigen (OnTop) - auch bei Spielen!
 
<==== OFFTOPIC ====>

Zitat:

Zitat von turboPASCAL
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. ;)

Das hatte ich auch vor zu schreiben, bis ich folgendes gelesen habe:

Zitat:

Zitat von qb-tim
Ü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... ouch!

Da dachte ich, lass mal die Belehrung sein. :wink:

<==== OFFTOPIC ====>

Bernhard Geyer 13. Mär 2009 14:30

Re: Eine Form immer anzeigen (OnTop) - auch bei Spielen!
 
Zitat:

Zitat von _BlackDragon_
Zitat:

Zitat von qb-tim
Ü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... ouch!

Da dachte ich, lass mal die Belehrung sein. :wink:

Es ist wohl eher ein technisches Problem als ein Sinn bzw. unerlaubte Vorteilnahme-"Problem". OpenGL/DirektX und normales GDI sind bei Spielen nicht gerade die besten Freunde

qb-tim 13. Mär 2009 16:39

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)

Dunkel 13. Mär 2009 17:46

Re: Eine Form immer anzeigen (OnTop) - auch bei Spielen!
 
Zitat:

Zitat von qb-tim
Es muss doch irgendwo einen einfachen Ansatz geben, oder? (auch wenn dieser nich für alle 3d-Anwednung gilt)

Mit einem DirectX-Hook wird das wohl möglich sein, aber einfach ist anders...

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