Oha (ich denke ich habs jetzt kapiert). Die Unterscheidung zwischen Bewegung und Click geht über 2 Flags (oder Boolean-Werte)
Delphi-Quellcode:
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Button1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
FOnButtonMove:Boolean;
FOnButtonDown:boolean;
FButtonX,FButtonY:integer;
{ Private-Deklarationen }
procedure DoButton1Click;
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.DoButton1Click;
begin
//"normale" Click-Methode
showmessage('Click');
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FOnButtonMove:=false;
FOnButtonDown:=false;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if not FOnButtonMove then DoButton1Click;
end;
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
FOnButtonDown:=true; //oder: "ssshift in shift;"
FButtonx:=mouse.CursorPos.x;
FButtonY:=mouse.CursorPos.y
end;
procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
FonButtonDown:=false;
FOnButtonMove:=false;
end;
procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
FOnButtonMove:=FOnButtonDown;
if FOnButtonMove then
begin
Button1.Left:=Button1.Left+mouse.CursorPos.x-FButtonX;
Button1.Top:=Button1.top+mouse.CursorPos.y-FButtony;
Fbuttonx:=mouse.CursorPos.x;
FButtonY:=mouse.CursorPos.y;
end;
end;
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.