Я использую компонент TComboBox со свойством стиля, установленным на < em>csOwnerDrawFixed, я реализую OnDrawItem, и все работает нормально. Теперь я хочу, чтобы поле со списком вело себя так, как если бы оно имело стиль csDropDown (со стилем csOwnerDrawFixed ведет себя как стиль csDropDownList), я имею в виду с внутренним редактором. Это возможно?
Как поле со списком со стилем csOwnerDrawFixed может вести себя как стиль csDropDown?
Ответы (2)
Оболочка Delphi TComboBox не поддерживает редактируемый стиль рисования владельцем, но базовый элемент управления Windows поддерживает, и его легко включить.
Создайте новый класс-потомок следующим образом:
TComboBox = class(StdCtrls.TComboBox)
public
procedure CreateParams(var Params: TCreateParams); override;
end;
procedure TComboBox.CreateParams(var Params: TCreateParams);
begin
inherited;
if Assigned(OnDrawItem) then
Params.Style := Params.Style or CBS_OWNERDRAWFIXED
end;
Установите Style
на csDropDown
и назначьте OnDrawItem
, как вы уже делали.
person
Zoë Peterson
schedule
21.03.2012
Ни один из стилей OwnerDraw не поддерживает наличие поля редактирования в файле TComboBox
. Вместо этого вам придется использовать отдельный TEdit
.
person
Remy Lebeau
schedule
21.03.2012