Home Inhaltsverzeichnis Prozeduren und Funktionen Units

7 Typen und Records


7.1 einfache Datentypen

     type
       PBoolean = ^boolean;
       PByte    = ^byte;
       PInteger = ^integer;
       PLongint = ^longint;
       PObj     = AESOBJECTPtr;
       PPointer = ^pointer;
       PShort   = ^shortint;
       PString  = ^string;
       PTree    = AESTreePtr;
       PWord    = ^word;

Folgende Typen sind aus Kompatibilitätsgründen zu BorlandPascal bzw. Windows/ObjectWindows vorhanden:

     PBool = ^Bool;
     Bool  = word;    (von PurePascal nicht unterstützt)
     PStr  = PChar;

7.2 APPLRECORD

Deklaration

     PAPPLRECORD = ^APPLRECORD;
     APPLRECORD  = record
                     Typ: longint;
                     What: record
                             case boolean of
                               false: (Long: longint);
                               true:  (Hi,Lo: word)
                           end
                   end;

Beschreibung

Dient zum Speichern von Benutzeraktionen bei appl_trecord() und appl_tplay(). Folgende Aktionen sind möglich:

TypWertWhat
AT_TIMER0Anzahl der verstrichenen Milli-
sekunden
AT_BUTTON1Status der Maustaste im unteren
Wort (0: nicht gedrückt, 1: ge-
drückt); Anzahl der Klicks im
oberen Wort
AT_MOUSE2X/Y-Koordinaten (oberes/unteres
Wort)
AT_KEYBD3eingegebenes Zeichen (unteres
Wort); Status der Umschalttasten
(oberes Wort)

7.3 GRECT

Deklaration

     PGRECT = ^GRECT;
     GRECT  = record
                case integer of
                  0: (g_x,g_y,g_w,g_h    : integer);
                  1: (X,Y,W,H,X1,Y1,X2,Y2: integer);
                  2: (A1,A2              : ARRAY_4)
              end;

Beschreibung

Enthält die Größe eines Bildschirmrechtecks. X und Y geben die linke obere Ecke des Rechtecks an, W und H die Breite und Höhe. In X1..Y2 können die beiden gegenüberliegenden Eckpunkte als absolute Koordinaten gespeichert werden (die meisten ObjectGEM-Routinen speichern beide Arten). In A1 und A2 sind die relativen bzw. die absoluten Koordinaten zusammengefaßt. g_x..g_h sind nur aus Kompatibilitätsgründen zur ursprünglichen C-Deklaration vorhanden.

7.4 HBrush

Deklaration

     HBrush = THandle;

Beschreibung

Wird zur Speicherung eines "Zeichenstiftes" verwendet. Im Moment ist dies ein VDI-Farbindex, mit dem eine Fläche gefüllt wird. Später werden hiermit aber evtl. auch verschiedene Muster etc. verwaltet.

7.5 HCursor

Deklaration

     HCursor = THandle;

Beschreibung

Speichert eine Mausform. Dabei kann es sich um eine Konstante (ARROW etc.) handeln, oder aber um einen Pointer (Wert>$7fff), der auf eine MFORM-Struktur zeigt.

7.6 HWnd

Deklaration

     HWnd = THandle;

Beschreibung

Wird zur Speicherung der ObjectGEM-internen Kennung eines jeden Fensterobjekts verwendet.

7.7 INFOXSSI

Deklaration

     PINFOXSSI = ^INFOXSSI;
     INFOXSSI  = record
                   id       : longint;
                   version  : word;
                   save_stat,
                   prg_stat : integer;
                   vec_stat : longint
                 end;

Beschreibung

Bildschirmschoner, die das "eXtended ScreenSaver Interface" unterstützen, richten einen XSSI-Cookie ein, der auf eine INFOXSSI-Struktur zeigt. id enthält die Kennung des Bildschirmschoners; für den Aufbau einer solchen Kennung gilt dasselbe wie für XBRA-Kennungen (BeforeDawn: 'DAWN', TwiLight: 'DATL', midnight: 'midn'). In version findet man die unterstützte XSSI-Version ($0100 oder $0101). save_stat gibt an, ob gerade geschont wird (negativer Wert) oder nicht (0). Applikationen können so evtl. ihre Grafikausgabe anhalten. Mit prg_stat kann ein Programm dem Bildschirmschoner eine Mitteilung schicken:

0ganz normal schonen
1sofort aufhören zu schonen
-1sofort aktiv werden

vec_stat (ab Version 1.01) ist ein Bitfeld, in dem der Status der einzelnen überwachten Vektoren eingetragen ist (Bit gesetzt=aktiv):

Bit
0Tastatur
1Maus
2Joystick
3MIDI
4Modem 1
5Modem 2
6Serial 1
7Serial 2
8-14Reserviert
15Grafik in Menüzeile unterdrücken (Uhren)
16AES-Grafikausgaben überwachen
17,18Grafiküberwachung:
00: Durchlassen
01: Unterdrücken
10: Überwachen (bei Grafik aufwachen)
11: reserviert
19,20Textüberwachung (GEMDOS und VDI);
Bits entsprechend der Grafiküberwachung
21-31Reserviert

Im Moment wird die Struktur noch nicht benötigt, es ist jedoch nicht ausgeschlossen, daß ObjectGEM später evtl. den XSSI-Cookie automatische beachtet und auswertet.

7.8 IterationFunc

Deklaration

     PIterationFunc = ^IterationProc;
     IterationFunc  = function(p: pointer): boolean;

Beschreibung

Wird von FirstThat, LastThat und FirstWndThat als Standardtyp für die aufzurufende Funktion verwendet.

7.9 IterationProc

Deklaration

     PIterationProc = ^IterationProc;
     IterationProc  = procedure(p: pointer);

Beschreibung

Wird von ForEach und ForEachWnd als Standardtyp für die aufzurufende Prozedur verwendet.

7.10 LongRec

Deklaration

     PLongRec = ^LongRec;
     LongRec  = record
                  Hi,Lo: word
                end;

Beschreibung

Ein Hilfs-Record, der den Zugriff auf das höher- und niederwertige Wort eines longints ermöglicht.

7.11 Pipearray

Deklaration

     PPipearray = ^Pipearray;
     Pipearray  = ARRAY_8;

Beschreibung

Dies ist ein Array von 8 integer-Werten, das zur Speicherung einer GEM-Message verwendet wird. Für die Nachrichten existiert eine Konvention über die Belegung der einzelnen Felder:

[0]Nachrichtennummer
[1]Nummer (apID) des Absenders
[2]Anzahl der Bytes, die noch nachträglich
per appl_read() gelesen werden müssen
(siehe TApplication.MessageBuffer)

Feld 2 enthält normalerweise eine Null. Die Belegung der anderen Felder hängt von der verschickten Nachricht ab.

7.12 TByteArray

Deklaration

     PByteArray = ^TByteArray;
     TByteArray = array [0..maxlongint-1] of byte;

Beschreibung

Ein universeller Byte-Array-Typ; kann z.B. zum Typecasting bei Pointern verwendet werden.

7.13 TCharSet

Deklaration

     PCharSet = ^TCharSet;
     TCharSet = set of char;

Beschreibung

Wird von TFilterValidator zur Speicherung der gültigen Zeichen verwendet.

7.14 TCookie

Deklaration

     PCookie = ^TCookie;
     TCookie = record
                 ID:  TCookieID;
                 Val: longint
               end;

Beschreibung

Enthält einen kompletten CookieJar-Eintrag. Dieser besteht aus einer (hoffentlich) eindeutigen Kennung und einem Wert, der z.B. als Pointer auf eine zugehörige Struktur oder für eine Versionsnummer genutzt werden kann.

Der CookieJar nimmt eine Art programmspezifische "Systemvariablen" auf, die von vielen Tools installiert werden. Applikationen werten diese Variablen normalerweise nur aus.

7.15 TCookieID

Deklaration

     PCookieID = ^TCookieID;
     TCookieID = array [0..3] of char;

Beschreibung

Dies ist der Datentyp für eine CookieJar-Kennung. Bei der Belegung sollte man folgendes beachten:

7.16 TEventData

Deklaration

     PEventData = ^TEventData;
     TEventData = record
                    Pipe       : Pipearray;
                    mX,mY      : integer;
                    BStat,KStat: integer;
                    Key,Clicks : integer
                  end;

Beschreibung

Dieser Record wird von TApplication.GetEvent und von allen von TApplication.MessageLoop aufgerufenen Methoden zur Datenübergabe genutzt. Er enthält alle wichtigen Rückgabewerte von evnt_multi().

Pipe nimmt eine komplette GEM-Message auf. In mX und mY wird die Mausposition, in BStat die gedrückte Maustaste (1=links, 2=rechts) und in Clicks die Anzahl der Mausklicks gespeichert. KStat enthält den Status der Umschalttasten, Key den eigentlichen Tastencode.

Je nach aufgetretenem Ereignis werden nicht immer alle Felder gleichzeitig gefüllt.

7.17 TGEMAttr

7.18 THandle

Deklaration

     THandle = longint;

Beschreibung

THandle definiert einen generischen Handle-Typ. Wichtig: Unter ObjectWindows ist dieser als word deklariert!

7.19 TIconWndClass

7.20 TItemList

Deklaration

     PItemList = ^TItemList;
     TItemList = array [0..MaxCollectionSize-1]
                                        of pointer;

Beschreibung

Ein Array von generischen Zeigern, die intern von TCollection-Objekten verwendet werden. Im Gegensatz zu ObjectWindows können allerdings wesentlich mehr Elemente gespeichert werden!

MaxCollectionSize ist festgelegt als

     const MaxCollectionSize = 536870911;

7.21 TMenuEntries

7.22 TMenuEntry

7.23 TMetaInfo

7.24 TPaintStruct

Deklaration

     PPaintStruct = ^TPaintStruct;
     TPaintStruct = record
                      fErase : boolean;
                      feColor: HBrush;
                      rcPaint: GRECT
                    end;

Beschreibung

Diese Struktur wird von TWindow.WMRedraw ausgefüllt und von TWindow.Paint ausgewertet.

fErase gibt an, ob der Fensterhintergrund vor dem Aufruf der Paint-methode gelöscht wurde (d.h. Class.hbrBackground ist größer als Null). feColor enthält dann die entsprechende Farbe.

rcPaint ist das wohl wichtigste Feld, in ihm wird nämlich der neu zu zeichnende Bereich übergeben.

7.25 TPicResult

7.26 TRsFile

Deklaration

     PRsFile = ^TRsFile;
     TRsFile = record
                 case boolean of
                   false: (rsh: RSHDR);
                   true:  (rsd: array [0..65535] of byte)
               end;

Beschreibung

Mit diesem Record kann entweder komfortabel auf den Header einer Resource-Datei oder aber auf jedes einzelne Byte dieser Datei zugegriffen werden. Der Header ist in der Unit Gem folgendermaßen deklariert:

     RSHDRPtr = ^RSHDR;
     RSHDR    = record
                  rsh_vrsn   : word;
                  rsh_object : word;
                  rsh_tedinfo: word;
                  rsh_iconblk: word;
                  rsh_bitblk : word;
                  rsh_frstr  : word;
                  rsh_string : word;
                  rsh_imdata : word;
                  rsh_frimg  : word;
                  rsh_trindex: word;
                  rsh_nobs   : word;
                  rsh_ntree  : word;
                  rsh_nted   : word;
                  rsh_nib    : word;
                  rsh_nbb    : word;
                  rsh_nstring: word;
                  rsh_nimages: word;
                  rsh_rssize : word
                end;

Die Struktur wird ObjectGEM-intern verwendet und braucht normalerweise anderweitig nicht verwendet werden.

7.27 TScrollBarTransferRec

Deklaration

     PScrollBarTransferRec = ^TScrollBarTransferRec;
     TScrollBarTransferRec = record
                               LowValue : longint;
                               HighValue: longint;
                               Position : longint
                             end;

Beschreibung

Speichert den Bereich und die Position einer Bildlaufleiste (Slider). Wird für den Datentransfermechanismus verwendet.

7.28 TWindowAttr

7.29 TWndClass

7.30 TWordArray

Deklaration

     PWordArray = ^TWordArray;
     TWordArray = array [0..1073741822] of word;

Beschreibung

Ein universeller Word-Array-Typ; kann z.B. zum Typecasting bei Pointern verwendet werden.

7.31 TXAccAttr

Deklaration

     PXAccAttr = ^TXAccAttr;
     TXAccAttr = record
       Version,
       MsgGroups,
       Protocol   : byte;
       AppTypeMR  : TAppTypeMR; (s.u.)
       AppTypeHR,
       ExtFeatures,
       GenericName,
       Name       : PString;
       apID,
       menuID     : integer;
       AVSrvMsg,
       AVAccMsg   : word;
       pXDSC      : PChar
     end;

Beschreibung

Enthält die Beschreibung einer Applikation mit allen für das XAcc-Protokoll wichtigen Daten. Version bezeichnet die Programmversion und kann beliebig gesetzt werden. MsgGroups enthält eine Bitmap der verstandenen XAcc-Message-Groups. Bit 0 entspricht Gruppe 1 und umfaßt die Messages ACC_TEXT und ACC_KEY. Bit 1 entspricht Gruppe 2 mit den Messages ACC_META und ACC_IMG. Protocol ist eine Bitmap der unterstützten Protokolle, z.Z. können PROTO_XACC (Bit 0) und PROTO_AV (Bit 1) eingetragen sein.

In Name ist der (XAcc-)Name des Programms gespeichert, der nichts mit dem Dateinamen zu tun haben muß! apID und menuID geben AES-Kennung und die Nummer des Desk-Menüeintrags an.

AppTypeMR gibt den maschinenlesbaren Programmtyp an (s.u.), AppTypeHR den dazugehörigen "menschenlesbaren". Wenn AppTypeHR nicht angegeben ist, versucht ObjectGEM diesen aus AppTypeMR zu ermitteln.

ExtFeatures enthält zusätzliche Eigenschaften einer Applikation. Diese sind nicht genormt und können daher nur von Programmen ausgewertet werden, die sich gegenseitig "kennen".

GenericName gibt den sog. generischen Namen einer Applikation an. Dieser kann z.B. dann gesetzt werden, wenn Programme mit gleicher Funktionalität verschiedene Namen benutzen, aber irgendwie als zusammengehörig erkannt werden müssen.

pXDSC ist ein Zeiger auf die "Extended names" einer Applikation. Die Auswertung ist aber nur dann nötig, wenn mehr als ein "extended feature" benötigt wird, da ObjectGEM nur das erste Feature in ExtFeatures einträgt. Der genaue XDSC-Aufbau ist in der XAcc-Dokumentation beschrieben. Wenn keine "Extended names" vorhanden sind, ist pXDSC nil!

Folgende maschinenlesbaren Programmtypen sind bisher definiert:

WPTextverarbeitung
DPDTP
EDTexteditor
DBDatenbank
SSTabellenkalkulation
RGRastergrafikprogramm
VGVektorgrafikprogramm
GGallgemeines Grafikprogramm
MUMusikanwendung
CDCAD
DCDatenkommunikation
DTDesktop
PEProgrammierumgebung

AVSrvMsg und AVAccMsg werden für Applikationen benutzt, die das AV-Protokoll unterstützen. Je nachdem, ob der Record den Server oder ein anderes AV-Accessory beschreibt, ist der jeweils andere Wert Null. Die Bits in AVSrvMsg haben folgende Bedeutung (gesetztes Bit=Message wird verstanden):

1AV_SENDKEY
2AV_ASKFILEFONT
4AV_ASKCONFONT, AV_OPENCONSOLE
8AV_ASKOBJECT
16AV_OPENWIND
32AV_STARTPROG
64AV_ACCWINDOPEN, AV_ACCWINDCLOSED
128AV_STATUS, AV_GETSTATUS
256AV_COPY_DRAGGED
512AV_PATH_UPDATE, AV_WHAT_IZIT,
AV_DRAG_ON_WINDOW
1024AV_EXIT

Die Bits in AVAccMsg bedeuten folgendes:

1VA_SETSTATUS
2VA_START

Wenn eine Applikation nur das AV-Protokoll unterstützt, werden die XAcc-spezifischen Parameter ausgenullt; wenn beide Protokolle vorhanden sind, haben die Werte des XAcc-Protokolls Priorität (z.B. der Name).

TAppTypeMR ist definiert als

     type PAppTypeMR = ^TAppTypeMR;
          TAppTypeMR = string[2];

7.32 WordRec

Deklaration

     PWordRec = ^WordRec;
     WordRec  = record
                  Hi,Lo: byte
                end;

Beschreibung

Ein Hilfs-Record, der den Zugriff auf das höher- und niederwertige Byte eines words ermöglicht.

7.33 XBRA

Deklaration

     PXBRA = ^XBRA;
     XBRA  = record
               xb_magic : array [0..3] of char;
               xb_id    : array [0..3] of char;
               xb_oldvec: pointer
             end;

Beschreibung

Speicherresidente, vektorverbiegende Programme setzen das sog. XBRA-Verfahren ein, um z.B. doppelte Installationen zu verhindern oder sich wieder deinstallieren zu können.

GEM-Applikationen werten diese Struktur, die unmittelbar vor der neuen Adresse des verbogenen Vektors zu finden ist, - wenn überhaupt - nur aus.

xb_magic muß die Zeichenkette "XBRA" ($58425241) enthalten. xb_id enthält die Kennung des verbiegenden Programms, die aus "druckbaren" ASCII-Zeichen bestehen sollte. In xb_oldvec schließlich ist der alte Vektor gespeichert.


Home Inhaltsverzeichnis Prozeduren und Funktionen Units