![]() |
OnMouseEnter/-Over/-Leave für beliebige Komponente?
Hallo Leute,
ich such nun schon etwas länger, finde aber irgendwie nichts brauchbares. Und zwar Suche ich etwas, was mir die Funktionen für ein OnMouseEnter, OnMouseOver und OnMouseLeave Event für eine beliebige Komponente (in meinem Fall eine TVirtualStringTree) bereitstellt... ...hat da jemand eine Idee oder ähnliches? :( Danke, MCXSC |
Re: OnMouseEnter/-Over/-Leave für beliebige Komponente?
|
Re: OnMouseEnter/-Over/-Leave für beliebige Komponente?
Ja, ich habe ja folgendes getestet:
Delphi-Quellcode:
Hier sagt mir Delphi aber bei:
private
{ Private-Deklarationen } ControlOnMousePos: TControl; procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER; procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE; public { Public-Deklarationen } end; var DemoForm: TDemoForm; implementation {$R *.dfm} procedure TDemoForm.CMMouseEnter(var Message: TMessage); var ptWork: TPoint; begin GetCursorPos(ptWork); ControlOnMousePos := FindDragTarget(ptWork, TRUE); if Assigned(ControlOnMousePos) then begin Label1.Caption := ControlOnMousePos.Name; end; end; procedure TDemoForm.CMMouseLeave(var Message: TMessage); begin ControlOnMousePos := NIL; end;
Delphi-Quellcode:
{ Private-Deklarationen }
ControlOnMousePos: TControl; Zitat:
|
Re: OnMouseEnter/-Over/-Leave für beliebige Komponente?
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
Das ganze etwas allegemeiner gehalten in einer Komponente hängt unten an. Dabei wird aber nicht die interne CM-xxx-nachricht verwendet, sondern die Kompenente achtet selber auf die Mouse (mit Mousecapture).
type
TForm1 = class(TForm) vst: TVirtualStringTree; Memo1: TMemo; procedure FormCreate(Sender: TObject); private { Private-Deklarationen } FoldVSTWndProc:TWndMethod; procedure VSTwndproc(var msg:TMessage); public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin FoldVstWndProc:=vst.WindowProc; vst.WindowProc:=vstwndproc; end; procedure TForm1.VSTwndproc(var msg: TMessage); begin FoldVSTWndProc(msG); case msg.Msg of cm_mouseleave: memo1.lines.add('bye'); cm_mouseenter: memo1.lines.add('hello'); end; end; |
Re: OnMouseEnter/-Over/-Leave für beliebige Komponente?
Liste der Anhänge anzeigen (Anzahl: 1)
Danke, funktioniert soweit auch. Allerdings: Wenn ich ein Panel wechsel, wird die ganze Aktion wohl dauerhaft ausgeführt (siehe Demo-Projekt). Eine Idee?
(Kurze Erklärung: Ein VST, das fest auf einem "festen" Panel liegt, soll so vergrößert werden, dass es eben über "Panel 1" liegt - und auch wieder verkleinert wird.) |
Re: OnMouseEnter/-Over/-Leave für beliebige Komponente?
Liste der Anhänge anzeigen (Anzahl: 1)
Hmmm???
Wenn ich deine Exe starte erkenne/sehe ich das Problem. Wenn ich aber den Code in Delphi 7 lade und starte, dann sieht alles ok aus (Exe im Anhang), denke ich zumindest. Ich hab zwar noch folgendes geändert (zwecks OOP), hat aber auch ohne die Änderung funktioniert:
Delphi-Quellcode:
type ...
... private ... //Die Funktionen habe ich mal in Methoden umgewandelt.. procedure VST_Expand; procedure VST_Minimize; public { Public-Deklarationen } end; var Form2: TForm2; implementation {$R *.dfm} procedure TForm2.VST_Expand; begin //..Dadurch brauchst du dich hier nicht auf TForm2 zu beziehen VST.Align := alNone; VST.Width := 400; VST.Height := Panel2.Height -10; VST.Parent := Form2; end; procedure TForm2.VST_Minimize; begin VST.Parent := Panel2; VST.Align := alClient; end; |
Re: OnMouseEnter/-Over/-Leave für beliebige Komponente?
Liste der Anhänge anzeigen (Anzahl: 1)
Hmm, also bei mir schaut es so aus (siehe Video).
Komischerweise funktioniert deine EXE - liegt das vielleicht an Turbo Delphi? :( |
Re: OnMouseEnter/-Over/-Leave für beliebige Komponente?
Beim Laden des Projektes kommen noch ein paar Warnungend. Mein delphi kennt die Größen "ExplicitXXX" bei Panel1 und VST nicht. Aber ich kann mir nicht vorstellen, dass es daran liegt. Vielleicht wurde ja etwas anderes noch verändert. Ich habe bloß heute grad keine Zeit darüber nachzudenken.
|
Re: OnMouseEnter/-Over/-Leave für beliebige Komponente?
Hmmm.... Sonst hat keiner eine Idee? :(
|
Re: OnMouseEnter/-Over/-Leave für beliebige Komponente?
Also, das Problem scheint irgendwo daran zu liegen, dass ich die VST auf ein anderes Panel übertrage. Wenn ich die mit "---> xyz <---" markierten Zeilen herausnehme, klappt es; aber das ist ja nicht Sinn der Sache (bzw. so funktioniert es nicht so, wie es soll, nämlich das die VST über das "feste" Panel hinausragt...
Delphi-Quellcode:
type ...
... private ... procedure VST_Expand; procedure VST_Minimize; public { Public-Deklarationen } end; var Form2: TForm2; implementation {$R *.dfm} procedure TForm2.VST_Expand; begin VST.Align := alNone; VST.Width := 400; VST.Height := Panel2.Height -10; ---> VST.Parent := Form2; <--- end; procedure TForm2.VST_Minimize; begin ---> VST.Parent := Panel2; <--- VST.Align := alClient; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz