tags:

views:

297

answers:

2

I am trying to create a custom control based on the TCustomComboBox in Delphi 2007, But I am stuck on the first hurdle.

I am trying to override the way the drop down is displayed, primarally the text that is displayed, looking at the source for TCustomComboBox in stdctrls.pas it looks like i just need to override DrawItem but it is not working, as the code in my overridden method is never executed.

I have looked a several open source components source code to see how they do it, but I am still at a loss.

Here is what I have so far (not much admittedly)

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;

And

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;

Does anyone know what method I need to use to get my overridden version of fire? or what I am doing wrong?

Any help would be appreciated.

+1  A: 

Did you enable owner-drawing? By default it's deactivated. Try to get the custom drawing work with a standard combo box and create your custom control afterwards, applying all the necessary settings.

DR
+5  A: 

There also is a property that has to be set, from memory it's DrawingStyle := dsCustomDraw Put that in the constructor or Loaded.

Henk Holterman