Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1254750124
bagos
2009-10-05 17:42
2009.11.22
помогите понять в чем ошибка


15-1253564911
ford
2009-09-22 00:28
2009.11.22
Google умер


15-1253441135
Aston
2009-09-20 14:05
2009.11.22
Компанент для создания игр


15-1253632350
Дмитрий Белькевич
2009-09-22 19:12
2009.11.22
Компонент, выглядящий как создать таблицу в office 2007


3-1229490448
Sirus
2008-12-17 08:07
2009.11.22
Рекурсивный внешний ключ на саму запись





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский