Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.043 c
15-1165011266
vasIzmax
2006-12-02 01:14
2006.12.24
Крылья 2006


3-1160570593
tomkat
2006-10-11 16:43
2006.12.24
User Name из ADOConnection


4-1155890752
Krants
2006-08-18 12:45
2006.12.24
Расширить DBLookupComboBox


1-1163257920
gdaujk
2006-11-11 18:12
2006.12.24
Смена текста одного из контролов Open Dialog Box...


4-1156156099
APiC
2006-08-21 14:28
2006.12.24
ресурсы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский