Форум: "Начинающим";
Текущий архив: 2009.11.22;
Скачать: [xml.tar.bz2];
ВнизПеремещение мышкой двух кнопок Найти похожие ветки
← →
Nub83 © (2009-10-09 22:07) [0]Вот код. Нужно чтоб при удержании ctrl и мышкой можно перетаскивать кнопки. С button1 работает а с button2 нет. Вроде прописал для обоих кнопок... А можно передвинать только первую со второй чот не выходит.
Как сдель чтоб button2 так же можно было таскать?
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Button1MouseUp(Sender: TObject; Button:
TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure Button2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Button2MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Button2MouseUp(Sender: TObject; Button:
TMouseButton; Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
MouseDownSpot : TPoint;
Capturing : bool;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if ssCtrl in Shift then begin
SetCapture(Button1.Handle);
Capturing := true;
MouseDownSpot.X := x;
MouseDownSpot.Y := Y;
end;
end;
procedure TForm1.Button1MouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
if Capturing then begin
Button1.Left := Button1.Left - (MouseDownSpot.x - x);
Button1.Top := Button1.Top - (MouseDownSpot.y - y);
end;
end;
procedure TForm1.Button1MouseUp(Sender: TObject; Button:
TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Capturing then begin
ReleaseCapture;
Capturing := false;
Button1.Left := Button1.Left - (MouseDownSpot.x - x);
Button1.Top := Button1.Top - (MouseDownSpot.y - y);
end;
end;
procedure TForm1.Button2MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if ssCtrl in Shift then begin
SetCapture(Button1.Handle);
Capturing := true;
MouseDownSpot.X := x;
MouseDownSpot.Y := Y;
end;
end;
procedure TForm1.Button2MouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
if Capturing then begin
Button2.Left := Button2.Left - (MouseDownSpot.x - x);
Button2.Top := Button2.Top - (MouseDownSpot.y - y);
end;
end;
procedure TForm1.Button2MouseUp(Sender: TObject; Button:
TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Capturing then begin
ReleaseCapture;
Capturing := false;
Button2.Left := Button2.Left - (MouseDownSpot.x - x);
Button2.Top := Button2.Top - (MouseDownSpot.y - y);
end;
end;
← →
KilkennyCat © (2009-10-09 22:17) [1]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
procedure Edit1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Edit1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
pt : TList;
begin
if ssCtrl in Shift then begin
ReleaseCapture;
SendMessage(Edit1.Handle, WM_SYSCOMMAND, $F00F, 0);
TStrings
end;
end;
end.
классический пример "magic number" поиграйся с $F00F
← →
KilkennyCat © (2009-10-09 22:22) [2]
> Как сдель чтоб button2 так же можно было таскать?
проверить правильность назначения событий. Либо сделать общую обработку, и в ней определить, кто ее вызвал. Либо по имени, либо воспользоваться свойством tag
пример:
procedure TForm1.Button2MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if (sender as TComponent).tag = 1 then begin...
end else begin...
end;
end;
соответствеено, в инспекторе объектов свойство tag назначить
← →
Nub83 © (2009-10-09 22:49) [3]Изменил назначение событий все по прежнему... Как сделать общую обработку?
← →
KilkennyCat © (2009-10-09 23:01) [4]
unit Unit6;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm6 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button3MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form6: TForm6;
implementation
{$R *.dfm}
procedure TForm6.Button3MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
if ssCtrl in Shift then begin
ReleaseCapture;
SendMessage(TButton(Sender as Tcomponent).Handle, WM_SYSCOMMAND, $F009, 0);
end;
end;
end.
кнопкам 1 и 2 сделать событие OnMouseMove равным Button3MouseMove
← →
KilkennyCat © (2009-10-09 23:03) [5]да, предупреждаю - реакция на стрл и перемещение и ваще несовсем нормальная... ну, как флаги в событиях онмаусдаун и ап сделать ты знаешь.
← →
Nub83 © (2009-10-09 23:12) [6]
> кнопкам 1 и 2 сделать событие OnMouseMove равным Button3MouseMove
Допиши пожалуйста...
← →
KilkennyCat © (2009-10-09 23:20) [7]гм... как? картинки вставить? :)
Что такое инспектор объектов понятно?
состоит из двух частей. в левой - свойства, в правой - события. Выбираем компонент (кнопку). переключаемся в инспекторе на событийную часть, и в пустом месте, справа от MouseMove кликаем дважды. Появится имя процедуры, а сама она объявится в коде программы. Теперь выбираем вторую кнопку. лезем тудаже, но уже не щелкаем дважды, а выбираем из списка только что созданную.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.11.22;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c