Beschreibung der Scherzprogrammkomponenten

# Beschreibung der Klassen für Non-VCL-Canvas

In diesem Dokument werden folgende Klassen beschrieben:

Name |  | Kurzbeschreibung
TNVCanvas | wichtig | Non-Vcl-Entsprechung zu TCanvas (Zeichenfunktionen)
TNVPen | wichtig | Non-Vcl-Entsprechung zu TPen (Eigenschaften vom aktuellen Stift)
TNVBrush | wichtig | Non-Vcl-Entsprechung zu TBrush (Eigenschaften vom aktuellen Brush)
TNVFont | wichtig | Non-Vcl-Entsprechung zu TFont (Eigenschaften vom aktuellen Font)
TNVGraphicObject | unwichtig | Klasse die Ereignisse für Änderungen zur Verfügung stellt.
TNVRessourceManager | intern | Ressourcen Manager, der über Hashing Windows Handles verwaltet.
TNVHashClass | intern | Klasse zum Hashen. (Basisklasse von TNVResMan)

## TNVCanvas (in der Unit NVCanvas.pas) (Hierachie: TObject)

Diese Klasse entspricht im wesentlichen der Klasse TCanvas von Delphi, ist allerdings etwas schneller und besitzt mehr Funktionen. Allerdings dürfte TCanvas stabiler sein, da es intensiver getestet wurde.
Da TNVCanvas im wesentlichen ein Wrapper für GDI (Graphics Device Interface, hat nichts mit der GDI aus C&C zu tun :-), ist diese Text teilweise eine Übersetztung aus dem PSDK.

### Methoden

#### procedure Arc(const X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer);
procedure ArcTo(const X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer);

Mit Arc wird mit dem aktuellen Stift ein Kreisbogen gezeichnet, der auf der Peripherie der durch (X1,Y1) (X2,Y2) definierten Ellipse liegt.
Die Zeichnung verläuft gegen den Uhrzeigersinn und folgt vom Anfangs- bis zum Endpunkt der Peripherie der Ellipse. Der Anfangspunkt wird durch den Schnittpunkt der Ellipse mit einer Linie definiert, die durch den Mittelpunkt der Ellipse und durch den Punkt (X3,Y3) führt. Der Endpunkt wird durch den Schnittpunkt der Ellipse mit einer Linie definiert, die durch den Mittelpunkt der Ellipse und durch den Punkt (X4,Y4) führt. ArcTo verhält sich genauso, setzt aber zusätzlich die Stiftposition
Unter W95 dürfen die Summen X1 + X2, Y1 + Y2 und X1 + X2 + Y1 + Y2 nicht größer als 32768 sein.

#### procedure Chord(const X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer);

Mit Chord können Sie einen Umriß erzeugen, der von einem Bogen und einer Linie gebildet wird, die die Endpunkte des Bogens miteinander verbindet. Der Umriß besteht aus dem Teil einer Ellipse, die durch die Koordinaten (X1,Y1) und (X2,Y2) definiert ist. Die Ellipse wird durch eine Line geteilt, die durch die Punkte (X3,Y3) und (X4,Y4) verläuft.
Die Peripherie des Umrisses verläuft gegen den Uhrzeigersinn vom Punkt (X3,Y3) entlang der Ellipse nach (X4,Y4) und als gerade Linie zurück zu (X3,Y3). Wenn die Punkte (X3,Y3) und (X4,Y4) nicht auf der Oberfläche der Ellipse liegen, ergeben sich die Ecken des Umrisses aus den nächstliegenden Schnittpunkten der Peripherie und der Linie. Der Umriß wird mit dem aktuellen Stift gezeichnet und mit dem aktuellen Pinsel gefüllt.

Unter W95 dürfen die Summen X1 + X2, Y1 + Y2 und X1 + X2 + Y1 + Y2 nicht größer als 32768 sein.

#### procedure Circel(const X, Y, RadiusMul2: integer);

Zeichnet einen Kreis um den Punkt (X,Y) mit dem Radius Radius.

#### procedure CopyRect(const dest:TRect;const sourcedc:HDC;const source:TRect;const mode:DWORD);

Kopiert ein Rechteck aus dem angegebenen Rechteck source in der DC sourcedc, in das mit dest angegeben Recteck Die Eigenschaften right, bottom der Rechtecke geben die Höhe bzw. Breite an.
Mode kann folgende Wert annehmen:

Name in windows.pas | Beschreibung
BLACKNESS | Füllt das Zielrechteck mit der Farbe, die in der physikalischen Palette den Index 0 hat. (Normalerweise ist dies schwarz)
CAPTUREBLT | Windows 98/Me, Windows 2000 oder höher: Bezieht jedes Fenster über dem angegebenen mit ein, normalerweise wird nur das angegeben berücksichtigt.
DSTINVERT | Invertiert das Zielrechteck
MERGECOPY | Mischt die Farben im source Rechteck unter Verwendung von dem AND Operator mit der aktuellen Hintergrundfarbe vom Ziel
MERGEPAINT | Mischt die invertierten Farben im source Rechteck unter Verwendung von dem OR Operator mit den Farben im dest Rechteck
NOMIRRORBITMAP | Windows 98/Me, Windows 2000 oder höher: Verhindert das spiegeln
NOTSRCCOPY | Kopiert das invertierte Quellrechteck ins Ziel
NOTSRCERASE | Mischt die Farben vom Quell- und Zielrechteck unter Verwendung von NOR
PATCOPY | Füllt das Zielrechteck mit der Hintergrundfarbe
PATINVERT | Mischt die Farben vom Zielrechteck unter Verwendung von XOR mit der Hintergrundfarbe vom Ziel
PATPAINT | Kombiniert die Hintergrundfarbe im Ziel unter Verwendung des OR-Operators mit den invertierten Farben im Source-Rechteck. Anschließend werden die Ergebnis Farben unter verwendung von OR mit den Farben im Zielrechteck verknüpft
SRCAND | Die Farben im Quell- und Zielrechteck werden unter Verwendung von AND verknüpft. Hiermit und SRCINVERT (sehe da<-) kann Transparents erzeugt werden.
SRCCOPY | Das Quellrechteck wird in das Zielrechteck kopiert.
SRCERASE | Die Farben im Quellrechteck werden mit den invertiertem Farbe im Zielrechteck unter Verwendung von AND verknüpft.
SRCINVERT | Die Farben im Quell- und Zielrechteck werden unter Verwendung von XOR verknüpft. Hiermit und SRCAND kann Transparents erzeugt werden, indem zuerst mit AND eine Maske auf das Ziel kopiert wird, indem alle Pixel, die Überschrieben werden sollen schwarz sind, und alle die unverändert bleiben sollen weiß. Dadurch werden alle zu überschreibenden schwarz. Mit SRCINVERT kann danach dass Bild drauf kopiert werden, bei dem alle zu erhaltenden Pixel schwarz sein müssen. Da eine XOR-Verknüpfung bei schwarzen Zielpixel, die Quellpixel übernimmt, bzw. umgekehrt, wird das neue Bild in die von der Maske geschwärzten Bereiche kopiert, und das alte durch die im neuen Bild geschwärzten Brereiche erhalten.
SRCPAINT | Die Farben im Quell- und Zielrechteck werden unter Verwendung von OR verknüpft
WHITENESS | Füllt das Zielrechteck mit der Farbe, die in der physikalischen Palette den Index 1 hat. (Normalerweise ist dies weiß)

#### procedure DrawFocusRect(const Rect: TRect);

Diese Methode zeichnet ein gestricheltes Recteck, das angibt, dass sich dort aktuell der Focus befindet. Da diese Methode mit dem XOR Operator arbeitet, löscht ein zweiter Aufruf das Rechteck. Mit einem so gezeichneten Rechteck kann kein Bildlauf duchgeführt werden (was auch immer das bedeutet mag, wenn du es weist, kannst du es mir ja schreiben).
Unter Whistler können die Rahmen auch mehrere Pixel breit/hoch sein, dies kann über SystemParametersInfo (und den Parameter SPI_SETFOCUSBORDERWIDTH, SPI_SETFOCUSBORDERHEIGHT, SPI_GETFOCUSBORDERWIDTH und SPI_GETFOCUSBORDERHEIGHT) festgelegt, oder festgestellt werden.

#### procedure DrawText(const str:string;const lpRect:TRect;const uFormat:UINT);

Zeichnet einen Text in dass mit lpRect angegebene Rechteck. Der aktuelle Font kann über die Eigenschaft Font festgelegt werden.
Um unnötige Speicherkopierungen zu vermeiden und den Aufruf zu vereinfachen, wurde lpRect als const deklariert, korrekt wäre aber var, dann wären aber keine Funktionsrückgaben übergebbar, zur Sicherheit, sollte der Parameter immer in einer Variable liegen, tut er es aber nicht, passiert gewöhnlich, mit einer Ausnahme, trotztdem nichts. Bei uFormat können folgende Parameter OR verknüpft werden:

Wert | Beschreibung
--- | ---
DT_BOTTOM | Richtet den Text an der Unterseite des Rechteckes aus. (Funktioniert nur, wenn DT_SINGLELINE gesetzt ist)
DT_CALCRECT | Berechnet die Höhe und Breite des ideal Rechteckes.Wenn mehrere Zeilen übergeben wurden, wird die Breite des Rechteckes benutzt, um den Text umzubrechen. Wurde nur eine übergeben, wird die Breite so gesetzt, dass das letzte Zeichen reinpasst. In beiden Fällen wird die Höhe gesetzt und der Text nicht ausgegeben. Dieser Parameter ist die vorhin erwähnte Ausnahme, da das Rechteck verändert wird, dass heißt, dass in diesem Fall eine Variable übergeben werden muss, oder das Programm stürzt ab.
DT_CENTER | Zentriert den Text im Rechteck
DT_EDITCONTROL | Die Grafikausgabe verhält sich wie ein Memofeld. Das bedeutet, die durchschnittliche Breite wird wie dort berechnet, und eine teilweise sichtbare Line nicht angezeigt.
DT_END_ELLIPSIS | Wenn der das Ende des angezeigten Textes nicht in das Rechteck passt, wird er elliptisch abgetrennt. Ist das Wort nicht am Ende, wird es aber nicht elliptisch abgebrochen. Wenn das DT_MODIFYSTRING Flag nicht gesetzt ist, wird der String nicht verändert. Siehe auch DT_PATH_ELLIPSIS und DT_WORD_ELLIPSIS.
DT_EXPANDTABS | Vergrößert Tab Zeichen. Standardmäßig werden 8 Zeichen eingesetzt. Dieses Flag schließt DT_WORD_ELLIPSIS, DT_PATH_ELLIPSIS, und DT_END_ELLIPSIS aus.
DT_EXTERNALLEADING | Vergrößert die Zeilenhöhe so, dass aus Zeilen raus reichenden Buchstabenecken (wie der Bogen bei "g") mit einberechnet werden. Dies ist normalerweise nicht der Fall.
DT_HIDEPREFIX | Windows 2000 oder höher: Ignoriert das Ampersand (Zeichen &) Prefix Zeichen im Text. Der folgende Buchstabe wird nicht unterstrichen, aber andere Prefixzeichen werden noch verarbeitet:
    Eingabe:         "A&bc&&d"
    Normal:          "Abc&d"
    DT_HIDEPREFIX:   "Abc&d"
Siehe auch DT_NOPREFIX und DT_PREFIXONLY.
DT_INTERNAL | Benutzt den Standardfont um die Textgröße zu berechnen
DT_LEFT | Richtet den Text nach links aus.
DT_MODIFYSTRING | Verändert den Text, um ihn ihn dem angezeigten anzuzeigen. Wenn nicht DT_END_ELLIPSIS oder DT_PATH_ELLIPSIS gesetzt ist, wird dieses Flag ignoriert.
DT_NOCLIP | Zeichnet ohne den Text abzuschneiden. DrawText ist dann ein bisschen schneller.
DT_NOFULLWIDTHCHARBREAK | Windows 98/Me, Windows 2000 or later: Verhindert einen Zeilenumbruch an einem DBCS (double-wide character string), so dass die Zeilenumbruchsregel wie bei SBCS Strings ist. Dies kann zum Beispiel in koreanischen Fenstern benutzt werden um die Iconlabels besser lesen zu können. Wenn DT_WORDBREAK nicht gesetzt wird, wird es ignotiert
DT_NOPREFIX | Schaltet die Verarbeitung von Prefix zeichen aus. Normallerweise, DrawText interpretiert das Symbolzeichen & als Befehl das nächste Zeichen zu unterstreichen, und das Zeichen && als Befehl ein & anzuzeigen. DT_NOPREFIX schaltet dies ab:
    Eingabe:        "A&bc&&d"
    Normal:         "Abc&d"
    DT_NOPREFIX:    "A&bc&&d"
Siehe auch DT_HIDEPREFIX und DT_PREFIXONLY.
DT_PATH_ELLIPSIS | Schneidet den dargestellten Text in der Mitte ellipsenförmig ab, so dass er in das Rechteck passt. Enthält der String Backslashs (\), DT_PATH_ELLIPSIS versucht soviel wie möglich vom Text hinter dem letzten Backslash zu erhalten. Wenn DT_MODIFYSTRING nicht gesetzt ist, wird der Text nicht verändert Siehe auch DT_END_ELLIPSIS und DT_WORD_ELLIPSIS.
DT_PREFIXONLY | Windows 2000 oder höher: Zeichnet nur einen Unterstrich an der Position, wo ein Zeichen von einem & gefolgt wird und nichts anderes:
    Eingabe:         "A&bc&&d"
    Normal:          "Abc&d"
    DT_PREFIXONLY:   " _   "
Siehe auch DT_HIDEPREFIX und DT_NOPREFIX.
DT_RIGHT | Richtet den Text rechtsbündig aus
DT_RTLREADING | Setzt den Text in Leserichtung von rechts nach links, wenn der aktuelle Font Hebräisch oder Arabisch ist. Der Standardmodus ist links nach rechts.
DT_SINGLELINE | Zeichnet den Text als eine einzige Linie, Zeilen umbrüche werden nicht berechnet.
DT_TABSTOP | Setzt die Tabstops. Die Bits 15 bis 8 (höchstes Byte des niedrigsten Words) von uFormat bestimmt die Anzahl Leerzeichen pro Tabstop. Der Standardwert ist 8. Die Flags DT_CALCRECT, DT_EXTERNALLEADING, DT_INTERNAL, DT_NOCLIP, und DT_NOPREFIX können mit diesem nicht genutzt werden.
DT_TOP | Richtet den Text an der Oberkante des Rechteckes aus.
DT_VCENTER | Zentriert den Text vertikal. Das geht nur wenn DT_SINGLELINE gesetzt ist.
DT_WORDBREAK | Bricht Worte um. Die Zeilen werden automatisch umgebrochen, wenn ein Wort außerhalb des Rechteckes kommen würde.
DT_WORD_ELLIPSIS | Schneidet die Worte, die nicht in das Rechteck passen ellipsenförmig um. Siehe auch DT_END_ELLIPSIS und DT_PATH_ELLIPSIS.

#### procedure DrawTextEx(const str:string;const lpRect:TRect;const uFormat:UINT;lpDTParams:TDrawTextParams);

Wie DrawText, nimmt aber zusätzlich noch einen Parameter vom Typ TDrawTextParams an. Dieser Record enthält folgende Felder:

Name | Beschreibung
cbSize | Länge der Struktur, wird automatisch gesetzt
iTabLength | Länge eine Tabstopes
iLeftMargin | Linker Seitenrand in durschnittlichenZeichenbreiten
iRightMargin | Rechter Seitenrand in durschnittlichenZeichenbreiten
uiLengthDrawn | Gibt die Länge des angezeigten Textes zurück. (entweder die Tetxlänge, oder den Index der letzten rausgefallenen Textzeile, laut PSDK)

#### procedure Ellipse(const X1, Y1, X2, Y2: integer);

Zeichnet eine Ellipse in ein Rechteck, das am Punkt (X1, Y1) beginnt und bis zum Punkt (X2, Y2) geht.
Unter W95 dürfen die Summen X1 + X2, Y1 + Y2 und X1 + X2 + Y1 + Y2 nicht größer als 32768 sein.procedure PolyBezier(const Points: array of TPoint);procedure FillRect(const Rect: TRect);

Füllt das angebene Rechteck.

#### procedure FloodFill(const X, Y: Integer; const Color: ColorRef; const FillTyp: integer);

Füllt den Bereich um den Punkt (X,Y) mit der aktuellen Hintergrundfarbe(wird über brush gesetzt). Wie der Bereich definiert ist, wird vonn FillTyp festgelegt.

Value | Meaning
--- | ---
FLOODFILLBORDER | Der zu füllende Bereich ist umgegrenzt, mit der in Color angegeben Farbe.
FLOODFILLSURFACE | Der zu füllende Bereich ist der gesamte Bereich, der die Farbe Color hat.

#### procedure FrameRect(const Rect: TRect);

Zeichnet einen Rahmen, dessen Aussehen vom aktuellen Stift festgelegt wird, um das in rect angebene Rechteck.

#### procedure LineTo(const X, Y: Integer);

Verschiebt den Zeichenstift, an den Punkt (X,Y)

#### procedure MoveTo(const X, Y: Integer);

Verschiebt den Zeichenstift, an den Punkt (X,Y), und zeichnet dabei eine Linie

#### procedure Pie(const X1, Y1, X2, Y2, X3, Y3, X4, Y4: Longint);

Diese Methode zeichnet einen Torten ähnlichen Umriß. Der Umriß wird aus der, in dem durch die Punkte (X1, Y1) und (X2, Y2) definiertem Recteck, befindlichen Ellipse ausgeschnitten. Begrenzt wird es durch zwei Linien, die durch den Mittelpunkt und die Punkte (X3, Y3) und (X4, Y4) gehen.
Unter W95 dürfen die Summen X1 + X2, Y1 + Y2 und X1 + X2 + Y1 + Y2 nicht größer als 32768 sein.

#### procedure PolyBezier(const Points: array of TPoint);
procedure PolyBezierTo(const Points: array of TPoint);

Zeichnet mit dem aktuellen Stift kubische Bezierkurven, deren Punkte mit dem Array Points festgelegt werden. Die erste Kurve wird vom ersten Punkt zum vierten gezeichnet, wobei die Punkte 2 und 3 Steuerpunkte darstellen. Für die nächsten Kurven sind dann immer drei Punkte zuständig, zwei Steuerpunkte und ein Endpunkt, wobei als Startpunkt der Endpunkt der vorherigen Kurve genommen wird.

#### procedure PolyDraw(const Points:array of TPoint;const Types:array of byte);

Zeichnet mehrere Liniensegmente und Bezierkurven.
Mit dem Points-Array werden die jeweiligen Punkt festgelegt, die Art der Punkte wird über Types festgelegt. Für jedem Punkt muss es einen Eintrag im Types-Array mit dem selben Index geben. Ein Types-Eintrag kann dabei eine der folgenden Konstanten enthalten:

Type | Meaning
--- | ---
PT_MOVETO | Verschiebt den Zeichenstift zum jeweiligen Punkt
PT_LINETO | Zeichnet eine Line von der aktuellen Zeichenstiftposition zum jeweiligen Punkt, und verschiebt die Position.
PT_BEZIERTO | Gibt an, dass der Punkt zu einer Bezierkurve gehört. PT_BEZIERTO Typen treten immer in dreier Gruppen auf. Die aktuelle Zeichenposition gibt den Startpunkt an, die ersten beiden PT_BEZIERTO Punkte legen die Steuerpunkte fest und der dritte Punkt gibt den Endpunkt an.

Zu PT_LINETO oder PT_BEZIERTO kann der Parameter PT_CLOSEFIGURE angegeben werden, der bewirkt, das die Figur automatisch geschlossen wird.

#### procedure Polygon(const Points: array of TPoint);

Zeichnet ein Polygon, das von den im Array Points angegebenen Punkten umschlossen wird. Die Randlinien werden mit dem aktuellen Stift gezeichnet, und die Innenfläche mit dem aktuellen Hintergrund gefüllt.

#### procedure Polyline(const Points: array of TPoint);

Zeichnet ein Polygon, das von den im Array Points angegebenen Punkten umschlossen wird, ohne es zu füllen. Die Randlinien werden mit dem aktuellen Stift gezeichnet.

#### procedure Rectangle(const x1,y1,x2,y2:integer);

Zeichnet und füllt ein Rechteck, dessen obere linke Ecke der Punkt (x1,y1) ist und die untere rechte Ecke der Punkt (x2,y2) ist.

#### procedure RoundRect(const X1, Y1, X2, Y2, X3, Y3: Integer);

Zeichnet und füllt ein rundes Rechteck, dessen obere linke Ecke der Punkt (x1,y1) ist und die untere rechte Ecke der Punkt (x2,y2) ist. Die Parameter X3 und Y3 geben die Größe der Ellipse an, mit der die Ecken des Rechteckes gerundet werden.

#### function TextExtent(const Text: string): TSize;

Liefert die Höhe und Breite des angebenen Strings zurück.

#### procedure TextOut(const X, Y: Integer; const Text: string);

Zeichnet an den Punkt (X,Y) den angebenen Text. Die Textfarbe ist die aktuelle Stiftfarbe.

#### procedure TextRect(const Rect: TRect; const X, Y: Integer; const Text: string);

Zeichnet an den Punkt (X,Y) den angebenen Text, begrenzt aber die Ausgabe aufs angebenen Rechteck. Die Textfarbe ist die aktuelle Stiftfarbe.

#### function TextHeight(const Text: string): Integer;

Liefert die Höhe des angebenen Strings zurück.

#### function TextWidth(const Text: string): Integer;

Liefert die Breite des angebenen Strings zurück.

### Eigenschaften

#### property Handle:HDC read F_Handle write SetHandle;

Gibt den Device Context an, mit dem der Canvas momentan verknüpft ist.

#### property PenPos:TPoint read GetPenPos write SetPenPos;

Gibt die Position des Zeichenstiftes an. Ein setzten hat die gleiche Wirkung wie ein Aufruf von MoveTo.

#### property BackgroundTransparent:boolean read BgTransparent write SetBgTransparent;

Gibt an, ob bei Textausgabe, der Hintergrund überschrieben werden soll.

#### property Brush:TNVBrush read F_Brush write SetBrush;

Gibt den Hintergrundpinsel an.

#### property pen:TNVpen read F_pen write Setpen;

Gibt den aktuellen Stift an und, anders als bei GDI, auch die Textfarbe.

#### property Font:TNVFont read F_Font write SetFont;

Legt den aktuellen Font fest.

## TNVPen (in der Unit NVCanvas.pas) (Hierachie: TNVGraphicObject->TObject)

Eine Klasse die das Aussehen des aktuellen Zeichenstiftes steuert.

### Methoden

#### procedure Assign(newPen:TNVPen);

Übernimmt sämtliche Eigenschaften des übergebenden Stiftes. Dabei wird auch das Handle des Stiftes übernommen, und der Referenzcounter im Ressourcenmanager für das Handle um eins erhöht.

### Eigenschaften

#### property Style:INT read GetStyle write SetStyle;

Gibt das Aussehen des Stiftes an. Der Wert kann einer der folgenden Konstanten sein:

Value | Meaning
--- | ---
PS_SOLID | Der Stift ist durchgehend.
PS_DASH | Der Stift ist gestrichelt. Funktioniert leider nur, wenn die Breite 1 ist.
PS_DOT | Der Stift ist gepunktet. Funktioniert ebenfalls nur, wenn die Breite 1 ist.
PS_DASHDOT | Der Stift ist abwechselnd gepunktet und gestrichelt. Funktioniert nur, wenn die Breite 1 ist.
PS_DASHDOTDOT | Der Stift hat abwechselnd einen Strich und zwei Punkte. Funktioniert nur, wenn die Breite 1 ist.
PS_NULL | Der Stift ist unsichtbar.
PS_INSIDEFRAME | Der Stift ist durchgehend. Wenn diese Stift mit einer Funktion verwendet wird, die Umgebungsrechtecke unterstützt, wird dies Figur geschrumpft, so dass sie in das Rechteck passt.

#### property Width:int read GetWidth write SetWidth;

Gibt die Breite des Stiftes an.

#### property Color:COLORREF read GetColor write SetColor;

Gibt die Farbe des Stiftes an.

#### property Handle:HPen read F_handle;

Liefert ein Handle auf einen Windows Pen (eng. Stift) zurück. Bei jeder Änderung einer Eigenschaft wird dieses Handle neuerzeugt.

## TNVBrush (in der Unit NVCanvas.pas) (Hierachie: TNVGraphicObject->TObject)

Eine Klasse die das Aussehen des aktuellen "Füllpinsels" steuert.

### Methoden

#### procedure Assign(newBrush:TNVBrush);

Übernimmt sämtliche Eigenschaften des übergebenden Pinsels. Dabei wird auch das Handle des Stiftes übernommen, und der Referenzcounter im Ressourcenmanager für das Handle um eins erhöht.

### Eigenschaften

#### property Style:UINT read GetStyle write SetStyle;

Gibt das Aussehen des Pinsels an, kann eine der Konstanten sein:

Value | Meaning
--- | ---
BS_DIBPATTERN | Der Pinsel füllt mit einem DIB (Gerät unabhängiges Bitmap), ein Handle zum Bild wird in der Hatch-Eigenschaft angegeben. Windows 95: Wenn das Bild größer als 8 x 8 ist, wird es abgeschnitten.
BS_DIBPATTERN8X8 | Wie BS_DIBPATTERN
BS_DIBPATTERNPT | Der Pinsel füllt mit einem DIB (Gerät unabhängiges Bitmap), ein Pointer zum Bild wird in der Hatch-Eigenschaft angegeben.
BS_HATCHED | Gemusterter Pinsel
BS_HOLLOW | Unsichtbarer Pinsel
BS_NULL | Wie BS_HOLLOW.
BS_PATTERN | Der Pinsel füllt mit einem Memory Bitmap.
BS_PATTERN8X8 | Wie BS_PATTERN.
BS_SOLID | Durchgehender Pinsel

#### property Color:COLORREF read GetColor write SetColor;

Wenn Style den Wert BS_SOLID, oder BS_HATCHED hat, gibt diese Eigenschaft die Farbe des Pinsels an.

Wenn Style den Wert BS_DIBPATTERN oder BS_DIBPATTERNNPT hat, muss Color eine der beiden Konstanten sein:

Value | Meaning
--- | ---
DIB_PAL_COLORS | Die Farbtabelle enthält ein Array von 16 Bit Indexen zur aktuellen logischen Palette.
DIB_RGB_COLORS | Die Farbtabelle enthält echte RGB Werte.

#### property Hatch:long read GetHatch write SetHatch;

Spezifiziert das Muster. Je nach Wert der Style-Eigenschaft, hat dieser Wert eine andere Bedeutung:

Wenn Style BS_DIBPATTERN ist, enthält Hatch ein Handle auf ein gepacktes DIB. (wird durch GlobalAlloc erzeugt)

Wenn Style BS_DIBPATTERNPT ist, enthält Hatch einen Pointer auf ein gepacktes DIB (wird durch LocalAlloc erzeugt)

Wenn Style BS_PATTER ist, enthält Hatch ein Handle auf ein Bitmap

Wenn Style BS_HATCHED ist, kann Hatch eine der folgenden Konstanten sein:

Value | Meaning
--- | ---
HS_BDIAGONAL | Um 45° nach oben geboge Linien.
HS_CROSS | Sich überschneidende Horizontale und vertikale Linien
HS_DIAGCROSS | Sich überschneidende, um 45° gedrehte Linien
HS_FDIAGONAL | Um 45° nach unten geboge Linien.
HS_HORIZONTAL | Horizontale Linien
HS_VERTICAL | Vertikale Linien

#### property Handle:Hbrush read F_handle;

Handle zu einem Windows Brush.

## TNVFont (in der Unit NVCanvas.pas) (Hierachie: TNVGraphicObject->TObject)

### Methoden

#### procedure Assign(newFont:TNVFont);

Übernimmt sämtliche Eigenschaften des übergebenden Fontes. Dabei wird auch das Handle des Stiftes übernommen, und der Referenzcounter im Ressourcenmanager für das Handle um eins erhöht.

### Eigenschaften

#### property height:long read GetHeight write SetHeight;

Gibt die Höhe der Buchstaben im zu erstellendem Fonts in logischen Einheiten an.
Wenn der Wert >0 ist, wird der Wert an die Zellenhöhe der verfügbaren Fonts angepasst.
Wenn er 0 ist, wird die Standardhöhe benutzt.
Wenn er <0 ist, wird der Wert an die Buchstabenhöhe angepasst.

#### property Width:long read GetWidth write SetWidth;

Bestimmt die Buchstabenbreite.
Wenn der Wert 0 ist, wird die Standardbreite genommen.

#### property Angle:long read GetAngle write SetAngle;

Legt den Drehwinkel in Grad fest.

#### property Weight:long read GetWeight write SetWeight;

Legt den Fettgrad im Bereich von 0 bis 1000 fest. Z. B.: 400 ist normal und 700 ist fett.

#### property Style:TNVFontStyle read GetStyle write SetStyle;

In diesem Set können folgende Werte verwendet werden:

Name | Beschreibung
nvfsItalic | Kursiv
nvfsStrikeOut | Durchgestrichen
nvfsUnderline | Unterstrichen

#### property CharSet:byte read GetCharSet write SetCharSet;

Legt die Zeichengruppe fest. Es gibt folgende Werte:

ANSI_CHARSET
BALTIC_CHARSET
CHINESEBIG5_CHARSET
DEFAULT_CHARSET
EASTEUROPE_CHARSET
GB2312_CHARSET
GREEK_CHARSET
HANGUL_CHARSET
MAC_CHARSET
OEM_CHARSET
RUSSIAN_CHARSET
SHIFTJIS_CHARSET
SYMBOL_CHARSET
TURKISH_CHARSET

#### property OutPrecision:byte read GetOutPrecision write SetOutPrecision;

Legt die Ausgabegenauigkeit fest:

Wert | Beschreibung
--- | ---
OUT_CHARACTER_PRECIS | Nicht benutzt
OUT_DEFAULT_PRECIS | Es soll die Standardgenauigkeit benutzt werden.
OUT_DEVICE_PRECIS | Der Font Mapper soll einen Device Font nehmen, wenn es mehrere Fonts mit dem selben Namen gibt,
OUT_OUTLINE_PRECIS | Windows NT/2000 oder höher: Der Font Mapper soll True Type oder andere Kontur Fonts nehmen
OUT_RASTER_PRECIS | Der Font Mapper soll einen Raster (Pixel) Font nehmen, wenn mehrere Fonts mit dem selben Namen vorhanden sind.
OUT_STRING_PRECIS | Dieser Wert wird nicht für den Font Mapper verwendet, sondern wird zurückgegeben, wenn Raster Fonts enumeriert wurden.
OUT_STROKE_PRECIS | Windows NT/2000 oder höher: Dieser Wert wird nicht vom Font Mapper verwendet, sondern zurückgegeben, wenn True Type, Konturfonts, oder Vektorfonts enumeriert wurden. Windows 95/98/Me: Der Wert wird bei Kartenvektorfonts benutzt, und wird zurückgegeben, wenn True Type, oder Vektorfonts enumeriert wurden.
OUT_TT_ONLY_PRECIS | Der Fontmapper soll nur True Type Fonts nehmen, und wenn es keinen mit dem angegebenen Namen gibt, soll er den Standardfont nehmen.
OUT_TT_PRECIS | Der Font Mapper soll True Type Fonts nehmen, wenn es mehrere mit dem selben Namen gibt.

#### property ClipPrecision:byte read GetClipPrecision write SetClipPrecision;

Bestimmt die Clipgenauigkeit:

Name | Beschreibung
--- | ---
CLIP_DEFAULT_PRECIS | Es soll die Standardgenauigkeit genommen werden
CLIP_CHARACTER_PRECIS | Unbenutzt
CLIP_STROKE_PRECIS | Nicht vom Font Mapper benutzt, sondern wird zurückgegeben wenn Rasterfonts, True Type Fonts, oder Vektorfonts enumeriert wurden. Windows NT/2000 oder höher: Aus Kompatibilitätsgründen, wird es immer zurückgegeben
CLIP_MASK | Unbenutzt
CLIP_EMBEDDED | Dieses Flag muss bei eingebetten Nur-Lese Fonts gesetzt sein
CLIP_LH_ANGLES | Gibt an, ob die Rotation von der Systemrotationsrichtung abhängt. Wenn es nicht gesetzt ist, werden Device Fonbts immer gegen den Urzeiger gedreht, aber die Rotation anderer Fonts hängt vomn System ab.
CLIP_TT_ALWAYS | Unbenutzt

#### property Quality:byte read GetQuality write SetQuality;

Legt die Ausgabequalität fest:

Wert | Beschreibung
--- | ---
ANTIALIASED_QUALITY | Windows NT 4.0 und höher: Der Font wird antialiased, oder geglättet, dargestellt, wenn der Font es unterstützt, und es nicht zu klein oder groß ist. Windows 95 with Plus! und höher: Wie bei NT, aber der Bildschirm muss mehr als eine 8-Bit Farbtiefe haben, es muss ein flaches Devices sein und darf nicht zu mehreren Bildschirmen gehören.
CLEARTYPE_QUALITY | Whistler: Wenn es möglich ist, wird der Text mit Cleartype gerendert
DEFAULT_QUALITY | Das Aussehen ist unwichtig
DRAFT_QUALITY | Das Aussehen ist nicht so wichtig wie bei PROOF_QUALITY. GDI Raster Fonts werden skaliert (dadurch stehen mehr Größen zur Verfügung, aber die Qualität sinkt). Fette, kursive, unterstrichene oder durchgestrichene Fonts werden simuliert, wenn es nötig ist.
NONANTIALIASED_QUALITY | Windows 95 mit Plus!, Windows 98, Windows NT 4.0, und Windows 2000 oder höher: Der Font wird niemals geglättet.
PROOF_QUALITY | Die Qualität ist wichtiger, als die genaue Umsetztung. GDI Raster Fonts werden nicht skaliert (dadurch stehen weniger Größen zur Verfügung, aber die Qualität steigt). Fette, kursive, unterstrichene oder durchgestrichene Fonts werden simuliert, wenn es nötig ist.

#### property PitchAndFamily:byte read GetPitchAndFamily write SetPitchAndFamily;

Die beiden niedrigen Bits legen die Zeichenhöhe fest und können eines der Konstanten sein:

- DEFAULT_PITCH
- FIXED_PITCH
- VARIABLE_PITCH

Die vier höchstwertigesten Bits legen die Familie fest:

Wert | Beschreibung
--- | ---
FF_DECORATIVE | Seltsame Fonts. Z. B.: Altes Englisch (vielleicht auch altes Deutsch)
FF_DONTCARE | Familie egal
FF_MODERN | Fonts mit fester Zeichenbreite, mit oder ohne Serifen, z.B.: Pica, Elite, und Courier New
FF_ROMAN | Fonts mit unterschiedlicher Zeichenbreite und mit Serifen, z.B.: MS Serif
FF_SCRIPT | Fonts die aussehen wie Handschrift, z.B.: Script und Cursive
FF_SWISS | Fonts mit unterschiedlicher Zeichenbreite und ohne Serifen, z.B.: MS Sans Serif

#### property FaceName:TString32 read GetFaceName write SetFaceName;

Name des Fonts

#### property Color:COLORREF read F_color write SetColor;

Farbe des Fontes

#### property Handle:HFONT read F_handle;

Window Handle des Fontes

## TNVGraphicObject (in der Unit NVCanvas.pas) (Hierachie: TObject)

Klasse die zwei Ereignisse OnChange und OnChanging zur Verfügung stellt. Sie wird von TNVCanvas benutzt, und ist die Basisklasse für TNVPen, TNVBrush und TNVFont.

## TNVRessourceManager (in der Unit NVResMan.pas) (Hierachie: TNVHashClass->TObject)

Ein Ressourcenmanager, der Windows Handles verwaltet.

### Ereignisse

#### OnDelete:TResDeleteProc;

Wird aufgerufen, wenn eine Ressource freigeben werden soll.

### Methoden

#### procedure DeleteRes(const id:THandle);

Verringert den internen Referenz Zähler für das Handle, und ruft OnDelete auf, wenn keine Kopien mehr vorhanden sind

#### procedure GetRes(const id:THandle);

Erhöht den internen Referenz Zähler

## TNVHashClass (in der Unit NVHashClass.pas) (Hierachie: TObject)

Dient zum Hashen von 32-Bit Werten für 32-Bit Ids, und stellt somit in etwa eine immer sortierte Liste da.

### Ereignisse

#### OnGetHash:THashProc;

Wird aufgerufen, um einen Hashwert zu generieren.

### Methoden

#### function GetHashRec(const id:cardinal):PNVHashRec;

Liefert die Daten für eine bestimmte ID.

#### procedure DeleteHashRec(const id:cardinal);

Löscht einen Hashwert für eine bestimmte ID.

#### function InsertHashRec(const id,wert:cardinal):PNVHashRec;

Fügt einen bestimmten Wert für eine ID ein.

Für weiter Fragen/Verbesserungsvorschläge kannst du mir ein Email-Schicken BeniBela@aol.com.