![]() |
|
|
#1
|
|||
|
|||
|
Уважаемые эксперты, у компонента ComboBox свойства:
Код:
Style = csOwnerDrawVariable; DropDownCount = 8; высота строк задается в обработчике ComboBox1MeasureItem: Код:
procedure TForm1.ComboBox1MeasureItem(Control: TWinControl;
Index: Integer; var Height: Integer);
begin
case Index of
0: Height := 16 ;
1: Height := 40 ;
2: Height := 16 ;
end
end;Проблема в том, что при выпадении списка, его высота намного меньше этих трех строк (хотя DropDownCount = 8). Может возможно задать высоту выпадающего списка программным путем ? |
|
#2
|
||||
|
||||
|
Не поленись, покопайся в исходниках Дельфи. Там везде предполагается, что высота итема фиксирована.
Код:
procedure TCustomCombo.AdjustDropDown;
...
SetWindowPos(FDropHandle, 0, 0, 0, Width, ItemHeight * Count + Height + 2, SWP_NOMOVE or SWP_NOZORDER or SWP_NOACTIVATE or SWP_NOREDRAW or SWP_HIDEWINDOW);
...
end;
...
function TCustomComboBox.GetItemHt: Integer;
begin
if FStyle in [csOwnerDrawFixed, csOwnerDrawVariable] then
Result := FItemHeight else
Result := Perform(CB_GETITEMHEIGHT, 0, 0);
end; |
|
#3
|
|||
|
|||
|
angvelem большое спасибо за помощь, после Вашего сообщения проблему сразу же решил (перекрыл метод AdjustDropDown своим, с указанием в процедуре SetWindowPos нужной высоты)
|