Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Prism OnMouseMove (https://www.delphipraxis.net/109179-onmousemove.html)

MaDDoH 25. Feb 2008 19:18


OnMouseMove
 
HI

ich hab ne frage und zwar:

ich will einen button aktivieren wenn ich mit der mouse drüber bin
sollte die mouse nich über dem button sein is er deaktiviert

würd mich freuen wenn ihr mir ne antwort geben könntet wie ich das machen kann (;

Jens Schumann 25. Feb 2008 19:26

Re: OnMouseMove
 
Hier im Forum suchenonmouseenter

MaDDoH 25. Feb 2008 20:32

Re: OnMouseMove
 
wär trotzdem cool wenn ich ne konkrete/genaue antwort bekomme... :?

button is sichtbar aba unenabled
wenn der cursor drüba is issa enabled

Amateurprofi 25. Feb 2008 21:23

Re: OnMouseMove
 
Zitat:

Zitat von Jens Schumann

Das wird nichts bringen, denn wenn der Button disabled ist (also enabled=false) dann findet kein MouseEnter statt.

Ich würde das so lösen :

Im FormMouseMove (genauer gesagt im MouseMove des übergeordneten Objektes) prüfen, ob der Cursor auf den Button zeigt und, wenn ja Button.Enabled = True setzen.

Im TButton.CMMouseLeave enabled = false setzen.



Delphi-Quellcode:
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TButton=Class(StdCtrls.TButton)
  private
    procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
  end;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TButton.CMMouseLeave(var Message: TMessage);
begin
   Enabled:=false;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
   if PtInRect(Button1.BoundsRect,Point(x,y)) then Button1.Enabled:=true;
end;

end.

MaDDoH 25. Feb 2008 23:52

Re: OnMouseMove
 
hat super geklappt danke (;

aba statt 2 procedures zu machen würd ich die umschreiben:

Delphi-Quellcode:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
   if PtInRect(Button1.BoundsRect,Point(x,y)) then Button1.Enabled:=true;
end;
und zwar so:

Delphi-Quellcode:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
   if PtInRect(Button1.BoundsRect,Point(x,y)) then Button1.Enabled:=true else Button1.Enabled:=false
end;

Amateurprofi 26. Feb 2008 10:51

Re: OnMouseMove
 
Zitat:

Zitat von MaDDoH
hat super geklappt danke (;

aba statt 2 procedures zu machen würd ich die umschreiben:

Delphi-Quellcode:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
   if PtInRect(Button1.BoundsRect,Point(x,y)) then Button1.Enabled:=true;
end;
und zwar so:

Delphi-Quellcode:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
   if PtInRect(Button1.BoundsRect,Point(x,y)) then Button1.Enabled:=true else Button1.Enabled:=false
end;

Was aber in bestimmten Situationen nicht funktioniert, zum Beispiel wenn der Button direkt am Rand der Form liegt und du den Button an diesem Rand verläßt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:37 Uhr.

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