Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.18;
Скачать: CL | DM;

Вниз

Как перетягивать форму без заголовка?   Найти похожие ветки 

 
_Beginner_   (2005-09-27 22:09) [0]

Здравствуйте!
Недавно попробовал библиотеку КОЛ и очень понравилось, но возникли некоторые прроблемы. Некоторые я уже забыл, но ещё одна есть:
создал форму без заголовка и написал стандартный обработчик для события ОнМаусДаун, чтоб перетягивать форму:
ReleaseCapture;
Perform(WM_SysCommand,$F012,0);
на что делфи пишет, что не понимает Perform? Как это исправить, чтоб работало?
И ещё: часто надо использовать IntToStr(), а оболочка пишет, что такого не знает, приходится подключать SysUtils, но он вроде уже подключён до этого, как-то странно.
Научите, пожалуйста, как правильно.
Заранее благодарен.


 
Ajax ©   (2005-09-28 00:16) [1]

Для перетаскивании формы используй Form.DragStart.
Вместо StrToInt используй Str2Int.


 
SPeller ©   (2005-09-28 04:08) [2]

В FAQ был ответ на этот вопрос.


 
Wiz@rd   (2005-09-28 09:20) [3]

ОнМаусДаун:
SendMessage (Handle, WM_SYSCOMMAND, SC_MOVE+1,0);


 
ECM ©   (2005-09-28 11:08) [4]

ИМХО: Перетаскивание формы без заголовка "кошернее" сделать через обработку сообщения WM_NCHITTEST  - просто сообщить Windows что клиентская часть окна и есть ее заголовок:

function TForm1.KOLForm1Message(var Msg: tagMSG;
 var Rslt: Integer): Boolean;
begin
 Result := FALSE;
 if (Msg.message = WM_NCHITTEST) then begin
   Rslt := DefWindowProc(Form.Handle,Msg.message,Msg.wParam,Msg.lParam);
   if Rslt = HTCLIENT then begin
       Rslt := HTCAPTION;
       Result := TRUE;
   end;
 end;
end;


По-поводу Perform:
В KOL это можно было записать так: Form.Perform(WM_SysCommand,$F012,0);


 
Wiz@rd   (2005-09-28 21:36) [5]

Вообще то мой вариант позволяет тащить кого-угодно за что угодно, если нужен мгновенный драг то можно добавить SystemParametersInfo (SPI_SETDRAGFULLWINDOWS, 0, nil, 0)
также в KOL можно сделать так:

procedure TMainForm.pnlCaptionMouseDown(Sender: PControl;
 var Mouse: TMouseEventData);
begin
 if Mouse.Button = mbLeft then FDown := True;
end;

procedure TMainForm.pnlCaptionMouseMove(Sender: PControl;
 var Mouse: TMouseEventData);
begin
 if FDown then Form.DragStartEx;
end;

procedure TMainForm.pnlCaptionMouseUp(Sender: PControl;
 var Mouse: TMouseEventData);
begin
 FDown := False;
 Form.DragStopEx;
end;


 
_Beginner_   (2005-10-07 18:15) [6]

Большое спасибо, обязательно попробую и сообщу о результатах


 
Muxaspb   (2005-10-08 16:15) [7]

А кто-нибудь знает, как перетягивать компонент внутри определенной области, например, панель внутри клиентской области формы, чтобы она не выходила за ее пределы.


 
homm ©   (2005-10-08 23:04) [8]

2 Muxaspb
Первое что приходит в голову - ClipCursor.
Второе проверять Component.Left + Component.Width > Parent.Widht и аналогично высоту в WM_SIZING, и если больше то поправлять.



Страницы: 1 вся ветка

Текущий архив: 2006.06.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.044 c
15-1148360190
БарЛог
2006-05-23 08:56
2006.06.18
И это - Москва!


3-1145957654
kyn66
2006-04-25 13:34
2006.06.18
SQL-запрос с параметрами выдает ошибки


15-1148554071
Crazy manager
2006-05-25 14:47
2006.06.18
Практический вопрос о планирование в маленькой конторе


2-1149068744
volkodav
2006-05-31 13:45
2006.06.18
Проблема с функцией CopyFile


15-1148261306
GoreStudent
2006-05-22 05:28
2006.06.18
access