Das Preview-Kontrollfeld bietet viel mehr
Möglichkeiten, als nur eine Vorschau (auf was denn?), wie der
Name vermuten lässt: damit könnte man mit etwas gutem
Willen ein kleines Zeichenprogramm programmieren! Kreise, Vielecke,
Linien, Text: alles ist möglich. Da all diese Methoden in der
Online-Hilfe jedoch gut bei den Kontrollfeld-Eigenschaften versteckt
sind, musste ich plötzlich selber wieder überlegen, woher
ich denn das weiss...
Bevor wir uns allerdings der Programmierung widmen können, muss ich leider erst zu einem weiteren Mysterium etwas ausholen:
Unter «Wichtige Masseinheiten» scheint in der
Online-Hilfe alles über die Twips zu stehen: «567 Twips
entsprechen 1 cm.». Alles klar? Mir noch nicht! Nachdem ich
aber erkannte, dass alle Methoden, mit welchen sich ein Preview
bearbeiten lässt, die Koordinaten etc. in der Einheit Twips
verlangen, erfand ich mir meine eigene Erklärung. Twips sind
ganz einfach eine Masseinheit für die geräteunabhängige
Koordinaten-Definition.
Natürlich scheint es auf den ersten Blick viel einfacher, solche Masse gleich in Pixeln zu definieren. Doch wie wir noch sehen werden, scheint es hier Abweichungen in Abhängigkeit vom verwendeten Betriebssystem zu geben. Doch dazu mehr im zweiten Teil dieses Exkurses: «Exkurs: Preview plattformunabhängig». Zum Anfang genügt es, einfach zur Kenntnis zu nehmen, dass alle nun folgenden Koordinaten-Angaben in Twips zu definieren sind. Also nicht erschrecken, wenn nach der Eingabe eines «100» langen Strichs nicht allzuviel auf dem Bildschirm erscheint: das sind eben 100 Twips und nicht 100 Pixel!
In einem Preview-Kontrollfeld etwas anzuzeigen ist auf
den ersten Blick gar nicht so einfach: im Entwurf kann ich nichts
reinpinseln, auch kann ich nicht einfach eine BMP-Datei als
Eigenschaft definieren. Das Vorgehen ist jedoch ziemlich logisch: da
weit mehr möglich ist, als die Anzeige einer Graphik, muss die
Ausgabe programmiert werden. Und eben diese Routine, die das
vornimmt, auszuführen, muss sie einfach im Makro-Dialog mit dem
OnPaint-Ereignis des Preview-Elementes
verknüpft werden. Diese Routine muss nun alles veranlassen,
damit das Preview sinnvoll gefüllt wird:
Sub myPreview_OnPaint() ' Schicke für einmal graphische Grüsse myDialog.myPreview.DrawText(100, 100, "Hello Stars!") End Sub
Natürlich kann auch jede andere Routine auf ein Preview
zeichnen, wenn dieses bereits geladen ist. Der Weg über OnPaint
bietet jedoch den Vorteil, dass das Preview auch wieder
korrekt angezeigt wird, wenn es z.B. mal durch ein anderes Fenster
verdeckt wurde.
Achtung: Die DrawPicture()-Methode scheint
derzeit leider nur BMP-Dateien zu unterstützen! Support für
JPEG, GIF oder andere gängige Graphikformate fehlen meines
Wissens komplett.
Für die vielfältigen Möglichkeiten rund um die
DrawXXX-Methoden des Previews verweise ich
auf die Dokumentation: auf Seite 244ff. befindet sich ein
ausführliches Beispiel, welches viele Aspekte abdeckt.
Bei der Preview-Programmierung kommt es gerne zu
«endlosen» Fehlermeldungen, wenn sich bei der
OnPaint-Routine ein Fehler eingeschlichen hat. Das SO
bemängelt diesen korrekt. Doch sobald man den Fehlerdialog
wieder schliesst, erscheint die Meldung erneut...
Das Problem hierbei ist so logisch wie einfach zu beheben: da nach
dem Schliessen der Fehlermeldung gleich wieder ein OnPaint-Ereignis
ausgelöst wird, führt die Ausführung der damit
verknüpften Routine auch gleich wieder zu dem bemängelten
Fehler. Dies lässt sich umgehen, indem man die Fehlermeldung vor
dem Schliessen so plaziert., dass es das Preview-Element
nicht mehr abdeckt.