Einführung in die Grafikeigenschaften 
für Formulare und Steuerelemente

Formulare und verschiedene Steuerelemente haben folgende Grafikeigenschaften.

Kategorie

Eigenschaften

Anzeigeverarbeitung

AutoRedraw, ClipControls

Aktuelle Ausgabeposition

CurrentX, CurrentY

Ausgabeverfahren

DrawMode, DrawStyle, DrawWidth, BorderStyle, BorderWidth

Füllverfahren

FillColor, FillStyle

Farben

BackColor, ForeColor, BorderColor, FillColor

Zwei Eigenschaften von Formularen und Bildfeldern werden Sie wahrscheinlich sofort einsetzen: BackColor und ForeColor. BackColor versieht den Hintergrund des Ausgabebereichs mit einer Farbe. Wenn BackColor beispiels­weise auf Hellblau gesetzt wird, ist der gesamte Ausgabebereich hellblau, wenn sein Inhalt gelöscht wird. ForeColor (Vordergrundfarbe) legt die Farbe von Text und Grafiken fest, die auf einem Objekt gezeichnet werden.

Erstellen beständiger Grafiken mit AutoRedraw

Alle Formulare und Bildfelder haben eine AutoRedraw-Eigenschaft. AutoRedraw ist eine Boolean-Eigenschaft, die zum Speichern der Grafikausgabe im Hauptspeicher führt, wenn sie den Wert True hat. Die AutoRedraw-Eigenschaft kann verwendet werden, um beständige Grafiken zu erzeugen.

Beständige Grafiken

Microsoft Windows verändert die Bildschirmanzeige, um sich überlappende Fenster zu simulieren. Wenn ein Fenster über ein anderes geschoben wird und das darunterliegende Fenster vorübergehend verdeckt, müssen das Fenster und sein Inhalt neu ausgegeben werden, wenn das darüberliegende Fenster wieder verschoben wird. Das erneute Anzeigen von Fenstern und Steuerelementen wird von Windows übernommen. Ihre Visual Basic-Anwendung muss jedoch die erneute Anzeige von Grafiken in Formularen und Bildfeldern übernehmen.

Grafiken dieser Art werden beständige Grafiken genannt. Beständige Grafiken können mit der AutoRedraw-Eigenschaft erstellt werden.

AutoRedraw und Formulare

Die Standardeinstellung von AutoRedraw ist False. Wenn AutoRedraw den Wert False hat, gehen alle in einem Formular erscheinenden Grafiken, die von Grafikmethoden erzeugt wurden, verloren, wenn sie von einem anderen Fenster vorübergehend verdeckt werden.

Abbildung 42   Auswirkungen, wenn AutoRedraw den Wert False hat

Wenn die AutoRedraw-Eigenschaft den Wert True hat, kopiert Visual Basic die Grafikmethoden auf eine "Leinwand" im Speicher. Die Anwendung kopiert den Inhalt dieser Speicherleinwand, um Grafiken, die vorübergehend durch ein anderes Fenster verdeckt wurden, wieder anzuzeigen.

Abbildung 43:   Auswirkungen, wenn AutoRedraw den Wert True hat

AutoRedraw und Bildfelder

Wenn die AutoRedraw-Eigenschaft eines Bildfeldes den Wert True hat, speichert Visual Basic nur den sichtbaren Teil des Bildfeldes im Speicher. Dies ist möglich, da die Größe der Leinwand, die zum Speichern des Inhalts des Bildfeldes verwen­det wird, dieselbe Größe hat wie das Bildfeld. Grafiken, die über den Rand des Bildfeldes hinausragen, werden abgeschnitten und nicht wieder angezeigt, auch wenn sich die Größe des Bildfeldes ändert.

Verwenden von unbeständigen Grafiken

Um Speicherplatz zu sparen, kann AutoRedraw für das Formular und alle zugehörigen Bildfelder auf False gesetzt werden. In diesem Fall sind die Grafiken jedoch nicht automatisch beständig: Für alle Grafiken, die erneut ausgegeben werden sollen, muss entsprechender Code geschrieben werden.

Sie können bei Bedarf im Paint-Ereignis eines Formulars oder eines Bildfeldes Code schreiben, der alle Linien, Kreise und Punkte neu zeichnet. Dies funktioniert in der Regel am besten, wenn Sie nur wenige Grafiken verwenden, die einfach neu konstruiert werden können.

Eine Paint-Ereignisprozedur wird aufgerufen, sobald ein Teil eines Formulars oder eines Bildfeldes neu ausgegeben werden muss (wenn beispielsweise ein Fenster, das ein Objekt verdeckt hat, verschoben wird, oder wenn durch eine Größenänderung eine verdeckte Grafik wieder angezeigt wird). Wenn AutoRedraw den Wert True hat, wird die Paint-Prozedur eines Objekts nie aufgerufen, es sei denn, Ihre Anwendung ruft sie explizit auf. Der sichtbare Teil des Objekts wird auf der Speicherleinwand abgelegt, so dass das Paint-Ereignis nicht benötigt wird.

Die Verwendung von unbeständigen Grafiken kann Auswirkungen auf die Ausgabe von Grafiken im Formular oder im Container haben. In den Abschnitten "Bildausschnitte mit ClipControls" und "Schichtenweises Anzeigen von Grafiken mit AutoRedraw und ClipControls" werden weitere Faktoren behandelt, die das Verwenden von unbeständigen oder beständigen Grafiken bestimmen.

Ändern von AutoRedraw zur Laufzeit

Die Einstellung von AutoRedraw kann zur Laufzeit geändert werden. Wenn AutoRedraw den Wert False hat, werden Grafiken und Ausgaben der Print-Methode nicht in den Speicher geschrieben, sondern nur auf dem Bildschirm angezeigt. Wenn Sie das Objekt mit der Cls-Methode löschen, werden die Ausgaben nicht gelöscht, die geschrieben wurden, als AutoRedraw den Wert True hatte. Diese Ausgaben bleiben im Speicher erhalten und werden erst gelöscht, wenn AutoRedraw wieder auf True gesetzt und anschließend erneut die Cls-Methode verwendet wird.

Bildausschnitte mit ClipControls

Alle Formulare, Bildfelder und Rahmen-Steuerelemente haben eine ClipControls-Eigenschaft. ClipControls ist eine Boolean-Eigenschaft, die, wenn sie den Wert True hat, den Container veranlasst, einen Bildausschnitt zu definieren, wenn der Container als Rahmen um alle Steuerelemente ausgegeben wird. Davon sind jedoch die folgenden Steuerelemente ausgenommen:

·     Figur-Steuerelemente                                                          ·     Bezeichnungsfelder

·     Linien-Steuerelemente                                                        ·     Grafische ActiveX-Steuerelemente

·     Anzeige-Steuerelemente

Wenn Sie die ClipControls-Eigenschaft auf False setzen, können Sie Bildschirmausgaben beschleunigen. Die größte Beschleunigung ergibt sich für Formulare mit vielen Steuerelementen, die sich nicht überlappen (zum Beispiel Dialogfelder).

Ausschneiden von Bildbereichen

Ausschneiden heißt festlegen, welche Teile von Formularen oder Containern aus­gegeben werden, wenn das Formular oder der Container angezeigt wird. Die Kontur, anhand derer die auszugebenden oder "auszuschneidenden" Teile von Formularen oder Containern bestimmt werden, definiert den Bildausschnitt für dieses Formular oder diesen Container. Bildausschnitte sind hilfreich, wenn eine Anwendung unter Windows einen Teil der Anzeige speichern und gleichzeitig den verbleibenden Teil neu ausgeben muss.

Formular- und Container-Ausschnitte

Die Standardeinstellung der ClipControls-Eigenschaft ist True. Wenn ClipControls den Wert True hat, definiert Windows einen Bildausschnitt für den Hintergrund des Formulars oder des Containers, bevor ein Paint-Ereignis eintritt. Dieser Bildausschnitt umgibt alle nichtgrafischen Steuerelemente. Bei der Verwendung von ClipControls verhalten sich Bezeichnungsfelder wie grafische Steuerelemente.

Während eines Paint-Ereignisses zeichnet Windows nur den Hintergrund innerhalb des Bildausschnitts neu, wobei die nichtgrafischen Steuerelemente übergangen werden. Abbildung 44 zeigt ein Formular mit vier Steuerelementen, ein mit der Line-Methode gezeichnetes Kästchen sowie den Bildausschnitt dieses Formulars, der durch Setzen von ClipControls auf True erstellt wurde. Das im Hintergrund mit der Line-Methode erstellte Kästchen wird nur im Bildausschnitt ausgegeben.

Abbildung 44:   Bildausschnitt, der erstellt wird, wenn ClipControls den Wert True hat

Wenn ClipControls den Wert False hat, definiert Windows vor dem Eintreten eines Paint-Ereignisses keinen Bildausschnitt für den Hintergrund des Formulars oder Containers. Außerdem erscheinen Ausgaben von Grafikmethoden innerhalb des Paint-Ereignisses nur in den Formular- oder Containerbereichen, die neu ausgegeben werden müssen. Da das Berechnen und Verwalten von Bildausschnitten Zeit in Anspruch nimmt, können Formulare mit vielen sich nicht überlappenden Steuer­elementen (beispielsweise komplexe Dialogfelder) schneller angezeigt werden, wenn ClipControls den Wert False hat.

Anmerkung   Vermeiden Sie es, Steuerelemente, deren ClipControls-Wert auf True gesetzt ist, in Steuerelemenete einzubetten, deren ClipControls-Wert False ist. Die eingebetteten Steuerelemente geben die neu ausgegebenen Bilder möglicherweise nicht richtig aus. Diesen Fehler können Sie beheben, indem Sie ClipControls für die Container und die Steuerelemente auf True setzen.

Schichtenweises Anzeigen von Grafiken mit AutoRedraw und ClipControls

Verschiedene Kombinationen von AutoRedraw und ClipControls haben unterschiedliche Auswirkungen auf die Art und Weise, wie Steuerelemente und Grafikmethoden am Bildschirm ausgegeben werden.

Beim Erstellen von Grafiken sollten Sie bedenken, dass grafische Steuerelemente und Bezeichnungsfelder, nichtgrafische Steuerelemente und Grafikmethoden auf unter­schiedlichen Ebenen in einem Container erscheinen. Das Verhalten der einzelnen Schichten hängt von drei Faktoren ab:

·     Der AutoRedraw-Einstellung.

·     Der ClipControls-Einstellung.

·     Der Position der Grafikmethoden, innerhalb oder außerhalb des Paint-Ereignisses.

Normale Schichtung

Normalerweise werden die Schichten in Formularen oder anderen Containern folgendermaßen von vorne nach hinten angeordnet:

Schicht

Inhalt

Vorne

Nichtgrafische Steuerelemente wie Befehlsschaltflächen, Kontrollkästchen oder Datei-Steuerelemente.

Mitte

Grafische Steuerelemente und Bezeichnungsfelder.

Hinten

Ausgabebereich für das Formular oder den Container. Hier erscheinen die Ausgaben von Grafikmethoden.

Alle in einer Ebene angezeigten Elemente verdecken die dahinterliegende Schicht. Die mit den grafischen Steuerelementen erstellten Grafiken erscheinen daher hinter den anderen Steuerelementen im Formular, und alle mit Grafikmethoden erstellten Grafiken erscheinen hinter allen grafischen und nichtgrafischen Steuerelementen. Die normale Anordnung der Schichten wird in Abbildung 45 dargestellt.

Abbildung 45:   Normale Anordnung von Grafiken in Schichten in einem Formular

Auswirkungen auf die Anordnung in Schichten

Die normale Anordnung in Schichten kann durch mehrere Vorgehensweisen erreicht werden. Das Kombinieren von AutoRedraw und ClipControls-Einstellungen sowie das Positionieren von Grafikmethoden innerhalb oder außerhalb des Paint-Ereignisses wirken sich auf die Schichtung und Ausführungsgeschwindigkeit der Anwendung aus.

Die folgende Tabelle zeigt die Auswirkungen, die durch verschiedene Kombinationen von AutoRedraw und ClipControls und der Positionierung von Grafikmethoden Grafikmethoden innerhalb und außerhalb des Paint-Ereignisses erzeugt werden.



AutoRedraw



ClipControls

Grafikmethoden inner-/
außerhalb des Paint-Ereignisses



Schichtung

True

True
(Standard)

Paint-Ereignis
ignoriert

Normale Schichtung.

True

False

Paint-Ereignis
ignoriert

Normale Schichtung. Formulare mit vielen sich nicht über­lap­penden Steuerelementen können schneller ausgegeben werden, da kein Bildausschnitt berechnet oder erstellt werden muss.

False
(Standard)

True
(Standard)

Innerhalb

Normale Schichtung.

False

True

Außerhalb

Nichtgrafische Steuerelemente im Vordergrund. Grafikmethoden und grafische Steuerelemente erschei­nen vermischt in der mittleren und hinteren Schicht. Nicht empfohlen.

False

False

Innerhalb

Normale Schichtung. Wirkt sich nur auf Pixel aus, die zuvor verdeckt wurden oder bei der Größenänderung eines Formulars wieder angezeigt werden.

False

False

Außerhalb

Grafikmethoden und alle Steuer­elemente erscheinen vermischt in allen drei Schichten. Nicht empfohlen.

Auswirkungen von AutoRedraw

Wenn AutoRedraw den Wert True hat, hat dies immer eine normale Schichtung zur Folge. Die Verwendung von AutoRedraw ist zwar das einfachste Verfahren zum schichtenweisen Anordnen von Grafiken, kann aber die Ausführung von Anwendungen mit großen Formularen verlangsamen, da AutoRedraw entsprechend viel Speicher benötigt.

Auswirkungen von ClipControls

Wenn AutoRedraw den Wert True hat, hat die Einstellung von ClipControls keine Auswirkungen auf die Schichtung von Grafiken in Formularen oder Containern. ClipControls kann jedoch Auswirkungen auf die Anzeigegeschwindigkeit von Formularen haben. Wenn ClipControls den Wert False hat, erstellt die Anwendung keinen Bildausschnitt. Da nichts berechnet werden muss und beim Zeichnen keine leeren Bereiche im Bildausschnitt berücksichtigt werden müssen, kann das Formular schneller angezeigt werden.

Wenn sowohl AutoRedraw als auch ClipControls den Wert False haben, werden nur die Pixel in einem Formular oder einem Container neu ausgegeben, die in den folgenden Situationen sichtbar werden:

·     Wenn das Formular oder der Container von einem anderen Fenster verdeckt und dieses Fenster anschließend wieder verschoben wird.

·     Wenn die Größe des Formulars oder des Containers geändert wird.

Auswirkungen des Paint-Ereignisses

Wenn AutoRedraw den Wert False hat, sollten Grafikmethoden innerhalb des Paint-Ereignisses des Formulars oder des Containers eingefügt werden. Dadurch wird erreicht, dass die Ausgaben dieser Methoden in einer bestimmten Reihenfolge erfolgen.

Wenn Grafikmethoden außerhalb von Paint-Ereignissen verwendet werden und AutoRedraw den Wert False hat, kann dies instabile Grafiken zur Folge haben. Sobald die Ausgabe einer Grafikmethode in einem Formular oder einem Container erscheint, können bereits vorhandene Steuerelemente oder Ausgaben von Grafik­methoden verdeckt werden (sofern ClipControls den Wert False hat). Wenn eine Anwendung eine Vielzahl von Grafikmethoden verwendet, um visuelle Effekte zu erzielen, kann die Verwaltung der Ausgabe extrem schwierig werden, es sei denn, alle Methoden befinden sich innerhalb des Paint-Ereignisses.