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

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

Перетаскивать форму за клиентскую часть в KOL ?


yar ©   (2002-11-07 14:40:00) 

У кого есть пример рабочего сабжа ?
Мои ухищрения с OnMessage не помогают ;(


alex_s   (2002-11-07 23:34:00) [1]


> yar (07.11.02 18:13)
> Собственно уже все ...
> Спасибо


На всякий случай, на будущее:

if (Msg.Msg = WM_LBUTTONDOWN) then begin
releasecapture;
Form.Perform(WM_SYSCOMMAND, $F012, 0);
end;

Вставляется в соответствующий контрол или в код формы,
тогда таскать можно будеть за все, кроме пространства перекрытого другими контролами. Можно это вставить в
событие мыши. А WM_NCHITTEST не работает в клиентской
части окна.


yar   (2002-11-07 18:13:00) [2]

Собственно уже все ...
Спасибо


Gandalf   (2002-11-07 18:00:00) [3]


> > Вообще то вопрос к КОЛ никакого отношения не имеет, тебе
> в
> > WinAPI
> поправка принята ...

Для дальнейшего обсуждения либо мыль, либо иди в WinAPI - там встетимся (а может и нет, там и так мастеров хватает).


> в целом, уже спасибо.

Да незачто.


> Но раз уж зашел такой разговор, то как заставить форму перемещаться,
> если тянут не за форму, а за компонент на ней ?
> например, TMemo, TLabel etc ?

Вот например если хочешь за Memo1 таскать, ставишь у него:

function TForm1.Memo1Message(var Msg: tagMSG; var Rslt: Integer): Boolean;
begin
result := false;

case msg.message of
WM_NCHITTEST:
begin
Rslt:=HTTRANSPARENT;
Result:=True;
end;
end;
end;


yar   (2002-11-07 17:13:00) [4]

> Вообще то вопрос к КОЛ никакого отношения не имеет, тебе в
> WinAPI
поправка принята ...

в целом, уже спасибо.

Но раз уж зашел такой разговор, то как заставить форму перемещаться, если тянут не за форму, а за компонент на ней ?
например, TMemo, TLabel etc ?
Я вижу, что подобная задача уже тобой решалась, так может поделишься ? Можно и самому нарыть, но это время - а его как раз и нет ...


Gandalf   (2002-11-07 16:33:00) [5]

Вообще то вопрос к КОЛ никакого отношения не имеет, тебе в WinAPI.


> Форма перетаскивается, если тянуть за нее, а если тянуть
> за контролы на форме, то они начинают по ней ползать ...


if msg.hwnd=Form.Handle then
begin
Rslt:=HTCAPTION;
Result:=True;
end;



> ... в том числе и кнопки
> на caption - не работают тоже ...


Rslt:=DefWindowProc(msg.hwnd,msg.message,msg.wParam,msg.lParam);
if (Rslt<>HTZOOM) and (Rslt<>HTREDUCE) and (Rslt<>HTCLOSE) then
begin
Rslt:=HTCAPTION;
Result:=True;
end;



yar   (2002-11-07 16:18:00) [6]

> Плохо хитрил ;)
наверное ;)

Это было первое, что я написал ...
А ты видел, что при этом получается ?
Форма перетаскивается, если тянуть за нее, а если тянуть за контролы на форме, то они начинают по ней ползать ...
И при этом не работает ни одна кнопка, в том числе и кнопки на caption - не работают тоже ...

другие мысли есть ?


Gandalf   (2002-11-07 16:05:00) [7]


> У кого есть пример рабочего сабжа ?
> Мои ухищрения с OnMessage не помогают ;(

Плохо хитрил ;)

function TForm1.KOLForm1Message(var Msg: tagMSG;
var Rslt: Integer): Boolean;
begin
result := false;
case msg.message of
WM_NCHITTEST:
begin
Rslt:=HTCAPTION;
Result:=True;
end;
end; //case
end;


Наверх

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