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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.046 c
15-1164999574
tuu
2006-12-01 21:59
2006.12.24
Вопрос по PHP и CGI


2-1165144894
Tru
2006-12-03 14:21
2006.12.24
просмотр данных


15-1164907180
TUser
2006-11-30 20:19
2006.12.24
Все не по правилам


2-1164958220
NovaC
2006-12-01 10:30
2006.12.24
Как определить Handle консоли &amp; не срабатывает FreeConsole


6-1154777105
Screamer
2006-08-05 15:25
2006.12.24
Получение данных передающихся на модем