Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.02.07;
Скачать: [xml.tar.bz2];

Вниз

Перетаскивание формы за 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.006 c
7-19012
T2
2001-10-29 16:59
2002.02.07
События Windows


1-18910
Dtr
2002-01-24 10:01
2002.02.07
PopUpMenu


3-18703
MEgo
2002-01-08 17:48
2002.02.07
Вопрос для реальных знатоков: BLOB -> Oracle <= 32 K?


14-18968
panov
2001-12-19 08:11
2002.02.07
Рассудите :-) Мы по прежнему будем считать других ламерами или ..


1-18823
Dtr
2002-01-25 14:47
2002.02.07
TScrollBox





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский