Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.02.07;
Скачать: CL | DM;

Вниз

Перетаскивание формы за Label?   Найти похожие ветки 

 
Shadow77 ©   (2002-01-23 09:22) [0]

Как сделать так,чтобы можно было перетащить окно программы, взявшись за Label. Нашел про всю форму, а мне именно label нужен... Наверное, я торможу, но чего-то никак не получается. Так что приведите примерчик плиз!


 
Chris ©   (2002-01-23 09:28) [1]

Нужно обрабатывать сообщение 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.

Вообще-то окно в данном случае перетаскивается за любой компонент окна.


 
Shadow77 ©   (2002-01-23 09:38) [2]

Это для формы... А как переделать для label?


 
Nemesis ©   (2002-01-23 09:39) [3]

> Chris
А ты пробывал такой способ? У меня такой код работает только когда перетаскиваешь за клиентскую область окна - на панель это не распространяется ...


 
Shadow77 ©   (2002-01-23 09:41) [4]

Да, именно так...


 
Chris ©   (2002-01-23 09:49) [5]

>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;


 
Alx2 ©   (2002-01-23 09:54) [6]

По мотивам совета 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;


 
Shadow77 ©   (2002-01-23 10:31) [7]

C label получается, с Panel тоже... Вот только у меня Panel, а на ней Label... :)


 
Alx2 ©   (2002-01-23 10:46) [8]

По мотивам совета 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 11:26) [9]

А это идея! :)
Можно! :)))
Торомознул опять... Бывает...
Заработало как надо. Всем спасибо!


 
Nemesis ©   (2002-01-23 12:10) [10]

Так и в FAQ просится



Страницы: 1 вся ветка

Текущий архив: 2002.02.07;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.012 c
1-18894
maximf
2002-01-23 16:54
2002.02.07
Использование исходников VCL при отладке


1-18896
Song
2002-01-23 21:15
2002.02.07
Распечатать StringGrid!!!!


1-18796
Tadeush
2002-01-24 14:57
2002.02.07
Формы


1-18906
Alexfdfdfd
2002-01-24 00:47
2002.02.07
Народ , всё бы хорошо , но экзешники слишком велики.


14-18976
SD Alone
2001-12-14 11:10
2002.02.07
Где-то видел прогу которая уменьшает размер готового exe-шника написанного на Delphi чуть ли не на половину