Bitmaps aus dem System


Wir hatten ja schon besprochen, wie man Bitmaps für Toolbars erstellt. Hier soll nun demonstriert werden, wie man vorhandene Grafiken des Systems verwenden kann. Betrachten wir dazu einmal den Zweck von typischen Toolbars: die meisten Programme bieten damit einen schnelleren Zugriff auf bekannte Menübefehle, wie etwa Öffnen, Speichern, Kopieren, Ausschneiden, usw. Für solche doch recht gebräuchlichen Befehle stellt Windows bereits fertige Grafiken zur Verfügung. Das spart zum einen Ressourcen und vermindert auf der anderen Seite den Arbeitsaufwand. Allerdings ist man dafür in der Auswahl natürlich eingeschränkt.


Vorbereitungen

Wie bereits hier beschrieben, bereiten wir unser TTBButton-Record vor. Nur diesmal benutzen wir in der iBitmap-Membervariablen nicht die ID einer externen Bitmap! Stattdessen verwenden wir Konstanten, die wir in der Unit "CommCtrl.pas" finden können, und die mit dem Präfix "STD_" beginnen. Ein paar der bekanntesten sollen hier aufgezählt werden:

Konstante Beschreibung
STD_COPY entspricht der Bitmap "kopieren"
STD_CUT entspricht der Bitmap "ausschneiden"
STD_DELETE entspricht der Bitmap "löschen"
STD_FILENEW entspricht "Datei/Neu"
STD_FILEOPEN entspricht "Datei/Öffnen"
STD_FILESAVE entspricht "Datei/Speichern"


Daneben gibt es noch andere Bitmapkonstanten, die mit dem Präfix "VIEW_" beginnen und aus dem Windows-Explorer bekannt sein dürften. Etwa:

Konstante Beschreibung
VIEW_DETAILS entspricht "Ansicht/Details"
VIEW_LARGEICONS entspricht "Ansicht/große Symbole"
VIEW_SMALLICONS entspricht "Ansicht/kleine Symbole"

(da die Bitmaps systembedingt abweichen könnten, spare ich mir eine grafische Darstellung)


Anwendung

Ein Button mit einer solchen Systembitmap könnte also wie folgt deklariert werden:

with tbButtons[0] do
begin
  iBitmap := STD_FILEOPEN;
{ ... } end;

Nun können wir unsere Toolbar erstellen, wobei wir aber so ziemlich alle Parameter (also Größe der Buttons, Anzahl der Bitmaps, usw.) vernachlässigen können. Da wir damit zwar die Toolbar nicht aber die Bitmaps haben, benötigen wir als nächstes eine Variable vom Typ TBAddBitmap. Diese Variable haben Sie bereits hier kennengelernt, als der neue, von Microsoft empfohlene Weg zum Erstellen einer Toolbar demonstriert wurde.
In diesem Fall übergeben wir der Membervariablen hInst den Wert "HINST_COMMCTRL". Damit ist schon festgelegt, dass wir die Systembitmaps nutzen wollen. Allerdings müssen wir noch angeben, welche exakt das sein sollen. Im Fall des eben gezeigten Button-Beispiels interessieren uns die Standardbitmaps ("STD_"-Präfix), so dass wir die Wahl zwischen "IDB_STD_LARGE_COLOR" (Standardgrafiken, groß) und "IDB_STD_SMALL_COLOR" (Standardgrafiken, klein) haben.

aBmp.hInst := HINST_COMMCTRL;
aBmp.nID := IDB_STD_SMALL_COLOR;

Für die View-Bitmaps lauten die Konstanten entsprechend "IDB_VIEW_LARGE_COLOR" und "IDB_VIEW_SMALL_COLOR". Der Rest ist recht einfach: Briefmarke drauf und das ganze an die Toolbar schicken :o)

SendMessage(hToolbar,TB_ADDBITMAP,0,LPARAM(@aBmp));

Zur Demonstration liegt ein kleines, separates Beispielprogramm bei, das die notwendigen Schritte anhand einer Beispieltoolbar zeigt.


Die VCL-Toolbar und die Systembitmaps

Auch mit der Toolbar-Komponente der VCL können Sie die Systembitmaps nutzen. Dazu erzeugen Sie zunächst die gewünschten Buttons.
Um die Bitmaps zuzuweisen, gibt es zwei Möglichkeiten:

  1. Wenn Sie die Eigenschaft "ImageIndex" im Objektinspektor nutzen wollen, dann benötigen Sie numerischen Werte der o.g. Konstanten, etwa von STD_FILENEW, weil Sie diese ja nicht direkt angeben können. Sie finden die Werte in der Unit "CommCtrl.pas" bzw. in der Headerdatei "CommCtrl.h" (PSDK).
  2. Etwas aufwändiger, dafür aber (in Bezug auf evtl. Änderungen) sicherer, ist der Weg, die Bitmapwerte im "OnCreate"-Ereignis der Form zuzuweisen. In dem Fall können Sie auch die o.g. Konstanten nutzen:
    Toolbar1.Buttons[0].ImageIndex := STD_FILENEW;

Die Bitmaps selbst werden wie oben beschrieben geladen. Es bietet sich an, den notwendigen Code im "OnCreate"-Ereignis der Form unterzubringen.