Главная страница
    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.008 c
6-18939
SemFLY
2001-11-18 01:18
2002.02.07
Ожидание соединения с интернетом ?!


1-18857
@andrew
2002-01-21 11:15
2002.02.07
Привет Всем! У меня почему-то такой глюк.


3-18758
Артём
2002-01-11 12:25
2002.02.07
Подскажите какой компонент использовать!


7-19009
Wonder
2001-10-29 11:35
2002.02.07
stdin/stdout


3-18691
Fareader
2002-01-08 17:15
2002.02.07
Locate или не Locate - вот в чем вопрос :)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский