Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi OnMouseMove verzögern (https://www.delphipraxis.net/74410-onmousemove-verzoegern.html)

DGL-luke 2. Aug 2006 23:01

Re: OnMouseMove verzögern
 
:gruebel:

Würd mich wundern, wenn das nicht im TWinControl schon drin ist...

Alle Komponenten, die ich mir grad angeschaut habe (TPageControl, TPanel, TCategoryButtons) haben beide Ereignisse.

sniper_w 2. Aug 2006 23:02

Re: OnMouseMove verzögern
 
Zitat:

aber das wars dann auch schon
Meinst? :zwinker:

Delphi-Quellcode:
type
  tmyPanel = class(TPanel)
  public
    procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  end;

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ tmyPanel }

procedure tmyPanel.CMMouseEnter(var Message: TMessage);
begin
  Form1.Caption := 'CMMouseEnter';
end;

procedure tmyPanel.CMMouseLeave(var Message: TMessage);
begin
  Form1.Caption := 'CMMouseLeave';
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  mPanel: TPanel;
begin
  mPanel := tmyPanel.Create(Self);
  with mPanel do
  begin
    Name := 'myPanel';
    Parent := Self;
    Left := 10;
    Top := 10;
    Width := 185;
    Height := 41;
    Caption := 'Panel1';
    TabOrder := 0;
  end;
end;

Martin K 2. Aug 2006 23:10

Re: OnMouseMove verzögern
 
Zitat:

Zitat von DGL-luke
Alle Komponenten, die ich mir grad angeschaut habe (TPageControl, TPanel, TCategoryButtons) haben beide Ereignisse.

Dann vielleicht bei Delphi 2006, aber nich bei meinem D7.
Da gibts nur OnMouseMove.

@sniper_w:
Ja, natürlich.
Diese zwei Ereignisse kann man sich leicht selber bauen, aber von Haus aus sind die wohl nur beim TLabel dabei...

faux 3. Aug 2006 18:29

Re: OnMouseMove verzögern
 
Hallo!

Ja, ich will erst dann reagieren, wenn der Cursor mindestens eine bestimmte Zeit auf meinem SysTray-Icon ist (welches ich übrigens mit TJvTrayIcon realisieren (dort gibts kein OnMouseEnter/Leave)).

Zitat:

Zitat von DGL-luke
ich würd im OnMouseMove einen Timer starten, wenn dieser beendet ist und die Maus immernoch über dem Control, kann man den Hint anzeigen (oder was immer man machen will).

Ja, so habe ich mir das auch gedacht, nur: Geht das nicht auch ohne Timer? Und wie prüfe ich, ob das Event noch immer zutrift, also der Cursor noch immer auf dem Icon ist?

Grüße
Faux

DGL-luke 3. Aug 2006 18:50

Re: OnMouseMove verzögern
 
das hab ich doch in meinem Edit schon geschrieben. Implementiere einfach die Messages, die sniper_w genannt hat, falls sie noch nicht in deiner wunschkomponente vorhanden sind.

Dann:

- im OnMouseEnter Timer starten
- im OnMouseLeave Timer beenden
- im OnTimer Aktion starten (meinetwegen Hint anzeigen oder w/ever)

Ohne Timer? Du brauchst irgendwas, mit dem du die Zeit misst... und eine timer-message ist da sehr bequem.

faux 3. Aug 2006 19:15

Re: OnMouseMove verzögern
 
Zitat:

Zitat von DGL-luke
Ohne Timer? Du brauchst irgendwas, mit dem du die Zeit misst... und eine timer-message ist da sehr bequem.

Naja, dachte eher daran, obs da vielleicht eine Möglichkeit gibt, ein Event daraus zu machen. Ev. die Windows Hover Funktion zu benutzen oder so.


Zitat:

Zitat von DGL-luke
Dann:
- im OnMouseEnter Timer starten
- im OnMouseLeave Timer beenden
- im OnTimer Aktion starten (meinetwegen Hint anzeigen oder w/ever)

Meine Kompo hat diese Events nicht. ;)

Grüße
Faux

DGL-luke 3. Aug 2006 19:24

Re: OnMouseMove verzögern
 
Zitat:

Zitat von faux
Meine Kompo hat diese Events nicht. ;)

:wall:

Was hab ich denn drüber geschrieben? Du sollst die Messages implementieren. Du weisst nicht, das bedeutet?

Delphi-Quellcode:
type
  tmyPanel = class(TPanel)
  public
    FMouseLeave, FMouseEnter: TNotifyEvent;
   
    procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;

    constructor Create(AOwner: TComponent); override;
  published
    property OnMouseEnter: TNotifyEvent read FMouseEnter write FMouseEnter;
    property OnMouseLeave: TNotifyEvent read FMouseLeave write FMouseLeaver;
  end;

implementation

{$R *.dfm}

{ tmyPanel }

procedure tmyPanel.CMMouseEnter(var Message: TMessage);
begin
  if Assigned(OnMouseEnter) then
    OnMouseEnter(self);
end;

procedure tmyPanel.CMMouseLeave(var Message: TMessage);
begin
  if Assigned(OnMouseLeave) then
    OnMouseEnter(self);
end;

procedure tmyPanel.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);

  OnMouseEnter := nil;
  OnMouseLeave := nil;
end;

end.
Sonst noch Wünsche? Soll ich dir n heisses Bad einlassen?

EDIT: Seitenhieb entfernt.

faux 3. Aug 2006 19:26

Re: OnMouseMove verzögern
 
Zitat:

Zitat von DGL-luke
Soll ich dir n heisses Bad einlassen?

Ja, wäre sicherlich kein Fehler... :stupid:

@Topic:
Jo, sorry, da hab ich mich etwas verlesen.
Joa, so werd ichs machen. Danke. :)

Grüße
Faux

DGL-luke 3. Aug 2006 19:31

Re: OnMouseMove verzögern
 
Sorry... hab das entfernt.

faux 3. Aug 2006 20:32

Re: OnMouseMove verzögern
 
Wies scheint hab ich da was falsch gemacht. Es funktioniert nicht. :S

Delphi-Quellcode:
unit Unit2;

interface

uses
  Messages, Classes, Controls, JvTrayIcon;

type
  TCustomJvTrayIcon = class(TJvTrayIcon)
  private
    FMouseEnter, FMouseLeave: TNotifyEvent;
    procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
    procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  public
    constructor Create(AOwner: TComponent); override;
  published
    property OnMouseEnter: TNotifyEvent read FMouseEnter write FMouseEnter;
    property OnMouseLeave: TNotifyEvent read FMouseLeave write FMouseLeave;
  end;

implementation

procedure TCustomJvTrayIcon.CMMouseEnter(var Message: TMessage);
begin
  if Assigned(FMouseEnter) then
    OnMouseEnter(Self);
end;

procedure TCustomJvTrayIcon.CMMouseLeave(var Message: TMessage);
begin
  if Assigned(FMouseLeave) then
    OnMouseLeave(Self);
end;

constructor TCustomJvTrayIcon.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  OnMouseEnter := nil;
  OnMouseLeave := nil;
end;

end.
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  TrayIcon := TCustomJvTrayIcon.Create(Self);
  TrayIcon.Active := True;
  TrayIcon.OnMouseEnter := TrayIconMouseEnter;
  TrayIcon.OnMouseLeave := TrayIconMouseLeave;
end;

procedure TForm1.TrayIconMouseEnter(Sender: TObject);
begin
  Label1.Caption := 'Entered';
end;

procedure TForm1.TrayIconMouseLeave(Sender: TObject);
begin
  Label1.Caption := 'Left';
end;
Woran liegt das?!

Ich weiß, ich werf' euch jetzt einfach so nen Code hin, so nach dem Motto sucht den Fehler, aber ich habe leider keinen Plan wo der Fehelr liegen kann. :oops:

Grüße
Faux


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:15 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