                                  - TOC-   1 -





 Verfahren der Bildschirmdarstellung ..................................      1
 GVisible-Unit ........................................................      1
 PVis-Datenstruktur ...................................................      2
 pufferbar (Zeichenoperation) .........................................      2
 "am Stck" zeichnen ..................................................      2
 IndirectRegion-Prozedur  (Unit GVisible) .............................      3
 NewVis-Funktion (Unit GVisible) ......................................      3
 PRect-Typ ............................................................      3
 SubtractRegion-Prozedur (Unit GVisible) ..............................      3
 ClipVis-Prozedur (Unit GVisible) .....................................      4
 IntersectDelta-Funktion (Unit GVisible) ..............................      4
 IntersectVis-Funktion (Unit GVisible) ................................      4
 SubtractVis-Prozedur (Unit GVisible) .................................      4
 Unindirect-Prozedur  (Unit GVisible) .................................      4
 CopyVis-Funktion (Unit GVisible) .....................................      5
 FreeVis-Prozedur (Unit GVisible) .....................................      5
 MoveVis-Prozedur (Unit GVisible) .....................................      5
 SortVis-Funktion (Unit GVisible) .....................................      5
 DrawVis-Prozedur (Unit GVisible) .....................................      6
 DrawVisLocal-Prozedur (Unit GVisible) ................................      6
 BeginDraw-Funktion (Unit GVisible) ...................................      7
 DrawFirstPass-Prozedur (Unit GVisible) ...............................      7
 CritUnionDelta-Prozedur (Unit GVisible) ..............................      8
 EndDraw-Funktion (Unit GVisible) .....................................      8
 ScrollView-Prozedur (Unit GVisible) ..................................      8
 CurBP-Makro (Unit GVisible) ..........................................      9
 PrevBP-Makro (Unit GVisible) .........................................      9
 GlobalOptions-Variable (Unit GVisible) ...............................     10





























                                  - TOC-   1 -
                                    -    1 -






GVisible-Unit
 
Graphics Vision verfgt ber uerst effiziente
Zeichenmechanismen. Mit ihnen knnen Sie in beliebige Views
zeichnen, ohne da Sie sich um die Sichtbarkeitsverhltnisse zu
kmmern brauchen. Die Fhigkeit, "in den Hintergrund" zu zeichnen, ist
ein wesentliches Leistungsmerkmal von Graphics Vision.

Graphics Vision wendet verschiedene Verfahren an, um die
rasche Bildschirmdarstellung zu gewhrleisten.

Die Unit GVisible stellt die Sichtbarkeits- und Darstellungs- Mechanismen
fr Graphics Vision bereit. Die meisten der hier bereitgestellten Funktionen
werden Sie nicht direkt in Ihren Programmen bentigen. Das erledigt die
Unit GvViews fr sie.

 Datenstrukturen:

 PVis
 PRect

 Prozeduren und Funktionen:

 BeginDraw
 ClipVis
 CopyVis
 CritUnionDelta
 DrawFirstPass
 DrawVis
 DrawVisLocal
 EndDraw
 FreeVis
 IndirectRegion
 IntersectVis
 IntersectDelta
 MoveVis
 NewVis
 ScrollView
 SortVis
 SubtractRegion
 SubtractVis
 Unindirect

 Variablen:

 GlobalOptions

 Makros:

 CurBP
 PrevBP

Verfahren der Bildschirmdarstellung
 
Das effizienteste Verfahren zum Zeichnen von nicht-einfachen Regionen
ist die Restspeicherpufferung. Dabei werden Zeichenoperationen
mithilfe der VgaMem-Unit in unbenutzten Graphikspeicher umgeleitet und



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





einzelne Teile dieses Abbildes auf den Bildschirm kopiert. Dieses Verfahren
ist nur fr die mitgelieferten Graphikpakete anwendbar. In Objekten, die
andere Graphikpakete verwenden, mu das Flag ofBuffer gelscht
werden.

Wenn Restspeicherpufferung nicht angewandt werden kann, steht Metafiling
zur Verfgung. Dabei werden Zeichenoperationen mithilfe der MetaGr-Unit
aufgezeichnet und fr die einzelnen Teile der zu zeichnenden Region
abgespielt. Dieses Verfahren ist entscheidend schneller als wiederholtes
Ausfhren der Draw-Methode. Es ist nur fr die mitgelieferten Graphikpakete
sowie fr die Unit BGI anwendbar. In Objekten, die andere
Graphikpakete verwenden, mu das Flag ofMetafile gelscht werden.

Wenn keines dieser Verfahren angewandt werden kann, wird die Zeichenoperation
fr die einzelnen Teile der zu zeichnenden Region aufgerufen.

 Siehe auch:

 GVisible-Unit

pufferbar (Zeichenoperation)
 
Eine Zeichenoperation ist pufferbar, wenn in der
zugehrigen View die Option-Flags
ofBuffer oder ofMetafile gesetzt sind.

Standardmig sind alle Objekte mit diesen Flags versehen. Wenn Sie in
einem Objekt Zeichenroutinen aus der Unit BGI verwenden, mssen
Sie das Flags ofBuffer lschen. Wenn Sie fremde Graphikroutinen
verwenden, mssen Sie beide Flags lschen.

 Siehe auch:

 Verfahren

"am Stck" zeichnen
 
Eine Zeichenoperation kann "am Stck" ausgefhrt werden, wenn die
sichtbare Region aus maximal einem Rechteck besteht.

Das Zeichnen von nicht-pufferbaren Views in einer
BeginDraw- EndDraw- Klammerung
bzw. in einer SetViewport-
RestoreViewport- Klammerung kann nur dann
ausgefhrt werden, wenn das Objekt am "Stck" gezeichnet werden kann.

Bei nicht-pufferbaren Views sollten Sie daher diese
Klammerung vermeiden und statt dessen
DrawVisibleLocal einsetzen.

 Siehe auch:

 Verfahren

PVis-Datenstruktur
 
 Deklaration:
type PVis = pointer;




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





 Hinweise:

Eine Variable dieses Typs referenziert eine abstrakte Datenstruktur,
in welcher Graphics Vision eine Sichtbarkeits- Region
speichert.

Die interne Struktur kann nderungen unterliegen.

 Siehe auch:

 GVisible-Unit

PRect-Typ
 
 Deklaration:
type PRect = ^TRect;


Ein Zeiger auf ein Rechteck.

NewVis-Funktion (Unit GVisible)
 
 Deklaration:
function NewVis(var Bounds: TRect): PVis;

 Funktion:

Diese Funktion erstellt eine Sichtbarkeits- Struktur fr die
angegebenen globalen Koordinaten und markiert das gesamte Rechteck
als sichtbar.

Mittels SubtractRegion knnen Sie Teil-Rechtecke
als unsichtbar markieren lassen.

Sie werden diese Funktion nicht direkt bentigen.

 Siehe auch:

 GVisible-Unit
 FreeVis

SubtractRegion-Prozedur (Unit GVisible)
 
 Deklaration:
procedure SubtractRegion(Vis: PVis; var Bounds: TRect);

 Funktion:

Diese Prozedur markiert ein Teil-Rechteck der angegebenen
Region als unsichtbar.

Sie werden diese Funktion nicht direkt bentigen.

 Siehe auch:

 GVisible-Unit
 NewVis

IndirectRegion-Prozedur  (Unit GVisible)
 
 Deklaration:
procedure IndirectRegion(Vis: PVis; var Bounds: TRect; Transparent: PGView);

 Funktion:

Diese Prozedur markiert ein Rechteck als "indirekt" mit der transparenten
berdeckung Transparent.

Sie werden diese Funktion nicht direkt bentigen.



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






 Siehe auch:

 GVisible-Unit
 NewVis

Unindirect-Prozedur  (Unit GVisible)
 
 Deklaration:
procedure Unindirect(Vis: PVis; GOwner: PGView);

 Funktion:

Diese Prozedur entfernt alle transparenten berdeckungen
mit dem angegebenen GOwner

Sie werden diese Funktion nicht direkt bentigen.

 Siehe auch:

 GVisible-Unit
 IndirectRegion

ClipVis-Prozedur (Unit GVisible)
 
 Deklaration:
procedure ClipVis(Vis: PVis; var Clip: TRect);

 Funktion:

Diese Prozedur clippt eine Region an einem Rechteck.

Sie werden diese Funktion nicht direkt bentigen.

 Siehe auch:

 GVisible-Unit

SubtractVis-Prozedur (Unit GVisible)
 
 Deklaration:
procedure SubtractVis(Vis, SubVis: PVis);

 Funktion:

Diese Prozedur entfernt die in SubVis sichtbaren Bereiche aus
der Region Vis. Beide Regionen bleiben verfgbar.

Sie werden diese Funktion nicht direkt bentigen.

 Siehe auch:

 GVisible-Unit

IntersectVis-Funktion (Unit GVisible)
 
 Deklaration:
function IntersectVis(Vis1, Vis2: PVis): PVis;

 Funktion:

Diese Funktion berechnet die Schnittmenge der beiden Regionen
und gibt sie als neue Region zurck. Vis1 und Vis2
bleiben erhalten.

Sie werden diese Funktion nicht direkt bentigen.

 Siehe auch:

 GVisible-Unit




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





IntersectDelta-Funktion (Unit GVisible)
 
 Deklaration:
function IntersectDelta(Vis: PVis; Delta: TPoint): PVis;

 Funktion:

Diese Funktion schneidet Vis mit seinem um Delta verschobenen
Abbild und gibt das Ergebnis als neue Region zurck. Vis bleibt
erhalten.

Sie werden diese Funktion nicht direkt bentigen.

 Siehe auch:

 GVisible-Unit

MoveVis-Prozedur (Unit GVisible)
 
 Deklaration:
procedure MoveVis(Vis: PVis; Delta: TPoint);

 Funktion:

Diese Prozedur verschiebt die Region Vis um den Vektor Delta.

Sie werden diese Funktion nicht direkt bentigen.

 Siehe auch:

 GVisible-Unit

SortVis-Funktion (Unit GVisible)
 
 Deklaration:
function SortVis(Vis: PVis; Delta: TPoint): PVis;

 Funktion:

Diese Funktion richtet eine Region aus, damit eine Bildschirm- Bewegung
(mittels CopyScreen o..) um Delta durchgefhrt werden kann.
Rckgabewert ist eine neu angelegte Region. Vis bleibt erhalten.

Sie werden diese Funktion nicht direkt bentigen.

 Siehe auch:

 GVisible-Unit

CopyVis-Funktion (Unit GVisible)
 
 Deklaration:
function CopyVis(Vis: PVis): PVis;

 Funktion:

Diese Funktion erstellt eine Kopie einer Region.

Sie werden diese Funktion nicht direkt bentigen.

 Siehe auch:

 GVisible-Unit

FreeVis-Prozedur (Unit GVisible)
 
 Deklaration:
procedure FreeVis(Vis: PVis);

 Funktion:

Diese Prozedur entfernt eine Region aus dem Speicher.




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





Sie werden diese Funktion nicht direkt bentigen.

 Siehe auch:

 GVisible-Unit

DrawVis-Prozedur (Unit GVisible)
 
 Deklaration:
procedure DrawVis(Vis: PVis; Origin: TPoint; Self: PGView);

 Funktion:

Diese Prozedur zeichnet das View-Objekt Self auf den
Bildschirm. Dazu wird ein geeignetes Verfahren gewhlt.

 Parameter:

 Vis: Zu zeichnende Region.
 Origin: Globale Koordinaten der linken oberen Ecke.

 Hinweis:

Die Prozedur darf nur auf Nicht-Gruppen angewendet werden.

Sie werden diese Funktion nicht direkt bentigen.

 Siehe auch:

 GVisible-Unit

DrawVisLocal-Prozedur (Unit GVisible)
 
 Deklaration:

 procedure DrawVisLocal(Vis: PVis; Origin: TPoint;
   Self: PGView; Local: pointer; Frame: Word);


 Funktion:

Diese Prozedur zeichnet das View-Objekt Self auf den
Bildschirm. Dazu wird ein geeignetes Verfahren gewhlt.

Im Gegensatz zu DrawVis ruft diese Prozedur nicht die
Draw-Methode auf, sondern eine lokale, far deklarierte
Funktion auf, deren Adresse durch Local gegeben ist.

Der Parameter Frame ist ein Small-Zeiger auf den Stackrahmen der
Local direkt bergeordneten Prozedur.
Verwenden Sie die Makros CurBP oder PrevBP fr diesen
formalen Parameter.

 Beispiel:


procedure ScrollView(Self: PGView; Delta: TPoint; SubRect: PRect);
var
  ...

 procedure DoCopy; far;
 Begin
   CritUnionDelta(Delta);
   CopyScreen(DrawOrigin.X, DrawOrigin.Y,



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





	      Self^.Size.X + DrawOrigin.X, Self^.Size.Y + DrawOrigin.Y,
	      Delta.X + DrawOrigin.X, Delta.Y + DrawOrigin.Y)
 End;

Begin
  { ... }
  DrawVisLocal(ivis, P, Self, @DoCopy, CurBP);	{ copy region }
  { ... }
End;


 Hinweis:

Die Prozedur darf nur auf Nicht-Gruppen angewendet werden.

Sie werden diese Funktion nicht direkt bentigen.

 Siehe auch:

 GVisible-Unit

DrawFirstPass-Prozedur (Unit GVisible)
 
 Deklaration:
procedure DrawFirstPass(P: PGView; Self: PGView);

Diese Prozedur setzt voraus, da eine Zeichenoperation der View
Self im Verlauf ist. Sie zeichnet die sichtbaren Teile der View P
in die gleiche Region.

 Hinweis:

Die Prozedur darf nur auf Nicht-Gruppen angewendet werden.

Sie werden diese Funktion nicht direkt bentigen.

 Siehe auch:

 GVisible-Unit

BeginDraw-Funktion (Unit GVisible)
 
 Deklaration:

 function BeginDraw(Vis: PVis; Origin: TPoint;
   Self: PGView; Modifying: Boolean): Boolean;


 Funktion:

Blcke von Zeichenoperationen, die nicht von BeginDraw und
EndDraw geklammert sind, sind ungltig, da der Zeichenkontext
nicht definiert ist.

BeginDraw ist nur erfolgreich, wenn die zu zeichnende View
Self pufferbar ist oder am Stck
gezeichnet werden kann.

Routinen wie DrawVis und DrawVisLocal
bernehmen diese Klammerung. Sie knnen zudem jede Zeichenoperation ausfhren.

 Parameter:




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





 Vis: Zu zeichnende Region.
 Origin: Globale Koordinaten der oberen linken Ecke.
 Self: Die zu zeichnende View.
 Modifying: FALSE Neuzeichnen. TRUE vernderndes Zeichnen.

 Rckgabewert:

TRUE, falls erfolgreich.

Sie werden diese Funktion nicht direkt bentigen.

 Siehe auch:

 GVisible-Unit

EndDraw-Funktion (Unit GVisible)
 
 Deklaration:
function EndDraw(Vis: PVis; Self: PGView): Boolean;

 Funktion:

Diese Funktion bildet zusammen mit BeginDraw die Klammerung
fr Zeichenoperationen. Je nach Verfahren werden
ausgefhrte Operationen jetzt erst sichtbar gemacht.

Sie werden diese Funktion nicht direkt bentigen.

 Siehe auch:

 GVisible-Unit

CritUnionDelta-Prozedur (Unit GVisible)
 
 Deklaration:
procedure CritUnionDelta(Delta: TPoint);

 Funktion:

Diese Prozedur erweitert die CriticalArea des Maustreibers fr
eine Bewegung um Delta.

Sie werden diese Funktion nicht direkt bentigen.

 Siehe auch:

 GVisible-Unit

ScrollView-Prozedur (Unit GVisible)
 
 Deklaration:
procedure ScrollView(Self: PGView; Delta: TPoint; SubRect: PRect);

 Funktion:

Diese Prozedur scrollt die View Self um den Vektor Delta.
Es werden Bildschirm- Kopieraktionen eingesetzt, um wiederverwendbare
Bildteile zu verschieben. Andere Bildteile werden durch Draw-Aufrufe
neu gezeichnet.

Setzen Sie SubRect auf NIL, um die gesamte View scrollen zu lassen.
Ansonsten knnen Sie hier ein lokales Unter- Rechteck angeben.

 Hinweis:

Dies ist die einzige anwendungsnahe Prozedur der Unit GVisible.
Viele Basis-Views wie TInputLine, TListViewer,
TScroller und TEditor nutzen sie bereits, um



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





ein effizientes Scrolling zu erzielen.

 Siehe auch:

 GVisible-Unit

PrevBP-Makro (Unit GVisible)
 
 Deklaration:

 function PrevBP: Word;
 inline(
   $8B/ $46/ $00 { mov ax, [bp] }
 );


Setzen Sie dieses Makro fr den Frame-Parameter von
DrawVisLocal ein, wenn folgendes Aufrufschema vorliegt:


procedure call_DrawVisLocal(local: pointer);
begin
  { ... }
  DrawVisLocal({...}, local, PrevBP)
  { ... }
end;

procedure caller;

  procedure local; far;
  begin
    { ... }
  end;

begin
  call_DrawVisLocal(local)
end;


 Siehe auch:

 GVisible-Unit
 CurBP

CurBP-Makro (Unit GVisible)
 
 Deklaration:

 function CurBP: Word;
 inline(
   $8B/ $C5 { mov ax, bp }
 );


Setzen Sie dieses Makro fr den Frame-Parameter von
DrawVisLocal ein, wenn folgendes Aufrufschema vorliegt:





                  gvisible, Page #   9   Date 22-7-1996 Monday
                                    -   10 -





procedure caller;

  procedure local; far;
  begin
    { ... }
  end;

begin
  DrawVisLocal({ ... }local, CurBP)
end;


 Siehe auch:

 GVisible-Unit
 PrevBP

GlobalOptions-Variable (Unit GVisible)
 
 Deklaration:
const GlobalOptions: Word = $FFFF;

 Beschreibung:

Entfernen Sie aus dieser Maske die Bits ofBuffer,
ofMetafile oder ofBufferOne, wenn Sie
bestimmte Pufferungs-Verfahren von Zeichenoperationen
fr Debugging-Zwecke global ausschalten wollen.

 Siehe auch:

 GVisible-Unit






























                  gvisible, Page #  10   Date 22-7-1996 Monday
