Форум: "KOL";
Текущий архив: 2006.06.18;
Скачать: [xml.tar.bz2];
ВнизКак перетягивать форму без заголовка? Найти похожие ветки
← →
_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 вся ветка
Форум: "KOL";
Текущий архив: 2006.06.18;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c