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

Вниз

Combobox и манифест ХР   Найти похожие ветки 

 
SPeller ©   (2004-11-07 17:44) [0]

У меня новая проблема с комбобоксом. Создаю комбобокс таким кодом:

var
 H: HWND;
begin
 H := CreateWindowEx(WS_EX_CLIENTEDGE, "COMBOBOX", "cb1",
   WS_CHILD or WS_BORDER or WS_VISIBLE or WS_CLIPSIBLINGS or WS_CLIPCHILDREN or
   WS_TABSTOP or
   CBS_HASSTRINGS or CBS_DROPDOWN{LIST} or WS_VSCROLL,
   100, 0, 100, 100, Handle, 0, {HInstance}0, nil);
 SendMessage(H, CB_ADDSTRING, 0, Integer(PChar("Some item 1")));
 SendMessage(H, CB_ADDSTRING, 0, Integer(PChar("Some item 2")));
 ...
 SendMessage(H, CB_ADDSTRING, 0, Integer(PChar("Some item 23")));


Комбобокс создается, но если у программы нет манифеста ХР, то он в открытом состоянии выглядит как и положено:
http://speller.narod.ru/img/other/combobox2.gif
Но если у программы есть манифест, то он выглядит вот так:
http://speller.narod.ru/img/other/combobox1.gif
При включенных и выключенных темах эффект одинаковый. Значение высоты контрола игнорируется, можно вписать хоть 0, хоть 10000. Полоса прокрутки появляется только если кол-во элементов больше примерно 30.
VCL-комбобокс ведет себя нормально в обоих случаях.
Кто-нибудь знает, как лечить такой глюк?

WinXP SP1a.


 
Ученик   (2004-11-07 19:06) [1]

Возможно, можно проще, но VCL делает тоже самое :-)

var
 ComboWndProc: Pointer;


function MyComboWndProc(HWindow: HWnd; Message, WParam: Longint;
                       LParam: Longint): Longint; stdcall;
begin
 if Message = WM_CTLCOLORLISTBOX then begin
   SetBkColor(WParam, clWhite);
   Result := GetStockObject(WHITE_BRUSH)
 end else
   Result := CallWindowProc(ComboWndProc, HWindow, Message, WParam, LParam)
end;

...
ComboWndProc := Pointer(SetWindowLong(H, GWL_WNDPROC, LongInt(@MyComboWndProc)));
SendMessage(H, CB_ADDSTRING, 0, Integer(PChar("Some item 1")));


 
SPeller ©   (2004-11-08 05:48) [2]

С цветом возможно это решит проблему (пока не могу проверить), а как быть с высотой выпадающего списка?


 
Ученик   (2004-11-08 10:20) [3]

Проблему с высотой решит добавление CBS_NOINTEGRALHEIGHT при вызове CreateWindowEx



Страницы: 1 вся ветка

Текущий архив: 2004.12.19;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.023 c
14-1101891698
zamik
2004-12-01 12:01
2004.12.19
FTP через HTTP


1-1101998562
novice__man
2004-12-02 17:42
2004.12.19
Переменные в DLL.


8-1096109970
Zeqfreed
2004-09-25 14:59
2004.12.19
AVI, WAV, потоки и ресурсы


4-1099768006
Wiz@rd
2004-11-06 22:06
2004.12.19
Как убрать бордюр у меню?


14-1101705984
NewDelpher
2004-11-29 08:26
2004.12.19
Плану Аллена Даллеса суждено было сбыться?