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/)
-   -   OnClick ohne Focus zu setzen (https://www.delphipraxis.net/181433-onclick-ohne-focus-zu-setzen.html)

sonny2007 14. Aug 2014 10:14

OnClick ohne Focus zu setzen
 
Hi Delphianer ,

folgendes Problem.
Ich habe mir ein simples Overlay für ein Spiel programmiert. Dieses Game läuft im "Vollbild im Fenster Modus", so das ich weiterhin alle WinApi Elemente verwenden kann.
Mit CreateParams,Exstyle und Topmost sitzt das Fenster auch super an oberster stelle und ist dank Glasframe schön transparent.
Nun aber der Kniff.

Ich habe ein Label auf dieser Form. Jedes mal wenn ich auf das Label(bzw Form) klicke wird die Taskleiste eingeblendet, was ein wenig den Spielfluss stört. Gibt es irgendeine Möglichkeit mein OnclickEvent auszulösen, mit einem Mausklick, ohne dabei die Taskleiste in den Vordergrund zu holen ?

Grüße s0n

Der schöne Günther 14. Aug 2014 10:31

AW: OnClick ohne Focus zu setzen
 
Einfach dem ExStyle ein
Delphi-Quellcode:
WS_EX_NOACTIVATE
hinzufügen?

sonny2007 14. Aug 2014 10:43

AW: OnClick ohne Focus zu setzen
 
thx,

aber es will nicht funktionieren !

folgendes habe ich ausprobiert !

Delphi-Quellcode:
procedure TfrmMain.CreateParams(var Params: TCreateParams);
begin
  inherited;
  with Params do
    begin
      ExStyle := ExStyle or WS_EX_TOPMOST AND WS_EX_NOACTIVATE; //<--- AND Variante
      WndParent := 0;
    end;
end;
Delphi-Quellcode:
procedure TfrmMain.CreateParams(var Params: TCreateParams);
begin
  inherited;
  with Params do
    begin
      ExStyle := ExStyle or WS_EX_TOPMOST OR WS_EX_NOACTIVATE; //<--- Or Variante
      WndParent := 0;
    end;
end;
Bei beiden zeigt er immer wieder die Taskleiste mit an, wenn ich draufklicke !
Was mache ich da falsch ?

Der schöne Günther 14. Aug 2014 10:55

AW: OnClick ohne Focus zu setzen
 
Also bei mir klappt es.

Vollbild-Anwendung: Einfach ein Formular mit windowState = wsMaximized und borderStyle = bsNone.
Auf Knopfdruck startet er das Overlay:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
   si: TStartupInfo;
   pi:   TProcessInformation;
begin
   si := Default(TstartupInfo);
   si.cb := SizeOf(TStartupInfo);
   si.wShowWindow := SW_SHOWNOACTIVATE;

   pi := Default(TProcessInformation);

   CreateProcess(
      '.\OverlayApp.exe',
      nil,
      nil,
      nil,
      False,
      0,
      nil,
      nil,
      si,
      pi
   );
end;
Und die Overlay-Anwendung hat in den CreateParams nur
Delphi-Quellcode:
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
   inherited;
    Params.ExStyle := Params.ExStyle or WS_EX_NOACTIVATE or WS_EX_TOPMOST;
end;

sonny2007 14. Aug 2014 11:12

AW: OnClick ohne Focus zu setzen
 
Ahso vielleicht habe ich mich falsch ausgedrückt :) ...

Ich habe ein Spiel das nicht von mir kommt. Mein Overlay bedeckt nur einen kleinen Teil des Screens.
Soll heißen meine Anwendung ist seperat.

Aufbau meiner Anwendung.
MainForm nicht Vollbild, da ich ja das Game weiterhin benutzen möchte :)
Overlay1form
overlay2form
etc...

und bei klick auf Overlay1form bspw holt er mir immer die Taskleiste mit raus. ich habe in die Overlay1form und in die mainform Exstyle eingefügt !


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