Форум: "Основная";
Текущий архив: 2006.12.24;
Скачать: [xml.tar.bz2];
ВнизResize формы (BorderStyle = bsNone) Найти похожие ветки
← →
Димыч © (2006-11-08 10:23) [0]Окно программы имеет вид BorderStyle = bsNone (т е пустой прямоугольник) можно ли такому окну вернуть способность изменения размера при помощи мыши (как у нормального окна BorderStyle = bsSizeable)
← →
DrPass © (2006-11-08 10:31) [1]Да, можно. Только тебе придется написать обработчик сообщения WM_NCHITTEST
← →
Димыч © (2006-11-08 10:42) [2]Если я правильно понял, то надо в событии WM_NCHITTEST смотреть координаты мыши
xPos = LOWORD(lParam); // horizontal position of cursor
yPos = HIWORD(lParam); // vertical position of cursor
и если они в нужном месте то в Result поместить нужный код для того что бы начался процесс изменения размеров формы.
Если так то какой код нужно помести в Result - HTBOTTOMRIGHT,HTSIZE или еще какой?
← →
Димыч © (2006-11-08 10:50) [3]Удалено модератором
Примечание: дубль
← →
Димыч © (2006-11-08 11:14) [4]Что то не получается, как должен выглядить обработчик сообщения?
← →
DVM © (2006-11-08 11:17) [5]
> Что то не получается, как должен выглядить обработчик сообщения?
Вот обработчик сообщения из одного моего проекта. Там окно как раз было без бордюра.
function OnNCHitTest(hWnd: HWND; Msg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT;
var
u : UINT;
bPrimaryMouseBtnDown : Boolean;
rcClient : TRect;
pt : TPoint;
vKey : Integer;
begin
u := DefWindowProc(hWnd, Msg, wParam, lParam);
if GetSystemMetrics(SM_SWAPBUTTON) <> 0 then
vKey := VK_RBUTTON
else
vKey := VK_LBUTTON;
bPrimaryMouseBtnDown := ((GetAsyncKeyState(vKey) and $8000) <> 0);
pt.X := LoWord(lParam);
pt.Y := HiWord(lParam);
ScreenToClient(hWnd, pt);
if not TaskBarSettings.bFixed then
begin
if (u = HTCLIENT) and bPrimaryMouseBtnDown then u := HTCAPTION;
end;
{if ((TaskBarSettings.tbEdge = tbeFloat) and (HTSIZEFIRST <= u) and (u <= HTSIZELAST)) then
begin
case u of
HTLEFT, HTRIGHT:
if TaskBarSettings.szSizeInc.cx = 0 then u := HTBORDER;
HTTOP, HTBOTTOM:
if TaskBarSettings.szSizeInc.cy = 0 then u := HTBORDER;
HTTOPLEFT:
if (TaskBarSettings.szSizeInc.cx = 0) and (TaskBarSettings.szSizeInc.cy = 0) then
u := HTBORDER
else
if (TaskBarSettings.szSizeInc.cx = 0) and (TaskBarSettings.szSizeInc.cy <> 0) then
u := HTTOP
else
if (TaskBarSettings.szSizeInc.cx <> 0) and (TaskBarSettings.szSizeInc.cy = 0) then
u := HTLEFT;
HTTOPRIGHT:
if (TaskBarSettings.szSizeInc.cx = 0) and (TaskBarSettings.szSizeInc.cy = 0) then
u := HTBORDER
else
if (TaskBarSettings.szSizeInc.cx = 0) and (TaskBarSettings.szSizeInc.cy <> 0) then
u := HTTOP
else
if (TaskBarSettings.szSizeInc.cx <> 0) and (TaskBarSettings.szSizeInc.cy = 0) then
u := HTRIGHT;
HTBOTTOMLEFT:
if (TaskBarSettings.szSizeInc.cx = 0) and (TaskBarSettings.szSizeInc.cy = 0) then
u := HTBORDER
else
if (TaskBarSettings.szSizeInc.cx = 0) and (TaskBarSettings.szSizeInc.cy <> 0) then
u := HTBOTTOM
else
if (TaskBarSettings.szSizeInc.cx <> 0) and (TaskBarSettings.szSizeInc.cy = 0) then
u := HTLEFT;
HTBOTTOMRIGHT:
if (TaskBarSettings.szSizeInc.cx = 0) and (TaskBarSettings.szSizeInc.cy = 0) then
u := HTBORDER
else
if (TaskBarSettings.szSizeInc.cx = 0) and (TaskBarSettings.szSizeInc.cy <> 0) then
u := HTBOTTOM
else
if (TaskBarSettings.szSizeInc.cx <> 0) and (TaskBarSettings.szSizeInc.cy = 0) then
u := HTRIGHT;
end; // case
end; }
{ if ((TaskBarSettings.tbEdge <> tbeFloat) and (TaskBarSettings.tbEdge <> tbeUnknown) and
(HTSIZEFIRST <= u) and (u <= HTSIZELAST)) then
begin
if (IsEdgeLeftOrRight(TaskBarSettings.tbEdge) and (TaskBarSettings.szSizeInc.cx = 0))
or (not IsEdgeLeftOrRight(TaskBarSettings.tbEdge) and (TaskBarSettings.szSizeInc.cy = 0)) then
begin
u := HTBORDER;
end
else
begin}
GetClientRect(hWnd,rcClient);
pt.X := rcClient.Left;
pt.Y := rcClient.Top;
ClientToScreen(hWnd, pt);
rcClient.Left := pt.X;
rcClient.Top := pt.Y;
pt.X := rcClient.Right;
pt.Y := rcClient.Bottom;
ClientToScreen(hWnd, pt);
rcClient.Right := pt.X;
rcClient.Bottom := pt.Y;
// u := HTBORDER;
case TaskBarSettings.tbEdge of
tbeLeft:
if LoWord(lParam) > rcClient.Right then
u := HTRIGHT;
tbeTop:
if HiWord(lParam) > rcClient.Bottom then
u := HTBOTTOM;
tbeRight:
if LoWord(lParam) < rcClient.Left then
u := HTLEFT;
tbeBottom:
if HiWord(lParam) < rcClient.Top then
u := HTTOP;
end; // case
// end;
// end;
Result := u;
end;
← →
Димыч © (2006-11-08 11:41) [6]Всё работает, спасибо за помощь.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.12.24;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.041 c