2009-03-13 10 views
2

J'essaie de créer un contrôle personnalisé basé sur TCustomComboBox dans Delphi 2007, mais je suis bloqué sur le premier obstacle. J'essaie de contourner la façon dont la liste déroulante est affichée, principalement le texte qui est affiché, en regardant la source de TCustomComboBox dans stdctrls.pas il semble que je dois juste remplacer DrawItem, mais il ne fonctionne pas, comme le code de ma méthode substituée n'est jamais exécuté.Création d'un descendant TCustomComboBox dans Delphi

J'ai regardé un code source de plusieurs composants open source pour voir comment ils le font, mais je suis toujours à une perte.

Voici ce que j'ai jusqu'à présent (pas grand-chose il est vrai)

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; 

Et

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; 

Est-ce que quelqu'un sait quelle méthode je dois utiliser pour obtenir ma version surchargée de feu? ou ce que je fais mal?

Toute aide serait appréciée.

Répondre

5

Il existe également une propriété qui doit être définie, de la mémoire c'est DrawingStyle: = dsCustomDraw Mettez cela dans le constructeur ou Loaded.

1

Avez-vous activé le dessin propriétaire? Par défaut, il est désactivé. Essayez de faire fonctionner le dessin personnalisé avec une zone de liste modifiable standard et créez ensuite votre contrôle personnalisé en appliquant tous les paramètres nécessaires.

Questions connexes