Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi OnMouseEnter/-Over/-Leave für beliebige Komponente? (https://www.delphipraxis.net/121068-onmouseenter-over-leave-fuer-beliebige-komponente.html)

MCXSC 21. Sep 2008 23:31


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

toms 22. Sep 2008 05:41

Re: OnMouseEnter/-Over/-Leave für beliebige Komponente?
 
Hallo Marcel

Probier's mal mit Hier im Forum suchenCM_MOUSEENTER resp. Hier im Forum suchenCM_MOUSELEAVE etc.

MCXSC 22. Sep 2008 07:47

Re: OnMouseEnter/-Over/-Leave für beliebige Komponente?
 
Ja, ich habe ja folgendes getestet:

Delphi-Quellcode:
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;
Hier sagt mir Delphi aber bei:

Delphi-Quellcode:
{ Private-Deklarationen }
ControlOnMousePos: TControl;
Zitat:

Feld DemoForm.ControlOnMousePos besitzt keine entsprechende Komponente. Soll die Deklaration entfernt werden?

sirius 22. Sep 2008 10:24

Re: OnMouseEnter/-Over/-Leave für beliebige Komponente?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
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;
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).

MCXSC 23. Sep 2008 02:50

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.)

sirius 23. Sep 2008 08:00

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;

MCXSC 23. Sep 2008 10:11

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? :(

sirius 23. Sep 2008 10:16

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.

MCXSC 23. Sep 2008 21:48

Re: OnMouseEnter/-Over/-Leave für beliebige Komponente?
 
Hmmm.... Sonst hat keiner eine Idee? :(

MCXSC 24. Sep 2008 19:07

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 05:24 Uhr.
Seite 1 von 2  1 2      

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