Главная страница
    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.47 MB
Время: 0.035 c
2-1165200839
M1sT
2006-12-04 05:53
2006.12.24
Перемещение записи


15-1164886688
flaxe
2006-11-30 14:38
2006.12.24
Дискретная Математика!


15-1165218074
Kolan
2006-12-04 10:41
2006.12.24
Два вопроса по BDS2006


15-1165155231
crunk
2006-12-03 17:13
2006.12.24
пересылка


15-1164959291
вразлет
2006-12-01 10:48
2006.12.24
Задача





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский