Как поле со списком со стилем csOwnerDrawFixed может вести себя как стиль csDropDown?

Я использую компонент TComboBox со свойством стиля, установленным на < em>csOwnerDrawFixed, я реализую OnDrawItem, и все работает нормально. Теперь я хочу, чтобы поле со списком вело себя так, как если бы оно имело стиль csDropDown (со стилем csOwnerDrawFixed ведет себя как стиль csDropDownList), я имею в виду с внутренним редактором. Это возможно?


person Salvador    schedule 21.03.2012    source источник


Ответы (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