Конференция "KOL" » Как создать аналог выпадающего списка ComboBox? [Delphi, Windows]
 
  • DVK (27.11.07 10:04) [0]
    Пишу собственный аналог инспектора объектов. Для реализации мне понадобилось создать аналог ComboBox'a. Проблема с выпадающим списком (аналог системного ComboLBox). Он реализован с использованием CreateWindow('ComboLBox', ..., организацией собственного цикла обработки сообщений и т.д. Для отслеживания кликов мыши вне области окна приходится делать SetCapture (впрочем, так сделано и в системном ComboLBox). Но! В этом случае не работает прокрутка (ScrollBar) внутри моего окна. В смысле полоса прокрутки появляется когда надо, но при клике мыши на ней перемещение ползунка не происходит. Как это победить?

    привожу пример кода:

    var
     hlb: THandle;
     OldWndProc: Pointer;

    function ComboLBoxWindowProc(Wnd: HWND; Msg, wParam, lParam: Longint): Longint; stdcall;
    begin
     Result:=CallWindowProc(OldWndProc, wnd, Msg, wParam, lParam);
     case Msg of
       WM_LBUTTONDOWN:
       begin
         ReleaseCapture;
         ShowWindow(hlb, SW_HIDE);
       end;
     end;
    end;

    procedure TForm1.KOLForm1FormCreate(Sender: PObj);
    var i: Integer;
    begin
     hlb:=CreateWindowEx(WS_EX_TOPMOST or WS_EX_TOOLWINDOW ,
       'ComboLBox', '',
       WS_CHILD or WS_CLIPSIBLINGS or WS_BORDER or WS_VSCROLL or WS_VISIBLE,
       100, 100, 100, 200, form.handle, 0, HInstance, nil);
     windows.SetParent(hlb, 0);
     OldWndProc:=Pointer(GetWindowLong(hlb, GWL_WNDPROC));
     SetWindowLong(hlb, GWL_WNDPROC, integer(@ComboLBoxWindowProc));

     for i:=1 to 20 do
       SendMessage(hlb, LB_ADDSTRING, 0, integer(pchar('12345')));
     SetCapture(hlb);
    end;

 
Конференция "KOL" » Как создать аналог выпадающего списка ComboBox? [Delphi, Windows]
Есть новые Нет новых   [134431   +10][b:0][p:0.001]