Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.01.2016, 16:47   #1
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию перемещение визуальных компонентов.

всем добра. добрые люди подскажите как сделать перемещение кнопки или другого визуального компонента. хочу чтобы можно было двигать как в момент накидывания компонента на форму, можно на примере кнопки.
я предполагаю есть событие подходящее для этого вот только не могу понять какое?
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 25.01.2016, 17:11   #2
VIK_aka_TOR
Участник клуба
 
Аватар для VIK_aka_TOR
 
Регистрация: 30.01.2011
Сообщений: 1,578
По умолчанию

если немного погуглить то можно найти:


Есть два варианта. Либо вручную делать с помощью события движения мыши, чтобы при зажатой левой кнопке мыши кнопка на форме следовала за курсором, либо использовать стандартные функции.
Простой способ - с помощью события движения мыши. Описываем булеву переменную drag. При событии OnMouseDown присваиваем drag:=true, т.е. разрешаем перемещение. В обработчике события OnMouseMove присваиваем координатам кнопки координаты мыши, так же, как было сделано в таймере, но с условием if drag then [наши действия]. И, наконец, при событии OnMouseUp сбрасываем переменную - drag:=false.
Пример кода:
Код:
{...код...}
var drag:boolean=false;
{...код...}
procedure TForm1.Button1MouseDown; {кнопка нажата и удерживается}
begin
  drag:=true; {можно двигать}
end;
procedure TForm1.Button1MouseUp; {кнопка отпущена}
begin
  drag:=false; {нельзя двигать}
end;
procedure TForm1.Button1MouseMove;
begin
if drag then {если можно двигать, то двигаем}
begin {добавляем -5 и -30, чтобы учитывалась рамка формы}
  button1.left:=mouse.CursorPos.X-form1.Left-5;
  button1.top:=mouse.CursorPos.y-form1.top-30;
end;
end;
Другой способ такой: свойству DragMode кнопки присвоить dmAutomatic (кнопка перемещается автоматически), ну и свойству DragKind - dkDock (кнопка будет стыковаться с другими объектами, как я понял). Далее. У некоторых компонентов, особенно с большим и пустым рабочим пространством (форма, панель, всякие бары), есть свойство DockSite - чтобы кнопка садилась на этот компонент, это свойство должно иметь значение true. Правда, кнопка может случайно оказаться сама по себе, не пристыкованной, поэтому нужно быть аккуратней (у неё появится заголовок и кнопка закрытия, т.е. пользователь может её случайно уничтожить). Зато это удобно. Кстати, тут есть дополнительные события: OnDragDrop, OnDragOver, OnStartDock, OnStartDrag, OnEndDock, OnEndDrag. Надеюсь, разберёшься с ними сам, если понадобится.
пишу код не только за печеньки
VIK_aka_TOR вне форума Ответить с цитированием
Старый 25.01.2016, 17:22   #3
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

Цитата:
Сообщение от VIK_aka_TOR Посмотреть сообщение
Другой способ такой: свойству DragMode кнопки присвоить dmAutomatic (кнопка перемещается автоматически), ну и свойству DragKind - dkDock (кнопка будет стыковаться с другими объектами, как я понял). Далее. У некоторых компонентов, особенно с большим и пустым рабочим пространством (форма, панель, всякие бары), есть свойство DockSite - чтобы кнопка садилась на этот компонент, это свойство должно иметь значение true. Правда, кнопка может случайно оказаться сама по себе, не пристыкованной, поэтому нужно быть аккуратней (у неё появится заголовок и кнопка закрытия, т.е. пользователь может её случайно уничтожить). Зато это удобно. Кстати, тут есть дополнительные события: OnDragDrop, OnDragOver, OnStartDock, OnStartDrag, OnEndDock, OnEndDrag. Надеюсь, разберёшься с ними сам, если понадобится.
Спасибо.
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 26.01.2016, 12:45   #4
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Цитата:
Сообщение от VIK_aka_TOR Посмотреть сообщение
если немного погуглить то можно найти
Обалдеть...
А если немного напрячься и освоить поиск по форуму, то можно найти куда проще:
Код:
procedure TForm1.Button2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
const
  SC_DragMove = $F012;
begin
  ReleaseCapture;
  Button2.perform(WM_SysCommand,SC_DragMove,0);
end;
И двигаем Button2 как душе заблагорассудится...
kropotkina-alice вне форума Ответить с цитированием
Старый 26.01.2016, 14:25   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

В пакете Cyndy есть целый компонент для этого. Даже мини-виз. редактор можно накидать.
Человек_Борща вне форума Ответить с цитированием
Старый 26.01.2016, 14:28   #6
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

Цитата:
Сообщение от kropotkina-alice Посмотреть сообщение
Обалдеть...
А если немного напрячься и освоить поиск по форуму, то можно найти куда проще:
Код:
procedure TForm1.Button2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
const
  SC_DragMove = $F012;
begin
  ReleaseCapture;
  Button2.perform(WM_SysCommand,SC_DragMove,0);
end;
И двигаем Button2 как душе заблагорассудится...
Спасибо и вам.
кстати такой код для Lazarus не пойдет так?
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 26.01.2016, 14:35   #7
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
В пакете Cyndy есть целый компонент для этого. Даже мини-виз. редактор можно накидать.
в 6 делфе??
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перемещение и изменение размеров компонентов Luchfan12 Общие вопросы Delphi 4 22.05.2014 09:30
Масштабирование и перемещение компонентов Dennis777 Общие вопросы Delphi 13 28.02.2013 21:30
Подключение визуальных библиотек для тетриса Expected } Visual C++ 1 06.11.2012 18:09
Перемещение компонентов по форме artemavd Общие вопросы Delphi 2 24.04.2012 19:28
Перемещение компонентов _SERGEYX_ Общие вопросы Delphi 2 10.04.2008 13:33