TXPButton mit Delphi 3 (und höher)

Seit dem Erscheinen von Windows XP haben sich die Common Controls (ComCtrls) grundlegend geändert. Bei älteren Delphi Versionen sind Bitmap-Buttons (TBitButton, TSpeedButton, von Borland ohne ComCtrls entwickelt) unterschiedlich im Erscheinungsbild gegenüber den normalen (TButton).

Zur Vereinheitlichung gibt es Ansätze von verschiedenen Programmierern, sowie von Borland selbst: Wer als Entwicklungsumgebung Delphi 7 nutzt ist fein 'raus, da dessen TBitButton und TSpeedbutton die Themes Unit (von Mike Lischke) nutzen. Ältere Delphi Versionen bieten diese Unterstützung nicht. Nach kurzem Kontakt mit Mike Lischke stellte sich heraus, daß sein XP Theme Manager, der ab D4 verfügbar ist, vermutlich mit geringem Aufwand auf Delphi 3 angepaßt werden kann. In der Zwischenzeit ergab sich jedoch eine andere Lösung:

Abbildung 1: vorher: TSpeedButton ohne Anpassung an die Windows XP-Styles.
Der unterschiedliche Stil der Buttons ist unschön.

Nach langem Suchen für einen Windows-XP geeigneten Ersatz für die o.g. Bitmap-Buttons, stieß ich letzte Woche (zufällig) auf einen Artikel bei Codeproject: Artikel

Abbildung 2: nachher: TXPButton im gleichen Stil wie normale TButtons.

Die TXPButton-Komponente ist in Delphi 3 umgesetzt und hat leicht geänderte Eigenschaften zum TButton. Dafür ist die Komponente TXPButton von TButton abgeleitet. Zusätzliche Eigenschaften sind:

Der TXPButton kann genau wie der TButton genutzt werden, eine Änderung ist das Aufrufen der SetImage Funktion, diese sendet das Bitmap an den Button:

procedure TForm1.FormCreate(Sender: TObject);
begin
     btnHilfe.SetImage;
     ...

Da die Funktion

SendMessage(Handle, BCM_SETIMAGELIST, 0, Integer(@bImageList));

erst ab den Common Controls 6.0 integriert sind, kann z.B. Windows 98 die Bitmap nicht darstellen. Um Benutzer älterer Windows Versionen nicht auszuschließen, ist folgende Änderung vorgenommen worden:

Der TXPButton hat eine zusätzliche Eigenschaft "Caption2". Falls eine ComCtl32.dll mit kleinerer Version als 6.0 auf dem System ist, so wird anstatt des Bitmaps der Text von "Caption2" ausgegeben. So bleibt zumindest der Sinn des Buttons verständlich.

Abbildung 3: Windows XP: TXPButton stellt das Bitmap dar.

Abbildung 4: Windows 98: Anhand der Common-Control Version (5.8) wird der Ersatz-Text aus der Property "Caption2" dargestellt.



   v0.1 Sourcecode + Beispielprojekt (D3) downloaden
   v0.1 Sourcecode + Beispielprojekt (D7) downloaden


Kommentar