在Delphi中创建TCustomComboBox后代

时间:2009-03-13 10:57:28

标签: delphi

我正在尝试基于Delphi 2007中的TCustomComboBox创建自定义控件,但我陷入了第一道障碍。

我试图覆盖显示下拉列表的方式,主要是显示的文本,在stdctrls.pas中查看TCustomComboBox的源代码看起来我只需要覆盖DrawItem但它不起作用,因为我的重写方法中的代码永远不会被执行。

我查看了几个开源组件源代码,看看他们是如何做到的,但我仍然处于亏损状态。

到目前为止,这是我所拥有的(不可否认)

type
  TKeyValueComboBox = class(TCustomComboBox)
  private
    { Private declarations }
    //FColumns:Integer;
  protected
    { Protected declarations }
    procedure DrawItem(Index: Integer; Rect: TRect; State: TOwnerDrawState);override; 
  public
    { Public declarations }
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
end;

并且

procedure TKeyValueComboBox.DrawItem(Index: Integer; Rect: TRect;
  State: TOwnerDrawState);
begin
  TControlCanvas(Canvas).UpdateTextFlags;
  if Assigned(OnDrawItem) then OnDrawItem(Self, Index, Rect, State)
  else
  begin
    Canvas.FillRect(Rect);
    Canvas.TextOut(Rect.Left + 2, Rect.Top, Items[Index]+'-HELLO');
  end;
end;

有谁知道我需要用什么方法来获取我的被覆盖版本的火?或者我做错了什么?

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:5)

还有一个必须设置的属性,从内存中它的DrawingStyle:= dsCustomDraw 把它放在构造函数或Loaded中。

答案 1 :(得分:1)

您是否启用了所有者绘图?默认情况下,它已停用。尝试使用标准组合框进行自定义绘图,然后使用所有必要设置创建自定义控件。