Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
15-1165312311
umbra
2006-12-05 12:51
2006.12.24
что такое апартамент в СОМ?


15-1164947913
Slider007
2006-12-01 07:38
2006.12.24
С днем рождения ! 1 декабря


2-1165553803
Алексей С.
2006-12-08 07:56
2006.12.24
Удаление Run-Time элементов управления


5-1145509652
DimaBr
2006-04-20 09:07
2006.12.24
Left Top компонета


2-1165376580
Desk
2006-12-06 06:43
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский