                                  - 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
 PrepBuf-Funktion  (Unit VgaMem) ......................................      2
 TVgaBuf-Typ  (Unit VgaMem) ...........................................      2
 EndBufDraw-Prozedur  (Unit VgaMem) ...................................      3
 PasteRect-Prozedur  (Unit VgaMem) ....................................      3
 PasteRectAt-Prozedur  (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
 ImageSize-Funktion  (Unit VgaMem) ....................................      7
 StoreImage-Prozedur  (Unit VgaMem) ...................................      7
 DrawScreenBuf-Prozedur  (Unit VgaMem) ................................      8
 FreeScreenBuf-Prozedur  (Unit VgaMem) ................................      8
 PutImage-Prozedur  (Unit VgaMem) .....................................      8
 StoreScreen-Funktion  (Unit VgaMem) ..................................      8
 TScreenBuf-Typ  (Unit VgaMem) ........................................      8
 DestPage-Variable  (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. 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
 DoneVgaMe
 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


InitVgaMem-Prozedur  (Unit VgaMem)
 



                   vgamem, Page #   1   Date 22-7-1996 Monday
                                    -    2 -





 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
in einer Variablen dieses Typs ab.

PrepBuf-Funktion  (Unit VgaMem)



                   vgamem, Page #   2   Date 22-7-1996 Monday
                                    -    3 -





 
 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 gelscht.


 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.

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




                   vgamem, Page #   3   Date 22-7-1996 Monday
                                    -    4 -





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
Turbo-Vision-Notation. x3, y3 sind die Zielkoordinaten.

Die Prozedur beachtet Gr.ClipRect und arbeitet auf den



                   vgamem, Page #   4   Date 22-7-1996 Monday
                                    -    5 -





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.

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




                   vgamem, Page #   5   Date 22-7-1996 Monday
                                    -    6 -





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.

PasteImage-Prozedur  (Unit VgaMem)
 



                   vgamem, Page #   6   Date 22-7-1996 Monday
                                    -    7 -





 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, CopyPut   Kopieren
 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;

Ermittelt den Speicherverbrauch eines Image.

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




                   vgamem, Page #   7   Date 22-7-1996 Monday
                                    -    8 -





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

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

Entfernt einen mit StoreScreen angelegten Puffer
aus dem Speicher.



                   vgamem, Page #   8   Date 22-7-1996 Monday
                                    -    9 -






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 (x1, y1) 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 22-7-1996 Monday
