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.
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)
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
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.
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:
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).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.