Главная страница
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.027 c
1-1102361074
Kolan
2004-12-06 22:24
2004.12.19
Помогите разобраться в Delphi работает в Buildere нет.


1-1102314727
Adis Tadas
2004-12-06 09:32
2004.12.19
как вернуть _Recordset из DLL ?


1-1102187540
Bobby Digital
2004-12-04 22:12
2004.12.19
Компонент


14-1101561146
asdqwer
2004-11-27 16:12
2004.12.19
Количество отснятых фильмов


14-1101500871
syte_ser78
2004-11-26 23:27
2004.12.19
Помогите с фильтром