Форум: "Начинающим";
Текущий архив: 2006.12.24;
Скачать: [xml.tar.bz2];
ВнизКак создать кнопку, которую можно двигать мышью? Найти похожие ветки
← →
vegarulez © (2006-12-07 12:44) [0]Привет всем мастерам!
У меня вопрос, как можно создать кнопку, при нажатии и удерживании мышью, чтоб она двигалась вместе с мышью. При отжатии чтоб принимала то положение в котором сечас находится.
Подскажите.
← →
Elen © (2006-12-07 12:58) [1]
> vegarulez
DragDrop!
← →
vegarulez © (2006-12-07 13:15) [2]А можно маленький примерчик?
Я просто не совсем понимаю как туда координаты передать
procedure DragDrop(Source: TObject; X, Y: Integer);
Там же X,Y передавать нужно... а у мышки X,Y немного другие нежели у кнопки.
← →
Elen © (2006-12-07 13:20) [3]
> А можно маленький примерчик?
Маленький нет.
Есть средне-большой и на скорую руку :unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Button1: TButton;
procedure Label1DragDrop(Sender, Source: TObject; X, Y: Integer);
procedure Label1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure Label1EndDock(Sender, Target: TObject; X, Y: Integer);
procedure Label1EndDrag(Sender, Target: TObject; X, Y: Integer);
procedure Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Label1MouseLeave(Sender: TObject);
private
{ Private declarations }
public ax,ay:integer;
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Label1DragDrop(Sender, Source: TObject; X, Y: Integer);
begin
Button1.tag:=0;
end;
procedure TForm1.Label1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
var t:Tpoint;al:integer;
begin
t:=form1.ScreenToClient(Mouse.CursorPos);
caption:=tcomponent(sender).Name+"-"+ inttostr(al)+" "+inttostr(t.x-label1.tag);
Button1.Left:=t.x-Button1.tag;
ax:=x;ay:=y ;
end;
procedure TForm1.Label1EndDock(Sender, Target: TObject; X, Y: Integer);
begin
Button1.tag:=0;
end;
procedure TForm1.Label1EndDrag(Sender, Target: TObject; X, Y: Integer);
begin
Button1.tag:=0;
end;
procedure TForm1.Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Button1.Tag:=x;
end;
procedure TForm1.Label1MouseLeave(Sender: TObject);
var t:tpoint;
begin
if Button1.Dragging then begin
t.x:=ax;t.Y:=ay;
Mouse.CursorPos:=Button1.ClientToScreen(t);
end;
end;
end.
В нем есть подводные камни.
← →
PZ (2006-12-07 13:36) [4]Вот совсем простой пример для перемещения Image. Наверно его можно приспособить для Button
Var
Move : Boolean;
X0, Y0 : Integer;
procedure TDominoFrm.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
If Button <> mbLeft then exit;
X0 := X;
Y0 := Y;
Move := True;
end; { TDominoFrm.Image1MouseDown }
procedure TDominoFrm.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
{ Одновременное изменение всех координат }
If Move then With (Sender as TControl).Parent do
With (Sender as TControl).Parent do
SetBounds(Left+X-X0, Top+Y-Y0, Width, Height);
end; { TDominoFrm.Image1MouseMove }
procedure TDominoFrm.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Move := False;
end; { TDominoFrm.Image1MouseUp }
← →
Loginov Dmitry © (2006-12-07 14:41) [5]
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
const
Sc_dragmove = $F012;
begin
ReleaseCapture;
Button1.Perform(WM_SYSCOMMAND, Sc_dragmove, 0);
end;
Только с нажатием на саму кнопку - траблы :)
← →
Gydvin © (2006-12-07 15:25) [6]Нажимаем контрол )))
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if ssCtrl in Shift then
ReleaseCapture;
SendMessage(Button1.Handle, WM_SYSCOMMAND, 61458, 0);
end;
← →
Gydvin © (2006-12-07 15:27) [7]вай дот
Нажимаем контрол )))procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if ssCtrl in Shift then begin
ReleaseCapture;
SendMessage(Button1.Handle, WM_SYSCOMMAND, 61458, 0);
end;
end;
конечно
← →
Officeman (2006-12-08 08:40) [8]мм. подскажие пожалуйста. тотже самый вопрос.
только таскать надо TPanel по форме (захватив панель мышью)
заранее спасибо.
← →
Elen © (2006-12-08 08:54) [9]
> Officeman
Например в [3] замени буттон на панель
← →
DVM © (2006-12-08 10:24) [10]Еще через WM_NCHITTEST можно заставить двигаться.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.12.24;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.042 c