Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Выделение области для перетаскивания формы. [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.


Наверх

Титульная страница Поиск, карта сайта Написать письмо