Entwickler-Ecke

Windows API - Mausclick in meiner Applikation abfangen


Crowbar - Sa 03.01.04 17:59
Titel: Mausclick in meiner Applikation abfangen
Hallo,
ich habe eine TForm und möchte den linken Mausclick abfangen, um z.b. eine Komponente von Visible:=true auf Visible:=false zu setzen.
Ein Maushook dürfte nicht notwendig sein, da ich diesen Mausclick nur in meiner Applikation abfangen möchte.
Das "OnMouseDown"-Ereignis kann ich auch nicht nutzen, da auf meiner TForm noch verschiedene Panels liegen.

Es sollte irgendwie mit:

Quelltext
1:
2:
Private   { Private-Deklarationen }
   Procedure MausClick(var sMsg: TMessage); message WM_???;

funktioneren oder?

Crowbar


ErnestoChe - Sa 03.01.04 18:45

Hi,

die gesuchte Message lautet WM_LBUTTONDOWN:


Delphi-Quelltext
1:
procedure WMLButtonDown(var Msg: TWMLButtonDown); message WM_LBUTTONDOWN;                    


Aber da könntest du gleich mit dem OnMouseDown der Form arbeiten und die Linke Maustaste abfragen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbLeft then
    // ..................
end;


Und dann einfach den Panels im Objektinspektor das OnMouseDown der Form zuweisen. Der obere Code mit dem Message abfangen gilt auch bloss nur für die Form und nicht für die Panels.

MFG

- Ernesto -


Crowbar - Sa 03.01.04 18:57

Hi,

Zitat:
Der obere Code mit dem Message abfangen gilt auch bloss nur für die Form und nicht für die Panels.

...das wusste ich nicht. Also werde ich den Weg über OnMouseDown gehen.

Danke für die Info!

Tschüss Crowbar


ErnestoChe - Sa 03.01.04 19:22

Hi nochmal,

eine weitere Möglichkeit wäre es dem OnMessage-Ereignis des Application-Objekts eine Methode zuzuweisen. Dann gilt der Code für die gesamte Applikation und allen seinen Fenstern:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
  private
    { Private-Deklarationen }
    procedure AppMsg(var Msg: TMsg; var Handled: Boolean);

//......................

procedure TForm1.AppMsg(var Msg: TMsg; var Handled: Boolean);
begin
  if Msg.message = WM_LBUTTONDOWN then
  begin
      // hier dein Code
    Handled := True;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnMessage := AppMsg;
end;


MFG

- Ernesto -


Crowbar - Sa 03.01.04 19:25

Hi,
ja, so, wie mit dem OnMessage-Ereignis habe ich es mir vorgestellt.

Vielen Dank!

Tschüss
Crowbar