Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi onMouseMove abfragen? (https://www.delphipraxis.net/92908-onmousemove-abfragen.html)

smart 29. Mai 2007 09:31

Re: onMouseMove abfragen?
 
Zitat:

Zitat von TeronG
Wann bzw. wo frägst du denn ab!?

Morgen!

in onMouseMove.

Gruß
Heike

TeronG 29. Mai 2007 09:33

Re: onMouseMove abfragen?
 
Im MouseMove des Panels kann er ja nur True werden weil ja nur ausgelöst wird, wenn Maus drüber ist :zwinker:. Du müsstest also auch neben deinem Panel abfragen.
:gruebel: Timer, onIdle, onMouseMove der restlichen Anwendung, ...

EDIT: auch Morgeeen :hi:

Gausi 29. Mai 2007 09:37

Re: onMouseMove abfragen?
 
Eine sauberere Lösung dürfte aber sein, wenn man die Nachrichten MouseLeave/MouseEnter abfängt. Dürfte es einiges zu im Forum geben.

smart 29. Mai 2007 09:47

Re: onMouseMove abfragen?
 
Zitat:

Zitat von TeronG
Im MouseMove des Panels kann er ja nur True werden weil ja nur ausgelöst wird, wenn Maus drüber ist :zwinker:. Du müsstest also auch neben deinem Panel abfragen.
:gruebel: Timer, onIdle, onMouseMove der restlichen Anwendung, ...

EDIT: auch Morgeeen :hi:

Hast Recht, dass war mein Denkfehler. Wenn ich z. B. in einem Timer abfrage klappt es.

Gruß
Heike

TeronG 29. Mai 2007 10:14

Re: onMouseMove abfragen?
 
Zitat:

Zitat von smart
Hast Recht, dass war mein Denkfehler. Wenn ich z. B. in einem Timer abfrage klappt es.

Gruß
Heike

Hab's bei mir auch auf die schnelle mit nem Timer getestet :mrgreen:

Mfg
Ich


EDIT: @Gausi: Ja Leave & Enter währen schon gut nur hat das D7-Panel sowas leider nicht :(

Gausi 29. Mai 2007 10:39

Re: onMouseMove abfragen?
 
Dass das D7-Panel das nicht hat, ist schon klar, aber von Panel ne Komponente abzuleiten, die das hat, ist nicht wirklich schwierig. Hab ich vor kurzem mit TImage gemacht, und ich habe von Komponentenentwicklung keinen Plan ;-) - Wenn ich wieder zu hause bin, kann ich den Code mal rauskramen, falls Bedarf besteht.

smart 29. Mai 2007 10:52

Re: onMouseMove abfragen?
 
Zitat:

Zitat von Gausi
Dass das D7-Panel das nicht hat, ist schon klar, aber von Panel ne Komponente abzuleiten, die das hat, ist nicht wirklich schwierig. Hab ich vor kurzem mit TImage gemacht, und ich habe von Komponentenentwicklung keinen Plan ;-) - Wenn ich wieder zu hause bin, kann ich den Code mal rauskramen, falls Bedarf besteht.

Ja, gern. Ich lerne immer gern was dazu.

Gruß
Heike

bitsetter 29. Mai 2007 11:46

Re: onMouseMove abfragen?
 
Hi,

Subclassing wäre noch eine andere Möglichkeit.
Delphi-Quellcode:
  private
    OldWindowProc: TWndMethod;
    procedure PanSubClassWndProc(var Message: TMessage);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.PanSubClassWndProc(var Message: TMessage);
begin
  case Message.Msg of
    CM_MOUSELEAVE: Panel1.Color := clBlack;
    CM_MOUSEENTER: Panel1.Color := clGreen;
  end;
  OldWindowProc(Message);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  OldWindowProc:= Panel1.WindowProc;
  Panel1.WindowProc:= PanSubClassWndProc;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Panel1.WindowProc:= OldWindowProc;
end;

Gausi 29. Mai 2007 15:22

Re: onMouseMove abfragen?
 
Ich meinte hlat sowas in der Art:
Delphi-Quellcode:
unit Mousepanel;

interface

uses
  Messages, SysUtils, Classes, Controls, ExtCtrls;

type
  tMousepanel = class(TPanel)
  private
    { Private-Deklarationen }
    FOnMouseEnter: TNotifyEvent;
    FOnMouseLeave: TNotifyEvent;
    procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  protected
    { Protected-Deklarationen }
  public
    { Public-Deklarationen }
  published
    { Published-Deklarationen }
    property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter;
    property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Beispiele', [tMousepanel]);
end;

procedure tMousepanel.CMMouseEnter(var Message: TMessage);
begin
  if assigned(FOnMouseEnter) then FOnMouseEnter(Self);
end;

procedure tMousepanel.CMMouseLeave(var Message: TMessage);
begin
  if assigned(FOnMouseLeave) then FOnMouseLeave(Self);
end;

end.

smart 29. Mai 2007 17:56

Re: onMouseMove abfragen?
 
Vielen Dank, an Euch Beiden. Habe jetzt einiges lernen können. Ich habe beides getestet. Klappt sehr gut. Hier in meinem Fall habe ich es mit Subclassing gemacht. Das kannt ich noch garnicht. Toll was damit alles anfangen kann. Die Sache mit dem Panel ableiten ist auch nit schlecht und vorallen sehr gut zu gebrauchen wenn man es in mehreren Anwendungen einbauen möchte.

Nochmals, vielen Dank

Gruß
Heike


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:52 Uhr.
Seite 2 von 3     12 3      

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