![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перетаскивание формы за Label? [D6, Win95/98, Win2k, WinXP]
Shadow77 © (2002-01-23 09:22:00)Как сделать так,чтобы можно было перетащить окно программы, взявшись за Label. Нашел про всю форму, а мне именно label нужен... Наверное, я торможу, но чего-то никак не получается. Так что приведите примерчик плиз!
Nemesis (2002-01-23 12:10:00) [1]Так и в FAQ просится
Shadow77 (2002-01-23 11:26:00) [2]А это идея! :)
Можно! :)))
Торомознул опять... Бывает...
Заработало как надо. Всем спасибо!
Alx2 (2002-01-23 10:46:00) [3]По мотивам совета Chris © (23.01.02 09:49)
А нельзя ли то же самое повесить на обработчик Label1MouseDown? :))
procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
const
SC_DragMove = $F012; { a magic number }
begin
ReleaseCapture;
perform(WM_SysCommand, SC_DragMove, 0);
end;
Shadow77 (2002-01-23 10:31:00) [4]C label получается, с Panel тоже... Вот только у меня Panel, а на ней Label... :)
Alx2 (2002-01-23 09:54:00) [5]По мотивам совета Chris © (23.01.02 09:28)
Проверил - работает.
procedure TForm1.WMNCHitTest(var M: TWMNCHitTest);
begin
inherited;
if PtInRect(Label1.BoundsRect,ScreenToClient(point(m.xpos, m.ypos))) then
if M.Result = htClient then
M.Result := htCaption;
end;
Chris (2002-01-23 09:49:00) [6]>Shadow77
Для Label как раз этот способ срабатывает, а для Panel можно попробовать такой код:
procedure TForm1.MouseDownPanel1(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
const
SC_DragMove = $F012; { a magic number }
begin
ReleaseCapture;
perform(WM_SysCommand, SC_DragMove, 0);
end;
Shadow77 (2002-01-23 09:41:00) [7]Да, именно так...
Nemesis (2002-01-23 09:39:00) [8]> Chris
А ты пробывал такой способ? У меня такой код работает только когда перетаскиваешь за клиентскую область окна - на панель это не распространяется ...
Shadow77 (2002-01-23 09:38:00) [9]Это для формы... А как переделать для label?
Chris (2002-01-23 09:28:00) [10]Нужно обрабатывать сообщение WM_NCHITTEST:
TForm1 = class(TForm)
...
private
...
procedure WMNCHitTest(var M: TWMNCHitTest); message wm_NCHitTest;
...
end;
...
procedure TForm1.WMNCHitTest(var M: TWMNCHitTest);
begin
inherited; { вызов унаследованного обработчика }
if M.Result = htClient then { Мышь сидит на окне? }
M.Result := htCaption; { Если да - то пусть Windows думает, что }
{ мышь на caption bar }
end;
...
Окно можно сделать вообще без caption.
Вообще-то окно в данном случае перетаскивается за любойкомпонент окна.