Um einen geskinnten cxButton mit beliebigen Inhalt (z.B. mehrzeilig mit unterschiedlichen Fonts und Images links und rechts) zu versehen, sind diese Schritte nötig:
Der Text wird in einer eigenen Subklasse mittels einer virtuellen Methode gezeichnet. Durch das Ableiten kann man sie überschreiben:
Delphi-Quellcode:
TdcButtonGlyph = class(TcxButtonGlyph)
protected
procedure DrawButtonText(ACanvas: TCanvas; const ACaption: TCaption;
ATextBounds: TRect; AState: TcxButtonState; ABiDiFlags: LongInt;
ANativeStyle: Boolean; AWordWrap: Boolean; ASkinsUsed: Boolean = False); override;
end;
Ableiten des TcxButtons, um die protected-Methode überschreiben zu können, die den obigen Subklassen-Typ liefert:
Delphi-Quellcode:
TdcButton = class(TcxButton)
protected
function GetGlyphClass: TcxButtonGlyphClass; override;
end;
In der Implementierung wird der neue Subklassentyp gemeldet:
Delphi-Quellcode:
function TdcButton.GetGlyphClass: TcxButtonGlyphClass;
begin
Result := TdcButtonGlyph;
end;
Und schließlich wird der gewünschte Inhalt gezeichnet:
Delphi-Quellcode:
procedure TdcButtonGlyph.DrawButtonText(ACanvas: TCanvas;
const ACaption: TCaption; ATextBounds: TRect; AState: TcxButtonState;
ABiDiFlags: Integer; ANativeStyle, AWordWrap, ASkinsUsed: Boolean);
begin
ACanvas.Brush.Style := bsClear;
ACanvas.TextOut(32, 10, 'Titel: ' + ACaption );
ACanvas.Font.Color := clGray;
ACanvas.TextOut(32, 25, 'Beschreibung: ');
end;
HTH.