Подскажите, ПЛИЗЗЗ! Как мне сделать так, (и можно ли вообще) чтобы форму можно было перетаскивать с маста на место держась за TImage или TPaintBox. Заранее очень благодарен.
xds
23.08.2004 23:53
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;
BlackShadow
25.08.2004 13:40
Мамочки, неужели всё так сложно?
Я бы делал так: 1). Ловлю нажатие, ставлю флажок, сохраняю координаты. 2). Ловлю MouseMove, проверяю флажок и при помощи Left и Top формы шевелю её в соответствии с сохранёнными координатами. 3). Ловлю отпускание кнопки, снимаю флажок.
Я так когда-то свой Caption рисовал...
xds
25.08.2004 16:12
Это уже будет какая-то "эмуляция" перетаскивания формы: взять хотя-бы настройку Windows "Отображать содержимое окна при перетаскивании" - так она перестанет работать для такого приложения... <_<
Впрочем, таскать форму самому возможно более совместимый подход...
Atos
6.09.2004 13:50
Подскажите, пожалуйста, такой простой вопрос: можно ли создать такой элемент формы, чтобы при некотором условии его можно было перетаскивать в пределах формы? Если да, то какой тип он должен иметь? Или это в любом случае надо делать программно, т. е. ловить нажатие, движение и отпускание мыши и соответственно изменять координаты?
BlackShadow
6.09.2004 19:34
Почитай про Dock. В боровском хелпе всё вполне доступно...
trminator
16.09.2004 20:20
Пусть хотим "потаскать" 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;
BlackShadow
17.09.2004 21:10
trminator, я так понял, что вопрос не о Drag'n'Dock был...
Atos
21.09.2004 19:00
Drag'n'Dock меня тоже интересует... Спасибо за пример, trminator ! А просто перетаскивание - оказывается, я невнимательно смотрел FAQ :p2: Там есть такой простой способ: