                                  - TOC-   1 -





 InitVgaMem-Prozedur  (Unit VgaMem) ...................................      1
 VgaMem-Unit ..........................................................      1
 DoneVgaMem-Prozedur  (Unit VgaMem) ...................................      2
 FreeVgaMem-Prozedur  (Unit VgaMem) ...................................      2
 GetVgaMem-Prozedur  (Unit VgaMem) ....................................      2
 TVgaBuf-Typ  (Unit VgaMem) ...........................................      2
 EndBufDraw-Prozedur  (Unit VgaMem) ...................................      3
 PasteRect-Prozedur  (Unit VgaMem) ....................................      3
 PasteRectAt-Prozedur  (Unit VgaMem) ..................................      3
 PrepBuf-Funktion  (Unit VgaMem) ......................................      3
 ReleaseBuf-Prozedur  (Unit VgaMem) ...................................      3
 CopyScreen-Prozedur  (Unit VgaMem) ...................................      4
 GetBPL-Funktion  (Unit VgaMem) .......................................      4
 GetSize-Funktion  (Unit VgaMem) ......................................      4
 RestoreScreen-Prozedur  (Unit VgaMem) ................................      4
 SaveScreen-Prozedur  (Unit VgaMem) ...................................      4
 PutIconAnd16-Prozedur  (Unit VgaMem) .................................      5
 PutIconOr16-Prozedur  (Unit VgaMem) ..................................      5
 CopyImage-Funktion  (Unit VgaMem) ....................................      6
 CutImage-Funktion  (Unit VgaMem) .....................................      6
 FreeImage-Prozedur  (Unit VgaMem) ....................................      6
 GetImageExtent-Prozedur  (Unit VgaMem) ...............................      6
 ImageChunkSize-Variable  (Unit VgaMem) ...............................      6
 LoadImage-Funktion  (Unit VgaMem) ....................................      6
 MaskedImage-Funktion  (Unit VgaMem) ..................................      6
 PasteImage-Prozedur  (Unit VgaMem) ...................................      6
 GetImage-Prozedur  (Unit VgaMem) .....................................      7
 GetImageSize-Funktion ................................................      7
 StoreImage-Prozedur  (Unit VgaMem) ...................................      7
 FreeScreenBuf-Prozedur  (Unit VgaMem) ................................      8
 ImageSize-Funktion  (Unit VgaMem) ....................................      8
 PutImage-Prozedur  (Unit VgaMem) .....................................      8
 StoreScreen-Funktion  (Unit VgaMem) ..................................      8
 TScreenBuf-Typ  (Unit VgaMem) ........................................      8
 DestPage-Variable  (Unit VgaMem) .....................................      9
 DrawScreenBuf-Prozedur  (Unit VgaMem) ................................      9
 DrawScreenBufAt-Prozedur  (Unit VgaMem) ..............................      9
 GetVgaMemCaps-Funktion  (Unit VgaMem) ................................      9
 SourcePage-Variable  (Unit VgaMem) ...................................      9


















                                  - TOC-   1 -
                                    -    1 -






VgaMem-Unit
 

Diese Unit untersttzt bitmap-orientierte Graphikoperationen auf
VGA- und SVGA-Graphikkarten in 16- und 256-Farben-Modi. Diese
Operationen werden auch unter Windows zur Verf"ugung gestellt, und
zwar unabh"angig vom gew"ahlten Graphikmodus.

Die Routinen von VgaMem knnen wie folgt klassifiziert werden:

 Zugriff auf unsichtbaren Restbildspeicher:


VgaMem verwaltet und verwendet Bildspeicher, der jenseits des dargestellten
Bereichs liegt. Dorthin knnen (fr Pufferung) Graphikausgaben
umgeleitet werden (soweit die Graphikpakete dies untersttzen), und
schnelle Kopierroutinen werden angeboten.

 InitVgaMem
 DoneVgaMem
 GetVgaMem
 FreeVgaMem
 PrepBuf
 EndBufDraw
 ReleaseBuf
 PasteRect
 PasteRectAt

 Verallgemeinerte Image-Funktionen:


VgaMem redefiniert alle Image-Funktionen der Unit Graph. Zustzlich
werden verallgemeinerte Funktionen angeboten, die groe (> 64 K) Images
untersttzen und Ihnen lstige Routinearbeiten wie Speicherallokation
und Dateizugriff ersparen.

 CopyImage
 CutImage
 FreeImage
 GetImageExtent
 LoadImage
 MaskedImage
 PasteImage
 StoreImage

 Transparente Speicherung von Bildausschnitten:


VgaMem verfgt ber Routinen, die eine verfahrensunabhngige, transparente
Speicherung von Bildausschnitte gestatten. Dazu werden Restbildspeicher
oder verallgemeinerte Images verwendet.

 StoreScreen
 FreeScreenBuf
 DrawScreenBufAt
 DrawScreenBuf



                   vgamem, Page #   1   Date 9-2-1999 Tuesday
                                    -    2 -






InitVgaMem-Prozedur  (Unit VgaMem)
 
 Deklaration:
procedure InitVgaMem;

Rufen Sie diese Prozedur auf, bevor Sie irgendwelche anderen
Routinen aus VgaMem verwenden.

VgaMem hookt sich in die Graphik-Nachrichtenschlange der Unit Gr.
Sobald die Graphik mit InitGraphics initialisiert wird,
werden die richtigen Low-Level-Prozeduren geladen, und die
Restspeicherverwaltung wird gestartet.

Wenn die Graphik mit CloseGraphics ausgesschaltet wird,
wird die Restspeicherverwaltung automatisch beendet.

DoneVgaMem-Prozedur  (Unit VgaMem)
 
 Deklaration:
procedure DoneVgaMem;

Rufen Sie diese Prozedur am Ende Ihres Programmes auf, um die
Wirkungen von InitVgaMem rckgngig zu machen.

GetVgaMem-Prozedur  (Unit VgaMem)
 
 Deklaration:
function GetVgaMem(Size: Word): Word;

Alloziert Restspeicher der Gre Size (angegeben in
Granularittseinheiten). Das Funktionsergebnis ist ein Handle auf den
allozierten Speicher, welches von den Funktionen SaveScreen
und RestoreScreen erwartet wird.

Wieviel Restspeicher ein Rechteck einer bestimmten Gre bentigt,
knnen Sie mit GetSize ermitteln.

 Siehe auch:

 FreeVgaMem
 PrepBuf

FreeVgaMem-Prozedur  (Unit VgaMem)
 
 Deklaration:
procedure FreeVgaMem(P, Size: Word);

Gibt Restspeicher frei. Verwenden Sie fr P das Handle, das von
GetVgaMem zurckgegeben wurde. Size sollte mit
der dort angegebenen Gre bereinstimmen.

TVgaBuf-Typ  (Unit VgaMem)
 
 Deklaration:

  TVgaBuf = record
    Bounds: TRect;
    Mem: Word;
    Size: Word;
  end;


PrepBuf speichert Verwaltungsdaten fr einen Restspeicherpuffer



                   vgamem, Page #   2   Date 9-2-1999 Tuesday
                                    -    3 -





in einer Variablen dieses Typs ab.

PrepBuf-Funktion  (Unit VgaMem)
 
 Deklaration:
function PrepBuf(var R: TRect; Action: Word; var Buf: TVgaBuf): Boolean;

Diese Funktion versucht, einen Restspeicherpuffer zu allozieren, der
gro genug ist, um das Rechteck R aufzunehmen. Der Rckgabewert
ist TRUE, wenn dies erfolgreich war.

Die Datenstruktur Buf wird mit Verwaltungsdaten gefllt. Sie wird
von Prozeduren wie ReleaseBuf, PasteRect und
PasteRectAt erwartet.

Die aktuellen Graphikparameter der Unit Gr werden derart angepat, da
auf Gr basierende Graphikpakete in den Restspeicherpuffer, nicht auf
den sichtbaren Bildschirm, schreiben.

Whlen Sie Action entsprechend folgender Tabelle:


 Action-Konstante  Beschreibung
   
 pbNone            Puffer verbleibt uninitialisiert.
 pbCopy            Puffer wird durch eine Kopie des angegebenen
                   sichtbaren Bildausschnitts initialisiert.
 pbClear           Puffer wird initialisiert.


 Siehe auch:

 EndBufDraw
 ReleaseBuf
 PasteRect
 PasteRectAt

EndBufDraw-Prozedur  (Unit VgaMem)
 
 Deklaration:
procedure EndBufDraw;

Macht die Wirkungen von PrepBuf auf die Graphikoperationen
rckgngig.

ReleaseBuf-Prozedur  (Unit VgaMem)
 
 Deklaration:
procedure ReleaseBuf(var Buf: TVgaBuf);

Entfernt einen mit PrepBuf angelegten Restspeicherpuffer
aus dem Speicher. Geben Sie in Buf die Datenstruktur an,
die Sie auch PrepBuf bergeben hatten.

PasteRect-Prozedur  (Unit VgaMem)
 
 Deklaration:
procedure PasteRect(var R: TRect; var Buf: TVgaBuf);

Zeichnet das Teilrechteck R aus einem Restspeicherpuffer auf den
sichtbaren Bildschirm. Geben Sie in Buf die Datenstruktur an,
die Sie auch PrepBuf bergeben hatten.




                   vgamem, Page #   3   Date 9-2-1999 Tuesday
                                    -    4 -





PasteRectAt-Prozedur  (Unit VgaMem)
 
 Deklaration:
procedure PasteRectAt(var R: TRect; P: TPoint; var Buf: TVgaBuf);

Zeichnet das Teilrechteck R aus einem Restspeicherpuffer auf den
sichtbaren Bildschirm. Geben Sie in Buf die Datenstruktur an,
die Sie auch PrepBuf bergeben hatten.

Der gesamte Restspeicherpuffer wird zum Punkt P reloziert.

GetSize-Funktion  (Unit VgaMem)
 
 Deklaration:
function GetSize(x1, y1, x2, y2: Integer): Word;

Ermittelt den Restspeicherbedarf des angegebenen Bildausschnitts (in
Granularittseinheiten). Man beachte die Turbo-Vision-Notation des Rechtecks, d.h.
die Koordinaten x2, y2 geben die Zeilen/Spalten an, die gerade nicht
mehr gespeichert werden sollen.

GetBPL-Funktion  (Unit VgaMem)
 
 Deklaration:
function GetBPL(x1, x2: Integer): Word;

Ermittelt den Restspeicherbedarf einer Bildschirmzeile. Man beachte die
Turbo-Vision-Notation, d.h., die Koordinate x2 gibt die Spalte an, die
gerade nicht mehr gespeichert werden soll.

SaveScreen-Prozedur  (Unit VgaMem)
 
 Deklaration:
procedure SaveScreen(x1, y1, x2, y2: Integer; Addr: Word);

Speichert den angegebenen Bildausschnitt (in Turbo-Vision-Notation)
im Restbildspeicher ab. Addr spezifiziert ein Handle auf den
Speicherbereich. Verwenden Sie GetVgaMem, um ein solches
Handle zu erhalten.

SaveScreen beachtet die SourcePage-Variable.

RestoreScreen-Prozedur  (Unit VgaMem)
 
 Deklaration:
procedure RestoreScreen(x1, y1, x2, y2, x3, y3: Integer; Addr: Word);

Stellt einen Bildausschnitt aus dem Restspeicher wieder her.
x1, y1, x2, y2 sind die Koordinaten, die
bei SaveScreen bergeben wurden.
x3, y3 sind die Zielkoordinaten. Addr spezifiziert
ein Handle auf den verwendeten Speicherbereich.

Die Prozedur beachtet das ClipRect der Unit Gr und
schneidet den wiederhergestellten Bildausschnitt an dessen Grenzen ab.
Ferner beachtet die Prozedur die DestPage-Variable.

CopyScreen-Prozedur  (Unit VgaMem)
 
 Deklaration:
procedure CopyScreen(x1, y1, x2, y2, x3, y3: Integer);

Kopiert einen Bildausschnitt direkt. Dabei werden beliebige berlappungen
korrekt behandelt.

x1, y1, x2, y2 sind die Koordinaten des zu kopierenden Rechtecks in



                   vgamem, Page #   4   Date 9-2-1999 Tuesday
                                    -    5 -





Turbo-Vision-Notation. x3, y3 sind die Zielkoordinaten.

Die Prozedur beachtet Gr.ClipRect und arbeitet auf den
durch SourcePage und DestPage angegebenen
Seiten.

PutIconAnd16-Prozedur  (Unit VgaMem)
 
 Deklaration:
procedure PutIconAnd16(x1, y1: Integer; MapMask: Byte; Icon: Pointer);


Diese Prozedur ist nur in 16-Farben-Modi funktionsfhig. Eine
allgemeine Implementation mittels gerteunabhngiger Bitmaps ist
in ExtGraph verfgbar.

Stellt das bergebene Icon (graphisches Symbol) an den Koordinaten x1, y1
dar. Das Icon ist maximal 16 Pixel breit, beliebig lang und einfarbig. Es
mu in folgendem Format vorliegen:

  - 1 Wort: Lnge des Icons in Pixelzeilen.

  - Fr jede Pixelzeile 1 Wort. Die Binrschreibweise dieses Worts
    wird "auf den Bildschirm projiziert" und stellt die modifizierten
    Punkte dar.

Die Prozedur modifiziert die in MapMask angegebenen Farbebenen
($0F alle, $01 die blaue, $02 die grne, $04 die rote, $08 die Intensitt).
Das Einerkomplement der Icon-Daten wird mit diesen Farbebenen AND-verknpft.
D.h., wo in der Binrschreibweise eine 1 ist, wird in den angegebenen
Farbebenen das entsprechende Pixel entfernt; wo eine 0 ist, passiert
nichts.

PutIconAnd beachtet Gr.ClipRect und die aktive Seite.

PutIconOr16-Prozedur  (Unit VgaMem)
 
 Deklaration:
procedure PutIconOr16(x1, y1: Integer; MapMask: Byte; Icon: Pointer);

Diese Prozedur ist nur in 16-Farben-Modi funktionsfhig. Eine
allgemeine Implementation mittels gerteunabhngiger Bitmaps ist
in ExtGraph verfgbar.

Stellt das bergebene Icon (graphisches Symbol) an den Koordinaten x1, y1
dar. Das Icon ist maximal 16 Pixel breit, beliebig lang und einfarbig. Es
mu in folgendem Format vorliegen:

  - 1 Wort: Lnge des Icons in Pixelzeilen.

  - Fr jede Pixelzeile 1 Wort. Die Binrschreibweise dieses Worts
    wird "auf den Bildschirm projiziert" und stellt die modifizierten
    Punkte dar.

Die Prozedur modifiziert die in MapMask angegebenen Farbebenen
($0F alle, $01 die blaue, $02 die grne, $04 die rote, $08 die Intensitt).
Die Icon-Daten werden mit diesen Farbebenen OR-verknpft.




                   vgamem, Page #   5   Date 9-2-1999 Tuesday
                                    -    6 -





D.h., wo eine 1 ist, wird in den angegebenen Farbebenen das ent-
sprechende Pixel eingetragen.

PutIconOr beachtet Gr.ClipRect und die aktive Seite.

ImageChunkSize-Variable  (Unit VgaMem)
 
 Deklaration:
ImageChunkSize: LongInt = 65520;

Legt die maximale Gre von atomaren Images fest.

CopyImage-Funktion  (Unit VgaMem)
 
 Deklaration:
function CopyImage(Image: pointer): pointer;

Erstellt eine Kopie des angegebenen Image und liefert einen
Zeiger auf die Kopie zurck.

Es werden beliebig groe Images untersttzt. Es gibt also keine
Beschrnkung auf 64K.

CutImage-Funktion  (Unit VgaMem)
 
 Deklaration:
function CutImage(x1, y1, x2, y2: Integer): pointer;

Speichert den angegebenen Bildausschnitt in einem Image und
liefert einen Zeiger auf dieses zurck.

Diese Funktion ersetzt die Prozedurfolge GetImageSize - GetMem - GetImage
und untersttzt zudem beliebig groe Images. Es gibt also keine
Beschrnkung auf 64K.

FreeImage-Prozedur  (Unit VgaMem)
 
 Deklaration:
procedure FreeImage(Image: pointer);

Entfernt ein Image aus dem Speicher.

GetImageExtent-Prozedur  (Unit VgaMem)
 
 Deklaration:
procedure GetImageExtent(Image: pointer; var Extent: TPoint);

Ermittelt die Ausdehnung des Image und gibt sie in dem Parameter
Extent zurck.

LoadImage-Funktion  (Unit VgaMem)
 
 Deklaration:
function LoadImage(var S: TStream): pointer;

Ldt ein Image aus dem angegebenen Stream.

MaskedImage-Funktion  (Unit VgaMem)
 
 Deklaration:
function MaskedImage(Image: pointer): pointer;

Zieht alle Pixel der Farbe BkColor aus dem Image heraus
und speichert sie in einem neuen Image gleicher Gre.

Rckgabewert ist ein Zeiger auf das neu angelegte Image. Es enthlt
weie Pixel dort, wo in dem Originalimage ein BkColor-Pixel auftrat,
ansonsten nur schwarze Pixel.



                   vgamem, Page #   6   Date 9-2-1999 Tuesday
                                    -    7 -






PasteImage-Prozedur  (Unit VgaMem)
 
 Deklaration:
procedure PasteImage(X, Y: Integer; Image: pointer; BitBlt: Word);

Kopiert das Image an die angegebenen Koordinaten auf den Bildschirm.

PasteImage ist der Nachfolger der PutImage-Prozedur. Es untersttzt
beliebig groe Images (auch > 64K) und fhrt korrektes Clipping an
den Grenzen von ClipRect durch. Beachten Sie, da Image
als Zeiger bergeben wird. (Er mu also nicht dereferenziert weren.)

Der BitBlt-Parameter steuert die Art des Transfers:


 BitBlt      Transfermethode
   
 NormalPut,  Kopieren
 CopyPut
 OrPut       berblenden mit OR
 XorPut      berblenden mit XOR
 AndPut      Maskieren mit AND

 NotPut      Addieren Sie diese Konstante zu einer der
             obigen Methoden, und das Einerkomplement
             des Images wird verwendet.

 BackPut     Addieren Sie diese Konstante zu einer der
             obigen Methoden, und Pixel mit der Farbe, die
             in Gr.BkColor angegeben ist, werden beim
             Kopieren weggelassen.
             Dieses Verfahren ist nur wirksam fr Graphikmodi,
             in denen GetVgaMemCaps das
 
             Bit vmcBackPut liefert.
             Ansonsten sollten Sie es mittels MaskedImage
             emulieren.


StoreImage-Prozedur  (Unit VgaMem)
 
 Deklaration:
procedure StoreImage(var S: TStream; Image: pointer);

Speichert ein Image in den angegebenen Stream.

GetImage-Prozedur  (Unit VgaMem)
 
 Deklaration:
procedure GetImage(x1, y1, x2, y2: Integer; var BitMap);

Diese Prozedur ist vollstndig zu Graph.GetImage kompatibel.

Sie sollten statt dieser Prozedur eher CutImage verwenden,
da jene groe Images untersttzt.

GetImageSize-Funktion
 
 Deklaration:
function GetImageSize(Image: pointer): Word;




                   vgamem, Page #   7   Date 9-2-1999 Tuesday
                                    -    8 -





Ermittelt den Speicherverbrauch eines Image.

Sie werden diese Funktion nicht verwenden mssen, da CutImage
und FreeImage alle Arbeit mit der Speicherreservierung
bernehmen.

ImageSize-Funktion  (Unit VgaMem)
 
 Deklaration:
function ImageSize(x1, y1, x2, y2: Integer): Word;

Diese Funktion ist vollstndig zu Graph.ImageSize kompatibel.

Sie werden diese Funktion nicht verwenden mssen, da CutImage
und FreeImage alle Arbeit mit der Speicherreservierung
bernehmen.

PutImage-Prozedur  (Unit VgaMem)
 
 Deklaration:
procedure PutImage(X, Y: Integer; var BitMap; BitBlt: Word);

Diese Prozedur ist vollstndig zu Graph.PutImage kompatibel, fhrt
aber korrektes Clipping an den Rndern von Gr.ClipRect aus.

Sie sollten statt dieser Prozedur eher PasteImage verwenden,
da jene groe Images untersttzt.

TScreenBuf-Typ  (Unit VgaMem)
 
 Deklaration:

  TScreenBuf = record
    Mode: Word;
    Rect: TRect;
    Size: LongInt;
    Info: LongInt
  end;

StoreScreen speichert in einer Variablen dieses Typs
Verwaltungsinformationen ab.

StoreScreen-Funktion  (Unit VgaMem)
 
 Deklaration:
function StoreScreen(x1, y1, x2, y2: Integer): PScreenBuf;

Diese Funktion versucht, den angegebenen Bildschirmausschnitt
(Turbo-Vision-Notation) zu speichern.

Solange Restbildspeicher vorhanden ist, wird dieser genutzt (GetVgaMem). Ansonsten
wird CutImage verwendet. Wenn der Hauptspeicher dafr nicht
ausreicht, wird NIL zurckgegeben.

Ansonsten ist der Rckgabewert ein Zeiger auf eine neu angelegte
Datenstruktur, die den Puffer beschreibt.

 Siehe auch:

 FreeScreenBuf
 DrawScreenBuf
 DrawScreenBufAt



                   vgamem, Page #   8   Date 9-2-1999 Tuesday
                                    -    9 -






FreeScreenBuf-Prozedur  (Unit VgaMem)
 
 Deklaration:
procedure FreeScreenBuf(Buf: PScreenBuf);

Entfernt einen mit StoreScreen angelegten Puffer
aus dem Speicher.

DrawScreenBuf-Prozedur  (Unit VgaMem)
 
 Deklaration:
procedure DrawScreenBuf(Buf: PScreenBuf);

Stellt den mit StoreScreen gespeicherten Bildschirmbereich
an der gleichen Stelle wieder her.

DrawScreenBufAt-Prozedur  (Unit VgaMem)
 
 Deklaration:
procedure DrawScreenBufAt(Buf: PScreenBuf; x3, y3: Integer);

Stellt den mit StoreScreen gespeicherten Bildschirmbereich
an der Stelle (x3, y3) wieder her.

SourcePage-Variable  (Unit VgaMem)
 
 Deklaration:
SourcePage: Word = 0;

Legt die Nummer der Bildschirmseite fest, aus der CopyScreen und
SaveScreen lesen.

Mehrere Seiten werden nur in niedrig auflsenden Graphikmodi wie
gr640x350x16 untersttzt.

DestPage-Variable  (Unit VgaMem)
 
 Deklaration:
DestPage: Word = 0;

Legt die Nummer der Bildschirmseite fest, in die CopyScreen und
RestoreScreen schreiben.

Mehrere Seiten werden nur in niedrig auflsenden Graphikmodi wie
gr640x350x16 untersttzt.

GetVgaMemCaps-Funktion  (Unit VgaMem)
 
 Deklaration:
function GetVgaMemCaps: Word;

Mit dieser Funktion knnen Sie feststellen, welche der Operationen
von VgaMem im aktuellen Graphikmodus untersttzt werden. Der
Rckgabewert ist ein Bitfeld, dessen Bits folgende Bedeutungen haben:


 Bit             Bedeutung
   
 vmcImage        Image-Funktionen werden untersttzt.
 vmcCopy         CopyScreen wird untersttzt.
 vmcSaveRestore  SaveScreen und RestoreScreen
                 werden untersttzt.
 vmcBuffer       Restspeicherpufferung wird untersttzt.
 vmcBackPut      PasteImage mit BackPut wird untersttzt.




                   vgamem, Page #   9   Date 9-2-1999 Tuesday
                                    -   10 -






























































                   vgamem, Page #  10   Date 9-2-1999 Tuesday
