Wie bei einem herkömmlichen Programm, das Dialogressourcen nutzt, müssen die einzelnen Seiten natürlich auch hier geladen werden. Die Reihenfolge, in der die Seiten später im Assistenten angezeigt werden, ergibt sich dabei aus der Reihenfolge, in der Sie sie laden lassen.
Zum Laden der Seiten benötigt man ein
psp.dwSize := sizeof(psp);
Danach wird die dwFlags-Membervariable mit Werten gefüllt,
| Wert | Bedeutung |
|---|---|
PSP_DEFAULT | Der Wert ist Null und bedeutet laut PSDK: "uses the default meaning for all structure members". Ich gebe zu, ich habe keine Ahnung, wie man das am sinnvollsten übersetzen soll. :o) |
PSP_HIDEHEADER | Die Seite besitzt keinen Header. |
PSP_HASHELP | Es wird ein Hilfe-Button angezeigt, wenn die Seite sichtbar ist. |
PSP_USEHEADERTITLE | Die Seite besitzt einen Titel im Header; üblicherweise ist dieser Text fett gedruckt. |
PSP_USEHEADERSUBTITLE | Die Seite besitzt zusätzlichen Text im Header; üblicherweise unter dem Header in normaler Schrift, dafür aber leicht eingerückt. |
(weitere Werte finden Sie im PSDK)
Für unsere erste Dialogseite benutzen wir nur die folgenden beiden Flags:
psp.dwFlags := PSP_DEFAULT or PSP_HIDEHEADER;
Für eine so genannte "innere Seite", die einen Header anzeigen soll, sind anstelle von PSP_HIDEHEADER PSP_USEHEADERTITLE und ggf. PSP_USEHEADERSUBTITLE zu benutzen
psp.dwFlags := PSP_DEFAULT or PSP_USEHEADERTITLE or PSP_USEHEADERSUBTITLE;
wobei dann natürlich auch die entsprechenden Strings zu benutzen sind. Im Fall des Beispielprogramms werden diese aus den Ressourcen geladen:
psp.pszHeaderTitle := MAKEINTRESOURCE(IDS_P1TITLE); psp.pszHeaderSubTitle := MAKEINTRESOURCE(IDS_P1SUBTITLE);
Zu guter Letzt werden die Anwendungsinstanz, eine Dialogprozedur und natürlich auch die Dialogressource selbst gebraucht:
psp.hInstance := hInstance; psp.pfnDlgProc := @IntroDlgProc; psp.pszTemplate := MAKEINTRESOURCE(IDD_INTRODLG);
Das bedeutet, dass Sie nach Möglichkeit nicht die gleiche Dialogprozedur für verschiedene Seiten benutzen sollten. Das mag sich umständlich anhören, ist aber meiner Ansicht nach letztlich auch übersichtlicher.
Nun kommt der Zusammenhang von Assistenten und Property-Sheet, denn die eigentliche Seite wird mit dem Befehl "CreatePropertySheetPage" erzeugt. Rückgabewert ist das Handle der neu erzeugten Seite, sofern die Aktion erfolgreich war. Das Interessante hierbei ist allerdings, dass wir das Handle in einem Array
var ahpsp : array[0..3]of HPROPSHEETPAGE;
sichern:
ahpsp[0] := CreatePropertySheetPage(psp);
Das liegt daran, dass unser Programm ja aus mehreren Seiten besteht, die auch alle angezeigt werden sollen.