Autor Beitrag
Spaceguide
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 552


(D3/D7/D8) Prof.
BeitragVerfasst: Mi 19.01.05 16:06 
Hallo,

ich habe eine Klasse (abgeleitet von TPaintBox oder TImage beliebig), deren Mouse-Handling ich so überschrieben habe, dass ich auch die rechte Taste drücken kann, aus dem Control herausfahren, dort loslassen kann und trotzdem ein MouseUp gefeuert wird:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
class TSurfaceImage
...
   procedure WMRButtonDown(var Message: TMessage); message WM_RBUTTONDOWN;
   procedure WMRButtonUP(var Message: TMessage); message WM_RBUTTONUP;

...

procedure TSurfaceImage.WMRButtonDown(var Message: TMessage);
begin
  inherited;
  MouseCapture:= True;
end;

procedure TSurfaceImage.WMRButtonUP(var Message: TMessage);
begin
  inherited;
  MouseCapture:= False;
end;


Problem: Lasse ich die Maus ausserhalb des Controls los, bekommen die anderen Komponenten (TSpeedbutton etc.) kein OnEnter-Ereignis geschickt. Krieg ich das irgendwie weg?
Spaceguide Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 552


(D3/D7/D8) Prof.
BeitragVerfasst: Do 20.01.05 14:51 
Quatsch, ich meine natürlich das OnMouseEnter-Event. Man kann das leicht nachprüfen: Einen leeren Form machen und ein TSpeedButton mit Eigentschaft Flat draufklatschen. Wenn die Anwendung läuft einfach mal die Maus auf eine leere Stelle drücken und mit gedrückter Taste in den Speedbutton reinfahren, dort loslassen und er reagiert optisch nicht, bis man aus ihm herausgefahren ist und wieder reinfährt.
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: Do 20.01.05 15:21 
Also ich würde spontan sagen, dass du nachdem du die Maustaste losgelassen hast, dann ein MouseEnter and die entsprechende Komponente schickst. Also nachdem du das Capture zurückgesetzt hast (als Letztes in WMRButtonUP) würde ich per SendMessage ein WM_MOUSEHOVER an das Entsprechende Fenster senden. Das Fenster bekommst du mittels WindowFromPoint und dann musst du die entsprechenden Parameter noch übergeben. Was genau das schaust du am Besten in den msdn's nach.

Evtl. hilft das ja schon.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.