Главная страница
    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.48 MB
Время: 0.045 c
2-1165372992
Myxa_0
2006-12-06 05:43
2006.12.24
Как можно выполнить код записанный в текстовом поле?


3-1160979192
Dmitry77
2006-10-16 10:13
2006.12.24
Lookup поле


2-1165251868
DelphiLexx
2006-12-04 20:04
2006.12.24
Pause и MASSIVINSERT


15-1165005892
lookin
2006-12-01 23:44
2006.12.24
Скайэкспресс - это правда про 500 рублей?


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