IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Перетаскивание формы
сообщение
Сообщение #1


Гость






Подскажите, ПЛИЗЗЗ!
Как мне сделать так, (и можно ли вообще) чтобы форму можно было перетаскивать с маста на место держась за TImage или TPaintBox.
Заранее очень благодарен.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


N337
****

Группа: Пользователи
Сообщений: 737
Пол: Мужской

Репутация: -  26  +


procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
begin
 if ssLeft in Shift then
   begin
     ReleaseCapture;
     SendMessage(Handle, WM_SYSCOMMAND, $F012, 0);
   end;
end;


--------------------
The idiots are winning.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Мамочки, неужели всё так сложно?

Я бы делал так:
1). Ловлю нажатие, ставлю флажок, сохраняю координаты.
2). Ловлю MouseMove, проверяю флажок и при помощи Left и Top формы шевелю её в соответствии с сохранёнными координатами.
3). Ловлю отпускание кнопки, снимаю флажок.

Я так когда-то свой Caption рисовал...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


N337
****

Группа: Пользователи
Сообщений: 737
Пол: Мужской

Репутация: -  26  +


Это уже будет какая-то "эмуляция" перетаскивания формы: взять хотя-бы настройку Windows "Отображать содержимое окна при перетаскивании" - так она перестанет работать для такого приложения... <_<

Впрочем, таскать форму самому возможно более совместимый подход...


--------------------
The idiots are winning.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Прогрессор
****

Группа: Пользователи
Сообщений: 602
Пол: Мужской
Реальное имя: Михаил

Репутация: -  9  +


Подскажите, пожалуйста, такой простой вопрос: можно ли создать такой элемент формы, чтобы при некотором условии его можно было перетаскивать в пределах формы? Если да, то какой тип он должен иметь? Или это в любом случае надо делать программно, т. е. ловить нажатие, движение и отпускание мыши и соответственно изменять координаты?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Почитай про Dock. В боровском хелпе всё вполне доступно...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Четыре квадратика
****

Группа: Пользователи
Сообщений: 579
Пол: Мужской

Репутация: -  4  +


Пусть хотим "потаскать" Panel1

// Начинаем тащить
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
   if Button = mbLeft then
       Panel1.BeginDrag(false);
end;

procedure TForm1.FormDragOver(Sender, Source: TObject; X, Y: Integer;
 State: TDragState; var Accept: Boolean);
begin
// решаем, разрешить ли кидать этот объект на форму
   Accept := Source is TPanel; // Форма принимает только объекты TPanel
end;

// Изменяем координаты перетащенного объекта
procedure TForm1.FormDragDrop(Sender, Source: TObject; X, Y: Integer);
begin
   (source as TPanel).left := x;
   (source as TPanel).top := y;
end;



--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






trminator, я так понял, что вопрос не о Drag'n'Dock был...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Прогрессор
****

Группа: Пользователи
Сообщений: 602
Пол: Мужской
Реальное имя: Михаил

Репутация: -  9  +


Drag'n'Dock меня тоже интересует... Спасибо за пример, trminator !
А просто перетаскивание - оказывается, я невнимательно смотрел FAQ :p2:
Там есть такой простой способ:


procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
 ReleaseCapture;
 Panel1.Perform(WM_SYSCOMMAND, $F012, 0);
end;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 16.05.2024 1:06
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name