Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - TAnimate hat kein MouseMove bzw. Click-Ereigniss


Rool - Di 14.01.03 22:00
Titel: TAnimate hat kein MouseMove bzw. Click-Ereigniss
TAnimate hat kein MouseMove bzw. Click-Ereigniss!! Wie kann ich es trotzdem abfangen? Ich will nicht einfacj n Timer benutzen und dauernd die Maus-Position bzw. Button-Status abfragen. Da muss es doch was besseres geben!


Ecthelion - Di 14.01.03 22:26

Wie macht man das überhaupt, dass beim mausklick auf dem desktop die Koordinaten abgefragt werden? Irgendwie antwortet niemand auf meinen Thread, ich glaub dein Problem is ähnlich...


Rool - Mi 15.01.03 15:35
Titel: GetAsyncKeyState / unsichtbares TWinControl
Mit GetAsyncKeyState kann man fragen ob die Maus gedrückt ist, das ist in diesem Fall (bei mir aber nicht sehr hilfreich)
Erst dachte ich, man könne ein unsichtbares Image über die TAnimate-Komponente legen und dann dessen Click bzw MouseMove Prozedur benutzen, aber da TImage von TGraphicControl abgeleitet ist und kein eigenes Fenster ist, kann es nicht ÜBER einer TWinControl-Komponente schweben!!!
Kann man denn ein unsichtbares TWinControl machen??


Rool - Mi 15.01.03 15:37
Titel: Schlechte Lösung
Habs jetzt so (mit nem Timer (grrrrrrrrrrrr)):

Quelltext
1:
2:
3:
4:
5:
6:
if PtInRect(Rect(aniJR.clienttoscreen(aniJR.ClientRect.TopLeft),aniJR.clienttoscreen(aniJR.ClientRect.BottomRight)),Mouse.CursorPos) then begin 
aniJR.Active:=true; 
if GetAsyncKeyState(VK_LBUTTON)<>0 then ShellExecute(Handle,'open','http://www.myhomepage.de',nil,nil,0) 
end 
else 
aniJR.Active:=false;

Aber das ist der absolute Müll, denn auch wenn irgendein fremdes Fenster im Vordergrund ist und ich zufällig in dieser Position etwas anklicke, startet ein Browser mit der Page!! Wie kann man das machen?

Moderiert von user profile iconTino: Code-Tags hinzugefügt.


Rool - Do 16.01.03 21:06
Titel: LÖSUNG!
OK, fals es noch jemanden interssiert, hab einfach ne neue Klasse von TAnimate abgeleitet (hätt ich auch früher drauf kommen können!!! :autsch:)

Hier der komplette Code:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
unit EventAnimate;

interface

uses
  Windows, Messages, SysUtils, Classes, Controls, ComCtrls;

type
  TEventAnimate = class(TAnimate)
  private
    FClick: TNotifyEvent;
    FMouseMove: TMouseMoveEvent;
    FMouseUp: TMouseEvent;
    FMouseDown: TMouseEvent;
    FMouseEnter: TNotifyEvent;
    FMouseLeave: TNotifyEvent;
    
    { Private-Deklarationen }
    
  protected
    { Protected-Deklarationen }
    procedure Click; override;
    procedure MouseMove(Shift: TShiftState; X,
      Y: Integer); override;
    procedure MouseDown(Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer); override;
    procedure MouseUp(Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer); override;
    procedure MouseEnter(var M: TMessage); message cm_MouseEnter;
    procedure MouseLeave(var M: TMessage); message cm_MouseLeave;
  public
    { Public-Deklarationen }
  published
    { Published-Deklarationen }
    property OnClick: TNotifyEvent read FClick write FClick;
    property OnMouseMove: TMouseMoveEvent read FMouseMove write FMouseMove;
    property OnMouseDown: TMouseEvent read FMouseDown write FMouseDown;
    property OnMouseUp: TMouseEvent read FMouseUp write FMouseUp;
    property OnMouseEnter: TNotifyEvent read FMouseEnter write FMouseEnter;
    property OnMouseLeave: TNotifyEvent read FMouseLeave write FMouseLeave;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Eigene', [TEventAnimate]);
end;

{ TEventAnimate }

procedure TEventAnimate.Click;
begin
     if Assigned(FClick) then FClick(self)
end;


procedure TEventAnimate.MouseDown(Button: TMouseButton; Shift: TShiftState;
  X, Y: Integer);
begin
  inherited;
  if Assigned(FMouseDown) then FMouseDown(self,Button,Shift,x,y)
end;

procedure TEventAnimate.MouseEnter;
begin
  if assigned(FMouseEnter) then FMouseEnter(self);
end;

procedure TEventAnimate.MouseLeave(var M: TMessage);
begin
  if assigned(FMouseLeave) then FMouseLeave(self);
end;

procedure TEventAnimate.MouseMove;
begin
  inherited;
  if Assigned(FMouseMove) then FMouseMove(self,Shift,x,y)
end;

procedure TEventAnimate.MouseUp(Button: TMouseButton; Shift: TShiftState;
  X, Y: Integer);
begin
  inherited;
  if Assigned(FMouseUp) then FMouseUp(self,Button,Shift,x,y)
end;


end.


Moderiert von user profile iconTino: Code-Tags hinzugefügt.