Die Community zu .NET und Classic VB.
Menü

Klasse: Farbverläufe erstellen

 von 

Farbverläufe erstellen  

Diese Klasse kapselt zwei Funktionen, welche eine einfache, lineare Farbverlauf-Funktion bereitstellen. Es wird dazu lediglich die StretchDIBits API benutzt, die Berechnung des Farbverlaufs selbst greift nur auf VB Bordmittel zurück. Erstaunlicherweise ist diese Methode *schneller* als die dafür vorgesehene Gradient-API!

Einfacher Gradient:

Ein einfacher Gradient wird über die Funktion DrawGradient() gezeichnet. Die Funktion erfordert folgende Parameter:

  • Target As Long: ein gültiger Device-Context eines Ausgabeobjekts. Es wird empfohlen, nicht den von VB bereitgestellten Eingenschaftswert hDC zu nehmen, sondern über die Funktion GetDC() jedes Mal einen neuen zu erstellen und danach per ReleaseDC() wieder zu zerstören.
  • lpPosition As Long: einen Pointer zu einer RECT-Strunktur. Die Struktur enthält die Eckkoordinaten des zu bemalenden Bereichs. Bemerkung: VB erlaubt es nicht, UDTs direkt an Klassen zu übergeben, daher muß ein Pointer übergeben werden. Das ist allerdings gar kein Problem, VarPtr() gibt den Pointer zurück.
  • colFrom As OLE_COLOR: Ein Anfangsfarbwert.
  • colTo As OLE_COLOR: Ein Endfarbwert.
  • [Direction As GradientDirection]: optional. Gibt die Richtung (vertikal, horizontal) an, in die der Gradient gezeichnet werden soll. Standard ist horizontal.

Mehrfarb-Gradient:

Ein multicolorer Gradient kann über die Funktion DrawGradientEx() erzeugt werden. Folgende Parameter werden benötigt:

  • Target As Long: ein gültiger Device-Context eines Ausgabeobjekts. Es wird empfohlen, nicht den von VB bereitgestellten Eingenschaftswert hDC zu nehmen, sondern über die Funktion GetDC() jedes Mal einen neuen zu erstellen und danach per ReleaseDC() wieder zu zerstören.
  • lpPosition As Long: einen Pointer zu einer RECT-Strunktur. Die Struktur enthält die Eckkoordinaten des zu bemalenden Bereichs. Bemerkung: VB erlaubt es nicht, UDTs direkt an Klassen zu übergeben, daher muß ein Pointer übergeben werden. Das ist allerdings gar kein Problem, VarPtr() gibt den Pointer zurück.
  • Colors() As OLE_COLOR: Ein eindimensionales, nullbasiertes Array, das eine Anzahl von Farben enthält, die der Gradient durchlaufen soll.
  • [Direction As GradientDirection]: optional. Gibt die Richtung (vertikal, horizontal) an, in die der Gradient gezeichnet werden soll. Standard ist horizontal.


Abbildung 1: Screenshot

Die Zipdatei enthält auch ein Beispielprojekt

Geschrieben wurde die Klasse von

Download cGradient.zip [3090 Bytes]

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Farbverlauf bereits beim Laden eines Forms - Andreas Vogt 06.10.13 21:15 3 Antworten