![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Выделение области для перетаскивания формы. [D7, WinXP]
Конопелька © (2006-02-26 18:12:00)Здравствуйте !
Подскажите: у меня есть форма имеющая свойство BorderStyle:='bsNone', мне нужно выделить определенную область на форме за которую можно будет перетаскивать ее, например выделить 10на10 пикселей в середине формы! Как это сделать !?????
Заранее спасибо !
Eraser (2006-02-26 23:20:00) [1]
> Конопелька (26.02.06 18:12)
Нужно обрабатывать сообщение WM_NCHITTEST окна, примерно так
procedure TMyForm.WMNCHitTest(var M: TWMNCHitTest);
begin
inherited;
if M.Result = htClient then
M.Result := htCaption;
end;
только в этом коде необходимо проверять, находится ли указатель мыши в нужной области окна.
см. справку по WM_NCHITTEST.
Dmitrij_K (2006-02-26 23:06:00) [2]
> Благодарю за помощь ! :)
НЗШТ, обращайся Ж)
Конопелька (2006-02-26 23:02:00) [3]Благодарю за помощь ! :)
Dmitrij_K (2006-02-26 23:01:00) [4]Не проверял, но имхо так
procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
const SC_DragMove = $F012; { a magic number }
begin
if (x in [0..50]) and (y in [0..50]) then
begin
ReleaseCapture;
Form1.perform(WM_SysCommand, SC_DragMove, 0);
end
end;
Конопелька (2006-02-26 23:00:00) [5]А еще вопрос такой ! Что дает комманда
ReleaseCapture;? Обьясни если не трудно ! :)
Конопелька (2006-02-26 22:58:00) [6]Спасибо это почти то что нужно ! Только мне нужно что бы форму можно было перетаскивать только за ту область которую мне нужно !
Например форма 500х400 пикселей а мне нужно что областью перетаскивания была область от 0х0 (x,y) пикселей до 50х50 ! Что бы только за этот уголок можно было перетянуть форму !
Заранее спасибо еще раз ! :)
Dmitrij_K (2006-02-26 22:51:00) [7]Это?
procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
const SC_DragMove = $F012; { a magic number }
begin
ReleaseCapture;
Form1.perform(WM_SysCommand, SC_DragMove, 0);
end;
www.drkb.ru musT have
Конопелька (2006-02-26 22:34:00) [8]Как задать точки и область я понимаю !!! А как зделать что бы за нее можно было перетащить приложение !!!???????
Leonid Troyanovsky (2006-02-26 19:02:00) [9]
> Конопелька (26.02.06 18:12)
> ='bsNone', мне нужно выделить определенную область на форме
> за которую можно будет перетаскивать ее, например выделить
> 10на10 пикселей в середине формы! Как
Например, Rect (x-4, y-4, x+5, y+5),
где x, y - точка в середине, скажем, x = Width div 2; y = Height div 2.
--
Regards, LVT.