Главная страница
    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.042 c
15-1165226535
vitv
2006-12-04 13:02
2006.12.24
MS-SQL 2000 просмотр пользователей.


15-1165231255
vitv
2006-12-04 14:20
2006.12.24
Посоветуйте книгу по Win2003


2-1164828608
dasha
2006-11-29 22:30
2006.12.24
прокруткf в DBGrid


15-1165181106
Loginov Dmitry
2006-12-04 00:25
2006.12.24
Win XP SP2 ограничивает размер отправляемых сообщений :(


4-1155648872
apic
2006-08-15 17:34
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский