Diese Übersicht ist eine alphabetische Auflistung aller ObjectGEM-Objekte. Die Abhängigkeiten der Objekte werden in der Objekthierarchie deutlich.
TApplication ist ein komplettes GEM-Applikations-Objekt, d.h. das Objekt beachtet automatisch alle GEM-Konventionen bzgl. Initialisierung etc. Außerdem werden alle Meldungen und Ereignisse verarbeitet. Da TApplication standardmäßig nur ein leeres Fenster vom Typ TWindow erzeugt, leitet man normalerweise ein eigenes Applikationsobjekt ab.
Pointer
PApplication = ^TApplication;
Felder
Methoden
Rubbox
Run
SCChanged
SendWndMessage
SetQuit
ShutCompleted
SHWDraw
Terminate
VAProtoStatus
VAStart
XAccAcc
XAccExit
XAccID
XAccIMG
XAccInsert
XAccKey
XAccMeta
XAccText
Vorfahre
Nachfahren
-
Deklaration
aesHandle: integer; (nur lesen)
Beschreibung
Enthält das Handle der vom AES benutzten VDI-Workstation. Wird von TApplication.InitGEM per graf_handle() ermittelt. Normalerweise braucht man diesen Wert nicht verwenden, da er hauptsächlich für die (automatisch durchgeführte) VDI-Initialisierung benötigt wird.
Deklaration
apDTA: DTA;
Beschreibung
Wenn das Programm nicht als Accessory gestartet wurde, wird der Datei-Übertragungs-Puffer von TApplication.Init auf apDTA gesetzt, damit z.B. auch zu einem späteren Zeitpunkt noch auf die Kommandozeile zugegriffen werden kann (diese würde sonst bei Dateioperationen zerstört werden).
Deklaration
apID: integer; (nur lesen)
Beschreibung
Wird von TApplication.InitGEM auf die mit appl_init() ermittelte Identifikationsnummer der Applikation gesetzt. Ein Wert<0 signalisiert einen Fehler (dann wird das Programm allerdings automatisch abgebrochen).
Deklaration
apName: PString; (nur lesen)
Beschreibung
Wird von TApplication.Init auf den eigenen Namen des Programms gesetzt, evtl. mit Leerzeichen auf eine Länge von 8 Zeichen gebracht und mit einem Nullbyte abgeschlossen.
Unter alten TOS-Versionen und bei Accessories kann der Name u.U. nicht korrekt ausgewertet werden.
Deklaration
apPath: PString; (nur lesen)
Beschreibung
Wird von TApplication.Init auf das Arbeitsverzeichnis des Programms (incl. Laufwerksangabe und abschließendem '\') gesetzt.
Unter alten TOS-Versionen und bei Accessories kann der Name u.U. nicht korrekt ausgewertet werden.
Deklaration
Attr: TGEMAttr;
Beschreibung
Diverse Attribute und Werte der Applikation sind in diesem Record zusammengefaßt. Wird von TApplication.Init initialisiert.
PGEMAttr = ^TGEMAttr; TGEMAttr = record EventMask, Instance : integer; (nur lesen) Style : longint; Country : word; rpTail, (nur lesen) rpCmd : PString; (nur lesen) sysFonts, (nur lesen) addFonts, (nur lesen) charSWidth, (nur lesen) charSHeight, (nur lesen) boxSWidth, (nur lesen) boxSHeight, (nur lesen) charWidth, charHeight, boxWidth, boxHeight, MaxPX, (nur lesen) MaxPY, (nur lesen) PixW, (nur lesen) PixH, (nur lesen) Colors, (nur lesen) MaxColors, (nur lesen) Planes : integer; (nur lesen) PopChar : char end;
EventMask gibt an, auf welche GEM-Ereignisse das Programm mit TApplication.GetEvent warten soll. Wird mit MU_MESAG or MU_KEYBD or MU_BUTTON besetzt; wenn MultiTOS aktiv ist, wird auch noch MU_TIMER eingefügt (wird intern benötigt). Dieses Feld kann für eigene Zwecke verändert werden, allerdings sollte man sich genau überlegen, ob dies wirklich sein muß, da fast alle Ereignisse schon von ObjectGEM behandelt werden (z.B. werden auch MU_M1 und MU_M2 intern temporär verwendet).
Instance zeigt an, wie oft sich das Programm im Speicher befindet (z.B. gleichzeitig als Accessory und als Programm, 1=nur einmal). Null bedeutet, daß kein korrekter Wert ermittelt werden konnte. Siehe hierzu auch TApplication.GetCurrInstance und TApplication.FirstInstance.
In Style werden diverse globale Eigenschaften des Programms zusammengefaßt. Standardmäßig wird hier as_GrowShrink or as_MenuSeparator or as_MoveDials or as_HandleShutdown or as_DesktopWindow or as_3DFlags or as_UseHomeDir eingetragen. Veränderungen dieser Bitmap sollten in der Methode TApplication.InitInstance vorgenommen werden.
Country gibt die Landessprache des Betriebssystems an, die dann auch von ObjectGEM verwendet wird. Z.Z. werden nur FRG und SWG gesondert behandelt, ansonsten werden englische Texte verwendet.
rpTail enthält eine dem Programm evtl. übergebene Kommandozeile, rpCmd den Namen des Programms incl. Pfad- und Laufwerksangabe. nil bedeutet, daß der jeweilige Wert nicht ermittelt werden konnte. sysFonts gibt die Anzahl der fest im System eingebundenen GEM-Fonts an (wird von TApplication.Init gesetzt). In addFonts trägt TApplication.SetupVDI die Anzahl der nachgeladenen Zeichensätze ein. Das Programm kann also auf sysFonts+addFonts Zeichensätze zurückgreifen.
charSWidth, charSHeight, boxSWidth und boxSHeight werden von TApplication.InitGEM auf die Rückgabewerte von graf_handle() gesetzt. Die folgenden vier Felder geben die Größen des aktuell verwendeten Fonts an und sollten bei Fontänderungen auf die neuen Werte gesetzt werden.
MaxPX und MaxPY geben die aktuelle Auflösung an. Nach Möglichkeit sollte man allerdings andere Werte (z.B. GetDesk) verwenden.
PixW und PixH werden (wie die beiden vorhergehenden Werte) von TApplication.Init besetzt; sie geben die Größe einen Pixels in mm/1000 an. Colors gibt die Anzahl der vordefinierten Farben an; diese ist auch unter TrueColor nicht höher als 256! MaxColors gibt die Anzahl aller verfügbaren Farben an (0=mehr als 32767, kontinuierliche Verteilung; 2=monochrom); hiermit sind alle vorhandenen Farbabstufungen gemeint, also Vorsicht! Wenn man beim Erkennen einer bestimmten Farbtiefe absolut sicher gehen will, muß man Planes auswerten (1=monochrom etc.). Die Anzahl der gleichzeitig darstellbaren Farben berechnet sich aus 2^Planes.
PopChar wird von TComboBox für das Zeichen benutzt, mit dem das Popup-Menü geöffnet werden kann. Atari hat dafür #240 vorgeschlagen; durchgesetzt hat sich aber #2 (Pfeil nach unten), was deshalb auch default ist.
Deklaration
FirstInstance: boolean; (nur lesen)
Beschreibung
Zeigt mit true an, daß diese Instanz des Programms die erste im Speicher war; wenn also MYTEST.ACC im Bootlaufwerk installiert ist und auf dem Desktop noch MYTEST.PRG gestartet wird, ist nur bei dem Accessory FirstInstance auf true gesetzt.
Nur bei der ersten Instanz eines Programms wird TApplication.InitApplication aufgerufen, wo dann grundlegende Initialisierungen durchgeführt werden können. Alle anderen Einstellungen, die jede Instanz für sich benötigt, müssen daher in der immer aufgerufenen TApplication.InitInstance-Methode vorgenommen werden.
Deklaration
GDOSActive: boolean; (nur lesen)
Beschreibung
Wird von TApplication.Init auf true gesetzt, wenn irgendeine GDOS-Erweiterung (NVDI, AMCGDOS etc.) installiert ist, d.h. wenn u.a. die erweiterten Routinen für Bitmap-Fonts vorhanden sind.
Deklaration
FPUAvailable: boolean; (nur lesen)
Beschreibung
Wird von TApplication.Init auf true gesetzt, wenn ein mathematischer Coprozessor vorhanden ist. Dafür werden ein evtl. vorhandener _FPU-Cookie und die Variable Test68881 aus der System-Unit ausgewertet. Die Art der FPU (68881/68882) ist nicht festgelegt.
Deklaration
OSBAvailable: boolean; (nur lesen)
Beschreibung
Wird von TApplication.Init auf true gesetzt, wenn das VDI Offscreen-Bitmaps unterstützt. Das ist z.B. bei NVDI ab Version 2.5 der Fall (sowie beim VDI-Enhancer-Patch).
Deklaration
Icon: PIcon; (nur lesen)
Beschreibung
Enthält einen Zeiger auf ein TIcon-Objekt, wenn der Applikation ein Icon mit TApplication.LoadIcon zugewiesen wurde und die Applikation gerade ikonifiziert ist.
Wird von TApplication.Init auf nil gesetzt.
Deklaration
IsQSBUsed: boolean;
Beschreibung
Ist dieses Feld true, wird der AES-"Quarter Screen Buffer" zur Zeit intern von ObjectGEM belegt, d.h. die Applikation darf ihn unter gar keinen Umständen anderweitig verwenden. Zur Verwendung des Puffers muß man folgendermaßen vorgehen:
wind_update(BEG_UPDATE); if Application^.IsQSBUsed then { Speicher anders anfordern, z.B. mit getmem } else begin GetQSB(p,len); if (p<>nil) and (len>=benoetigte_groesse) then begin Application^.IsQSBUsed:=true; { hier kann der Puffer nun benutzt werden; es können auch ObjectGEM-Routinen aufge- rufen werden, da diese die Belegung des Puffers beachten } Application^.IsQSBUsed:=false end else { Speicher anders anfordern } end; wind_update(END_UPDATE);
Deklaration
MainWindow: PWindow; (nur lesen)
Beschreibung
MainWindow ist die Liste der dem Applikationsobjekt untergeordneten Fenster. Das Feld wird mit nil initialisiert, und jedes Fenster klinkt sich bei dessen Initialisierung hier ein; das "Hauptfenster" der Application sollte dies normalerweise in TApplication.InitMainWindow tun. Mit den Routinen TApplication.FirstWndThat und TApplication.ForEachWnd kann man diese Liste recht einfach durchlaufen.
Deklaration
menuID: integer; (nur lesen)
Beschreibung
Wird das Programm als Accessory oder unter MultiTOS gestartet, trägt es sich mit menu_register() im "Desk"-Menü ein. Die dort zurückgelieferte Kennung wird in menuID eingetragen. -1 bedeutet, daß ein Fehler aufgetreten ist, was bei einem Accessory zum automatischen Programmabbruch führt. menuID wird normalerweise nur intern verwendet (z.B. von TApplication.ACOpen).
Deklaration
MenuTree: PTree; (nur lesen)
Beschreibung
Zeigt auf den Objektbaum des Dropdown-Menüs, wenn der Applikation ein solches mittels TApplication.LoadMenu zugewiesen wurde.
Deklaration
MessageBLen: integer; (nur lesen)
Beschreibung
Gibt die Länge in Bytes einer erweiterten GEM-Message an. Null bedeutet, daß die aktuelle Nachricht eine "normale" Länge von 16 Bytes hat (bzw. daß gar keine Nachricht vorliegt). Der Wert wird zusammen mit MessageBuffer von TApplication.MUMesag gesetzt.
Deklaration
MessageBuffer: pointer; (nur lesen)
Beschreibung
Zeigt auf einen Puffer, in dem eine erweiterte GEM-Nachricht mit der Länge MessageBLen steht. nil bedeutet, daß keine erweiterte Message vorliegt. Der Puffer wird automatisch am Anfang von TApplication.MUMesag angelegt und mit appl_read() gefüllt, wenn eine erweiterte Nachricht erkannt wird. Ein evtl. schon vorhandener Puffer wird in diesem Fall wieder freigegeben.
Alle Standard-Nachrichten haben eine normale Länge von 16 Bytes, sind also nicht erweitert. Die Auswertung einer erweiterten Nachricht sollte in TApplication.HandleMesag oder in der Methode TEvent.TestMessage eines abgeleiteten TEvent-Objektes erfolgen.
Deklaration
MetaDOS: PMetaInfo; (nur lesen)
Beschreibung
Wenn MetaDOS nil ist, ist kein Meta-DOS installiert. Ansonsten zeigt das Feld auf folgende Struktur:
PMetaInfo = ^TMetaInfo; TMetaInfo = record Version: string; Drives : longint end;
Version bezeichnet den Namen und die Versionsnummer des verwendeten Meta-DOS. Drives enthält eine Bitmap der Meta-DOS-Laufwerke (A=0, B=1 etc.). Wird von TApplication.Init gesetzt.
Deklaration
MiNTActive: boolean; (nur lesen)
Beschreibung
Wird von TApplication.Init auf true gesetzt, wenn MiNTVersion einen Wert größer Null zurückgibt, d.h. wenn die Multitasking-Erweiterung MiNT installiert ist.
GEM-Programme sind allerdings normalerweise darauf angewiesen, daß auch MultiTOS vorhanden ist.
Deklaration
MultiTOS: boolean; (nur lesen)
Beschreibung
Wird von TApplication.InitGEM auf true gesetzt, wenn das Multitasking-Betriebssystem MultiTOS installiert ist.
Wenn das Programm allerdings nur die Dateifunktionen einer Multitasking-Umgebung benötigt, kann auch MiNTActive ausgewertet werden.
Deklaration
Multitasking: boolean; (nur lesen)
Beschreibung
Gibt an, ob das AES mehrere Applikationen gleichzeitig (und vor allem gleichberechtigt) ausführen kann.
Die Anzahl dieser Applikationen beträgt mind. 2, über Besonderheiten des Multitasking-Betriebssystems ist hiermit nichts gesagt!
Deklaration
MemoryProtection: boolean; (nur lesen)
Beschreibung
Wir von TApplication.Init auf true gesetzt, wenn Mxalloc() vorhanden ist und auch mit den Memory-Protection-Flags aufgerufen werden darf.
Dieses Flag sagt nichts über das Vorhandensein von Memory Protection aus, man kann sich lediglich sicher sein, daß dann ein Aufruf von Mxalloc() keine Bomben produziert!
Im Moment wird dafür nur die Anwesenheit von MiNT getestet, da z.Z. keine weiteren Testmöglichkeiten bestehen. Später wird auch Mag!C berücksichtigt.
Deklaration
RscPtr: PRsFile; (nur lesen)
Beschreibung
Zeigt auf die sich im Speicher befindliche Resource-Datei des Programms, wenn eine solche mittels TApplication.LoadResource geladen bzw. mit TApplication.InitResource zugewiesen wurde. Normalerweise benötigt man diesen Pointer nicht.
Deklaration
SpeedoActive: boolean; (nur lesen)
Beschreibung
Wird von TApplication.Init auf true gesetzt, wenn SpeedoGDOS installiert ist, d.h. wenn das Programm auf Vektorfonts zurückgreifen kann.
Falls das (nie ausgelieferte) FSM-GDOS installiert ist, wird false zurückgegeben.
Deklaration
Status: integer;
Beschreibung
Enthält den Fehler-Status der Applikation. em_OK (bzw. irgendein nichtnegativer Wert) bedeutet, daß kein Fehler aufgetreten ist.
TApplication.MessageLoop wird nur betreten, wenn Status größer gleich em_OK ist, und wieder verlassen, sobald Status einen Wert kleiner em_OK enthält. Damit das Programm nicht auch bei evtl. behebbaren Fehlern abbricht, kann die Methode TApplication.HandleError überschrieben werden.
Deklaration
vdiHandle: integer; (nur lesen)
Beschreibung
Enthält das VDI-Handle der Applikation, das von TApplication.InitGEM mit v_opnvwk() ermittelt wird. Mit diesem Handle kann das Programm korrekte Grafik-Ausgaben machen.
Ein Wert kleiner Null signalisiert einen Fehler, das Programm wird in diesem Fall automatisch beendet.
TWindow-Objekte besitzen normalerweise eine eigene VDI-Workstation im Feld TWindow.vdiHandle!
Deklaration
workIn: workin_ARRAY;
Beschreibung
Dieses Array wird von TApplication.InitGEM zum Öffnen der VDI-Workstation benötigt. Danach kann es für eigene Zwecke verwendet werden.
Deklaration
workOut: workout_ARRAY;
Beschreibung
Dieses Array wird von TApplication.InitGEM für die Rückgabewerte von v_opnvwk() benötigt. Danach kann es für eigene Zwecke verwendet werden, da alle wichtigen Werte von TApplication.Init anderweitig gespeichert werden.
Deklaration
Name: PString; (nur lesen)
Beschreibung
Enthält den an TApplication.Init übergebenen Namen der Applikation, der u.a. zur genauen Identifikation verwendet wird.
Außerdem verwenden Accessories und Programme unter MultiTOS max. 17 Zeichen dieses Namens als Menüeintrag (die benötigten Leerzeichen werden automatisch eingefügt!).
Deklaration
XAcc: TXAccAttr; (nur lesen)
Beschreibung
XAcc beschreibt die XAcc-Parameter der eigenen Applikation, die zum Versenden an andere Applikationen benötigt werden.
Der Record wird in TApplication.Init mittels TApplication.GetXAccAttr eingelesen.
Deklaration
AVServer: integer; (nur lesen)
Beschreibung
Enthält die AES-ID des AV-Servers, wenn ein solcher existiert, ansonsten id_No. Unter "normalem" TOS kann nur das Hauptprogramm AV-Server sein.
TApplication.VAProtoStatus ermittelt AVServer, unter MultiTOS wird dies von TApplication.Init erledigt: Zunächst wird nach dem Prozeß "GEMINI" gesucht, dann nach dem Prozeß "AVSERVER". Wenn dies nicht zum Erfolg geführt hat, wird schließlich noch die Environment-Variable AVSERVER ausgewertet.
Deklaration
Clipboard: PClipboard; (nur lesen)
Beschreibung
Zeigt auf das mit der Applikation verknüpfte TClipboard-Objekt (oder ist nil, wenn ein solches nicht existiert).
Wird mit TApplication.GetClipboard gesetzt.
Deklaration
XAccList: PCollection; (nur lesen)
Beschreibung
XAccList enthält alle angemeldeten XAcc-Applikationen in Form von TXAccAttr-Records. Das Feld wird von TApplication.Init zunächst auf nil gesetzt und dann von TApplication.XAccInsert verwaltet. Beim Verlassen des Programms wird an alle in dieser Liste eingetragenen Applikationen eine ACC_EXIT-Message geschickt.
Wichtig: Auch während des Programmablaufs kann XAccList nil sein, falls z.B. alle anderen XAcc-Programme terminiert haben!
Deklaration
constructor Init(AName: string);
Beschreibung
Ruft den Vorfahren TEventObject.Init auf. Danach wird Application auf @self gesetzt und - wenn das Programm nicht als Accessory gestartet wurde - der Datei-Übertragungs-Puffer auf apDTA. TApplication.Name wird auf AName gesetzt.
Dann werden die Felder Attr.Country, FPUAvailable, OSBAvailable, SpeedoActive sowie MiNTActive ermittelt, MetaDOS wird ausgefüllt und InitGEM aufgerufen.
Ist Status an dieser Stelle größer gleich em_OK, wird die Initialisierung fortgesetzt, und für alle weiteren Aktionen in dieser Methode wird eine wind_update()-Schachtelung vorgenommen (wichtig für Accessories).
Dann wird XAcc mittels GetXAccAttr eingelesen. TApplication.Attr wird komplett ausgefüllt, apPath, apName und GDOSActive werden ermittelt und TApplication.GetClipboard sowie TApplication.SetupVDI aufgerufen. Ist Status immer noch größer gleich em_OK, wird schließlich InitInstance aufgerufen. Handelt es sich allerdings um die erste Instanz des Programms im Speicher, wird vorher noch InitApplication aufgerufen.
Unter MultiTOS wird schließlich mit Broadcast die ACC_ID-Message an alle AES-Prozesse geschickt, außerdem wird AVServer ermittelt.
Deklaration
destructor Done; virtual;
Beschreibung
Alle Fenster der MainWindow-Liste werden freigegeben. Wenn die MessageLoop-Schleife mind. einmal durchlaufen wurde, wird dann dem Programm mit der Methode TApplication.Terminate eine Möglichkeit geboten, evtl. Deinstallationen vorzunehmen. Dann wird ClosePrivateProfile aufgerufen, damit evtl. vorgenommene Änderungen noch gespeichert werden. Danach wird an alle in der XAccList eingetragenen Programme eine ACC_EXIT-Message geschickt. Wenn das Programm als Accessory gestartet wurde und MultiTOS nicht installiert ist, verfällt das Programm an dieser Stelle in einer Endlosschleife mittels evnt_timer(), ansonsten werden TApplication.ExitGEM und TEventObject.Done aufgerufen.
Deklaration
function ACClose(mID,Why: integer): integer; virtual;
Beschreibung
Wird aufgerufen, wenn das Accessory vom Betriebssystem geschlossen wird.
Wenn mID mit TApplication.menuID übereinstimmt (sollte immer der Fall sein, da ObjectGEM-Programme normalerweise nur max. einen Menüeintrag belegen), werden alle Fenster aus der MainWindow-Liste mittels TWindow.RawDestroy freigegeben.
Mit dem Rückgabewert kann die Methode melden, ob beim Schließen des Accessories irgend etwas schiefgelaufen ist (Wert<>0), standardmäßig wird aber em_OK zurückgegeben.
In Why wird unter MultiTOS der Grund für das Schließen des Accessories angegeben; unter alten TOS-Versionen übergibt TApplication.MUMesag hier einfach AC_CLOSE.
Zum Schluß wird (unter einem Singletasking-TOS) die XAccList freigegeben, AVServer auf id_No gesetzt und an das Hauptprogramm eine ACC_ID- und eine AV_PROTOKOLL-Message geschickt.
Deklaration
procedure ACOpen(mID: integer); virtual;
Beschreibung
Wird von TApplication.MUMesag aufgerufen, wenn der Benutzer den Accessory-Eintrag im Desk-Menü anwählt und das Accessory damit öffnet.
Wenn mID mit TApplication.menuID übereinstimmt (sollte immer der Fall sein), werden alle bereits erzeugten Fenster geöffnet; Fenster, die noch nicht erzeugt sind, bei denen aber das Flag cs_CreateOnAccOpen gesetzt ist, werden erzeugt und geöffnet. Anschließend werden alle modalen Dialoge nacheinander mittels TDialog.Execute abgearbeitet.
Deklaration
function Alert(AParent: PWindow; DefBtn: integer; Sign: longint; Txt,Btn: string): integer; virtual;
Beschreibung
Ersetzt den AES-Aufruf form_alert() durch eine mächtigere Routine. ObjectGEM-Alertboxen sind Tastatur-bedienbar, mit der Maus verschiebbar, und sie verwenden nach Möglichkeit (ein-)farbige Icons. In AParent kann der Pointer auf das Fenster übergeben werden, zu dem die Alertbox gehört (sonst nil). Die Box wird dann automatisch relativ zu diesem Fenster zentriert.
DefBtn gibt die Nummer (1,2,...) des Buttons an, der mit <Return> angewählt werden kann. Null bedeutet, daß es keinen solchen Default-Button gibt. Sign bestimmt das Icon, das in der Box verwendet wird (NO_ICON=0, NOTE=1, WAIT=2, STOP=3). Wird hier ein Wert größer $7fff übergeben, wird er als Pointer auf eine BITBLK-Struktur aufgefaßt, d.h. hiermit können eigene Icons benutzt werden. Wichtig: Selbstdefinierte Icons müssen im gerätespezifischen Format (FF_DEVSPEC) vorliegen! Wenn sich diese in der Resourcedatei des Programms befinden, nimmt ObjectGEM diese Anpassung allerdings automatisch in InitResource bzw. LoadResource vor. Txt gibt den Text der Alertbox an. Die einzelnen Zeilen werden durch '|' getrennt. Theoretisch können bis zu 18 Zeilen mit bis zu 255 Zeichen angezeigt werden, allerdings wird ein automatischer Zeilenumbruch durchgeführt, wenn die Alertbox für die aktuelle Auflösung sonst zu breit würde (aus "ästhetischen" Gründen ist außerdem die max. Länge einer Zeile auf 50 Zeichen beschränkt). In Btn schließlich werden die durch '|' getrennten Buttons übergeben (max. 12, wesentlich besser ist aber eine Zahl<=4). Die Hotkeys werden - wie bei den Dialogelementen - mit einem vorangestellten '&' markiert.
Die Rückgabe ist id_No, wenn die Alertbox aus irgendeinem Grund nicht ausgeführt werden konnte. Ein Wert größer Null gibt die Nummer des angewählten Buttons an.
Deklaration
procedure APDragDrop(PipeID,OrgID,WindID,mX, mY,KStat: integer); virtual;
Beschreibung
Verteilt eine Drag&Drop-Anfrage an das zuständige Fenster bzw. die Applikation.
Wenn dem GEM-Handle WindID ein ObjectGEM-Fenster zugeordnet werden kann (das sollte immer der Fall sein), wird die entsprechende TWindow.WMDragDrop-Methode aufgerufen; ansonsten wird die Anfrage an TApplication.HandleDragDrop weitergeleitet. PipeID gibt die Nummer der Pipe an; aus dieser Nummer kann der zugehörige Dateiname errechnet werden. OrgID ist die AES-Applikations-Kennung des anfragenden Programms, WindID ist die GEM-Kennung des Fensters, auf das gedroppt wurde. ObjectGEM wertet die Daten in dieser Methode allerdings bereits aus, so daß die aufgerufenen Methoden ein Handle der geöffneten Pipe erhalten.
mX, mY und KStat geben die Position der Maus und den Zustand der Umschalttasten beim Aufruf an. APDragDrop sorgt dafür, daß während der in ihr stattfindenden Aktionen das MiNT-Signal SIGPIPE ignoriert wird, damit das Programm nicht fälschlicherweise vom Betriebssystem beendet wird. Wichtig: Innerhalb dieser Methode ist die von TApplication.MUMesag mit wind_update() gesetzte Bildschirm-Sperre ausgeschaltet, um einen sonst möglichen Deadlock zu verhindern.
Wenn DDReadData oder DDReadArgs aufgerufen wurde und true zurückgegeben hat, wird - nachdem die Pipe geschlossen und der Bildschirm wieder blockiert wurde - DDFinished aufgerufen, wo man nun auf die gelesenenen Daten reagieren kann.
Deklaration
function APTerm(Why: integer): integer; virtual;
Beschreibung
Diese Methode wird von TApplication.MUMesag aufgerufen, um festzustellen, ob die Applikation (unter MultiTOS) für einen Shutdown beendet werden kann. Wenn em_OK zurückgegeben wird, setzt MUMesag das Feld TApplication.Status auf em_Terminate, d.h. das Programm wird abgebrochen (ohne den Anwender zu fragen). Ansonsten wird dem Betriebssystem das Scheitern des Shutdowns gemeldet.
Standardmäßig macht APTerm nichts anderes, als em_OK zurückzugeben.
Deklaration
function At(Index: integer): PWindow;
Beschreibung
Liefert einen Zeiger auf das Fenster mit der fortlaufenden Nummer Index in der MainWindow-Liste (begonnen wird bei Null).
Wenn Index negativ oder MainWindow leer ist, wird nil zurückgegeben. Bei zu großen Werten wird die Liste zyklisch durchlaufen.
Deklaration
function IndexOf(Item: PWindow): integer;
Beschreibung
Liefert die fortlaufende Nummer des Fensterobjekts, auf das Item zeigt, wenn dieses in der MainWindow-Liste vorkommt. Ansonsten wird -1 zurückgegeben.
Deklaration
function AutoFolder: boolean; virtual;
Beschreibung
Wird von TApplication.InitGEM aufgerufen, wenn das Programm aus dem AUTO-Ordner heraus aufgerufen wurde; hier können dann also evtl. Systeminitialisierungen vorgenommen werden. Ist die Rückgabe false, wird eine entsprechende Fehlermeldung ausgegeben. Anschließend wird das Programm auf jeden Fall beendet.
Standardmäßig wird false zurückgegeben.
Deklaration
procedure Cut; virtual;
Beschreibung
Wird aufgerufen, wenn der Benutzer <Control>+<X> drückt. Standardmäßig passiert hier nichts.
Deklaration
procedure Delete; virtual;
Beschreibung
Wird aufgerufen, wenn der Benutzer <Delete> drückt. Standardmäßig passiert hier nichts.
Deklaration
procedure Copy; virtual;
Beschreibung
Wird aufgerufen, wenn der Benutzer <Control>+<C> drückt. Standardmäßig passiert hier nichts.
Deklaration
procedure Paste; virtual;
Beschreibung
Wird aufgerufen, wenn der Benutzer <Control>+<V> drückt. Standardmäßig passiert hier nichts.
Deklaration
procedure SelectAll; virtual;
Beschreibung
Wird aufgerufen, wenn der Benutzer <Control>+<A> drückt. Im Moment werden dann alle Icons des Desktops mit TApplication.IconSelect(true,id_No) angewählt.
Hinweis: Da z.Z. noch kein TDesktop-Objekt existiert, kann diese Methode auch noch nicht sinnvoll eingesetzt werden.
Deklaration
function SendWndMessage(gHnd: integer; Msg: pointer; sID,Icn: boolean): boolean; virtual;
Beschreibung
Schickt die 16 Bytes lange GEM-Message Msg an die Applikation, die das Fenster mit dem AES-Handle gHnd besitzt. Wird in gHnd ein Wert kleiner gleich Null übergeben, wird die Nachricht an die Applikation des Top-Fensters verschickt.
Msg^[2] wird immer auf Null gesetzt, Msg^[3] auf gHnd (bzw. das Handle des Top-Fensters). Ist sID true, wird Msg^[1] auf TApplication.apID gesetzt. In Icn kann übergeben werden, ob die Message auch an ein ikonifiziertes Fenster geschickt werden soll (true). Anhand der Rückgabe kann man feststellen, ob die Message verschickt wurde (true) oder nicht (false).
Wird vor allem für das Menü-Protokoll benötigt.
Deklaration
procedure Broadcast(Msg: pointer; sID: boolean); virtual;
Beschreibung
Verschickt eine 16 Bytes lange GEM-Message an alle erreichbaren AES-Prozesse. Nach Möglichkeit wird dazu ein AES-Broadcast per shel_write(7,...) verwendet, alternativ wird auf appl_search() zurückgegriffen. Ist beides nicht vorhanden, wird die XAccList benutzt.
Msg^[2] wird immer auf Null gesetzt. Ist sID true, wird Msg^[1] auf TApplication.apID gesetzt.
Deklaration
procedure BubbleHelp(mX,mY: integer; Delay: word; Hlp: string); virtual;
Beschreibung
Zeichnet an der Position mX,mY eine "BubbleHelp"-Sprechblase, in der der Hilfstext Hlp ausgegeben wird.
Vor dem Verlassen der Hilfe wird mind. Delay Millisekunden lang gewartet (ObjectGEM verwendet als Standardwert 500), danach wird die Hilfe bei Mausklick oder Tastendruck verlassen. Der Text in Hlp kann mit '|' auf mehrere Zeilen verteilt werden, ansonsten wird aber auch ein automatischer Zeilenumbruch abhängig von der aktuellen Auflösung durchgeführt.
Deklaration
function CanClose: boolean; virtual;
Beschreibung
Wird von TApplication.MessageLoop aufgerufen, wenn das Programm verlassen werden soll (hervorgerufen z.B. durch Quit). CanClose gibt true zurück, falls ein Beenden möglich ist.
Wurde die Applikation als Accessory unter einem "normalen" (nicht-multitasking) TOS gestartet, ist die Rückgabe immer false. Ansonsten werden alle offenen Fenster abgefragt; nur wenn alle Fenster bei ihrer CanClose-Methode true liefern, gibt auch TApplication.CanClose true zurück.
Deklaration
procedure SCChanged(OrgID: integer; Bits: word; Ext: string); virtual;
Beschreibung
Die Message SC_CHANGED sollte von einer Applikation an alle anderen im System erreichbaren Applikationen verschickt werden, nachdem am Klemmbrett Änderungen vorgenommen wurden.
In OrgID erhält man die AES-Kennung der verändernden Applikation, in Bits eine Bitmap der auf dem Klemmbrett gespeicherten Dateitypen und in Ext die Datei-Erweiterung der "besten" vorhandenen Datei (z.B. '.RTF'), damit beim Lesen möglichst wenig Information verloren geht.
Durch Auswertung von Bits braucht man das Klemmbrett nur auswerten, wenn die angegebenen Dateitypen überhaupt Verwendung finden können.
Deklaration
procedure CHExit(ChID,ChRet: integer); virtual;
Beschreibung
Wird aufgerufen, wenn die Applikation einen Child-Prozess gestartet hat und dieser wieder beendet wurde (unter MultiTOS).
In ChID wird die AES-Kennung des Prozesses und in ChRet der Rückgabecode des Programms übergeben.
Deklaration
function ChkError: integer; virtual;
Beschreibung
Liefert den ObjectGEM-Fehlerstatus zurück; eine entsprechende Fehlermeldung kann mit der Methode TApplication.Error angezeigt werden. Wichtig: Diese Methode liefert nicht den Inhalt des TApplication.Status-Feldes zurück, in dem nur die schwerwiegenden Fehler registriert werden; vielmehr kann man mit dieser Methode alle möglichen ObjectGEM-Fehler abfragen.
Nach der Abfrage wird der Zustand wieder auf em_OK zurückgesetzt.
Deklaration
function ChkSpeedoError: integer; virtual;
Beschreibung
Wenn SpeedoGDOS installiert ist und bei der Verwendung ein Fehler auftritt, wird dieser nicht wie üblich direkt auf den Bildschirm geschrieben. ObjectGEM fängt solche Fehlermeldungen nämlich ab und macht sie dem Programm mit dieser Methode zugänglich. Um ganz sicher zu gehen, sollte man theoretisch nach jedem Speedo-Aufruf den Fehlerstatus abfragen... Nach dem Aufruf wird der Status wieder auf Null gesetzt.
Folgende Fehler können z.Z. auftreten:
0 | kein Fehler aufgetreten |
1 | Nicht ausreichend Fontdaten geladen |
3 | Unzulässige Font-Spezifikation angefordert |
4 | Fontformat-Fehler |
7 | "Rules requested" |
8 | Fehler beim Lesen der Datei |
9 | Fehler beim Öffnen der Datei |
10 | Font nicht angegeben |
11 | Cache-Speicher voll |
12 | Zeichendaten nicht verfügbar |
13 | Track-Kerning-Daten nicht verfügbar |
14 | Paar-Kerning-Daten nicht verfügbar |
-1 | allgemeiner Speedo-Fehler |
SpeedoGDOS ab 5.0 liefert für Type1-Fehlermeldungen Werte zwischen 4000 und 4056, für TrueType-Fehlermeldungen Werte zwischen 4096 und 5632.
Deklaration
function DDGetPath(WindID: integer): string; virtual;
Beschreibung
Wird von TApplication.HandleDragDrop aufgerufen, wenn der Sender den Datentyp 'PATH' gewählt hat, d.h. wenn er den Pfad der Applikation wissen möchte.
Im Moment wird hier ein Leerstring zurückgegeben, d.h. die Anfrage wird abgewiesen. Durch Überschreiben dieser Methode kann aber ein beliebiger Pfad zurückgegeben werden.
In WindID erhält man die Kennung des Fensters, auf das gedroppt wurde (hier meist -1).
Deklaration
function DDGetPreferredTypes (WindID: integer): string; virtual;
Beschreibung
Liefert die Extensions der "bevorzugten" Dateien zurück. Es dürfen maximal 8 Extensions geliefert werden, bei weniger Zeichen wird mit Nullbytes aufgefüllt.
Standardmäßig wird ein Leerstring zurückgegeben, d.h. alle Dateitypen werden ausprobiert. Eine genauere Rückgabe könnte z.B. '.RTF.TXT.DOC' lauten.
Deklaration
function DDHeaderReply(dType,dName,fName: string; dSize: longint; OrgID,WindID, mX,mY,KStat: integer): byte; virtual;
Beschreibung
Wird von TApplication.HandleDragDrop aufgerufen, um dem Sender auf den vorgeschlagenen Dateityp zu antworten.
In dType erhält man die Extension des vorgeschlagenen Dateityps (z.B. '.TXT'), in fName den entsprechenden Dateinamen (ohne Pfadangabe). In dName kann noch optional ein Name für die Daten übergeben werden, der vom Empfänger z.B. zum Beschriften eines Icons benutzt werden kann. dSize gibt die Länge der zu übertragenden Datei an. WindID bezeichnet die Fenster-Kennung (meist -1), OrgID die AES-Kennung des Senders, mX und mY die Position der Maus und KStat den Zustand der Umschalttasten beim Aufruf.
Standardmäßig wird DD_NAK zurückgegeben, folgende Werte sind z.Z. definiert:
DD_OK | alles OK; die Daten werden dann mit |
TApplication.DDReadData eingelesen | |
DD_NAK | Fehler, Abbruch der Kommunikation |
DD_EXT | der Sender soll einen anderen |
Dateityp vorschlagen | |
DD_LEN | der Empfänger kann nicht so viele |
Daten gleichzeitig verarbeiten | |
DD_TRASH | Datei wurde auf den Mülleimer ge- |
zogen; der Sender muß entsprechend | |
reagieren | |
DD_PRINTER | Datei wurde auf das Drucker-Icon |
gezogen; der Sender muß entsprechend | |
reagieren | |
DD_CLIPBOARD | Datei wurde auf das Klemmbrett-Icon |
gezogen; der Sender muß entsprechend | |
reagieren |
Deklaration
function DDReadData(dType,dName,fName: string; dSize: longint; PipeHnd, OrgID,WindID,mX,mY, KStat: integer): boolean; virtual;
Beschreibung
Wird von TApplication.HandleDragDrop aufgerufen, wenn eine Drag&Drop-Anfrage positiv beantwortet werden konnte und nun die Daten eingelesen werden sollen.
In dType erhält man die Extension des vorgeschlagenen Dateityps (z.B. '.TXT'), in fName den entsprechenden Dateinamen (ohne Pfadangabe). In dName kann noch optional ein Name für die Daten übergeben werden, der vom Empfänger z.B. zum Beschriften eines Icons benutzt werden kann. dSize gibt die Länge der zu übertragenden Datei an. WindID bezeichnet die Fenster-Kennung (meist -1), OrgID die AES-Kennung des Senders, mX und mY die Position der Maus und KStat den Zustand der Umschalttasten beim Aufruf.
PipeHnd enthält das Dateihandle der geöffneten Pipe, auf die nun mit Fread() zugegriffen werden kann.
Wenn die Daten eingelesen werden konnten, sollte true zurückgegeben werden, damit die Methode TApplication.DDFinished aufgerufen wird.
Deklaration
function DDReadArgs(dSize: longint; PipeHnd,OrgID, WindID,mX,mY,KStat: integer): boolean; virtual;
Beschreibung
Wird von TApplication.HandleDragDrop aufgerufen, wenn der Sender den 'ARGS'-Datentyp, also eine Kommandozeile verschickt hat. In dieser Methode kann diese nun (per Fread()) eingelesen werden. Abschließend muß noch die geerbte Methode mit dem um die Anzahl gelesener Zeichen verminderten dSize aufgerufen werden, damit die Pipe vollständig geleert wird.
Wenn in der Kommandozeile mehrere Parameter übergeben werden, sind die einzelnen Parameter durch ein Leerzeichen getrennt. Wenn in einem Parameter ein Leerzeichen vorkommt, wird dieser Parameter in einfache Anführungszeichen gesetzt. Anführungszeichen innerhalb des Parameters werden dann verdoppelt (z.B. "'Eric''s file'").
Wenn die Daten eingelesen werden konnten, sollte true zurückgegeben werden, damit die Methode TApplication.DDFinished aufgerufen wird.
Deklaration
procedure DDFinished(OrgID,WindID,mX,mY, KStat: integer); virtual;
Beschreibung
Wird von TApplication.APDragDrop aufgerufen, wenn TApplication.DDReadData oder TApplication.DDReadArgs true zurückgegeben hat. Der Aufruf erfolgt nach dem Drag&Drop-Protokoll, man hat also wieder volle Kontrolle über den Bildschirm.
In dieser Methode sollten die Eingelesenen Daten ausgewertet werden (Anzeige etc.).
Deklaration
procedure DeskRedraw; virtual;
Beschreibung
Zeichnet den Desktop (d.h. das Fenster mit der Kennung 0 bzw. DESK) neu. Wird von InstallDesktop und RemoveDesktop automatisch aufgerufen.
Deklaration
procedure DrawMenu; virtual;
Beschreibung
Zeichnet die Dropdown-Menüleiste neu, wobei die Besonderheiten von MultiTOS beachtet werden. Wird von TApplication.LoadMenu aufgerufen.
Deklaration
procedure Error(ErrorCode: integer); virtual;
Beschreibung
Zeigt zu einer von TApplication.ChkError gelieferten Fehlernummer die passende Fehlermeldung in einer Alertbox an. Dabei wird die in Attr.Country ermittelte Landessprache beachtet. Z.Z. werden FRG und SWG gesondert behandelt, ansonsten werden englische Texte angezeigt.
TApplication.Status und der mit ChkError abzufragende Fehlercode werden gepuffert.
Deklaration
function ExecDialog(ADialog: PDialog): integer; virtual;
Beschreibung
Diese Methode dient zur einfachen Behandlung von Dialogen. Aufgrund einiger Einschränkungen sollten allerdings nach Möglichkeit die entsprechenden TDialog-Methoden verwendet werden.
In ADialog wird ein Pointer auf ein bereits initialisiertes TDialog-Objekt übergeben. Der Dialog wird automatisch modal abgearbeitet und zum Parent-Objekt zentriert. Wichtig: Das Dialogobjekt wird nach der Bearbeitung freigegeben! Ein positiver Rückgabewert gibt den Index des Dialogelements an, mit dem der Dialog verlassen wurde; bei einem Fehler wird em_InvalidDialog zurückgegeben.
Deklaration
procedure ExitGEM; virtual;
Beschreibung
Wird von TApplication.Done aufgerufen, um das Programm korrekt beim Betriebssystem abzumelden. Zunächst werden RemoveDesktop, TApplication.FreeIcon, TApplication.FreeMenu und FreeResource aufgerufen. Danach werden evtl. geladene GEM-Fonts freigegeben und die VDI-Workstation geschlossen. Zum Schluß wird appl_exit() aufgerufen.
Deklaration
function FindApplication(AName: string; AnID: integer; var XAccAttr: TXAccAttr): boolean; virtual;
Beschreibung
Sucht eine Applikation in der XAccList. Bei erfolgreicher Suche wird true zurückgegeben und der in XAccAttr übergebene Record ausgefüllt, ansonsten erhält man false als Rückgabe.
Wenn AName nicht leer ist, wird der Name zur Suche verwendet (Achtung: Das ist der beim XAcc-Protokoll verwendete Name, der nicht mit dem Namen der Programmdatei übereinstimmen muß!), ansonsten wird die AES-Kennung AnID verwendet.
Deklaration
function FirstWndThat (Test: PIterationFunc): PWindow;
Beschreibung
FirstWndThat ruft für jedes in der MainWindow-Liste eingetragene Fenster die durch Test bestimmte boolesche Funktion auf, bis Test true zurückgibt. FirstWndThat gibt dann den Zeiger auf das Fensterobjekt zurück, für den Test true zurückgegeben hat, oder nil, falls Test immer false geliefert hat. Der Pointer Test sollte eine globale (Unterschied zu ObjectWindows!) Funktion sein, der ein pointer-Parameter übergeben wird und die boolean zurückgibt. Achtung: Im Gegensatz zu ObjectWindows kann bei einer lokalen Test-Funktion nicht auf die Variablen der übergeordneten Routine zugegriffen werden!
Beispiel
function IstOffen(p: pointer): boolean; { ... }
IstOffen sollte eine globale Funktion sein.
p:=Application^.FirstWndThat(@IstOffen);
Deklaration
procedure ForEachWnd(Action: PIterationProc);
Beschreibung
ForEachWnd ruft für jedes in der MainWindow-Liste eingetragene Fenster die durch Action bestimmte Prozedur auf. Der Pointer Action sollte eine globale (Unterschied zu ObjectWindows!) Prozedur sein, der ein pointer-Parameter übergeben wird. Achtung: Im Gegensatz zu ObjectWindows kann bei einer lokalen Prozedur nicht auf die Variablen der übergeordneten Routine zugegriffen werden!
Beispiel
procedure MacheGross(p: pointer); { ... }
MacheGross sollte eine globale Prozedur sein.
Application^.ForEachWnd(@MacheGross);
Deklaration
procedure FreeMenu; virtual;
Beschreibung
Entfernt ein mit TApplication.LoadMenu installiertes Dropdown-Menü. Wird von TApplication.ExitGEM automatisch aufgerufen.
Deklaration
procedure FreeResource; virtual;
Beschreibung
Gibt eine mit TApplication.LoadResource geladene bzw. mit TApplication.InitResource eingebundene Resource wieder frei. Wird von TApplication.ExitGEM aufgerufen.
Deklaration
function GetAddr(Indx: integer): PTree; virtual;
Beschreibung
Ermittelt die Adresse des Objektbaumes mit dem Index Indx. Man sollte immer diese Methode und nicht rsrc_gaddr() verwenden, da GetAddr automatisch beachtet, ob die Resource mit InitResource oder mit LoadResource eingebunden wurde.
Deklaration
function GetClipboard: PClipboard; virtual;
Beschreibung
Liefert das TClipboard-Objekt, das mit der Applikation verknüpft wird. In dieser Methode wird ein TClipboard-Objekt neu instantiiert und ein Zeiger darauf zurückgegeben.
Wird von TApplication.Init aufgerufen.
Deklaration
procedure GetCrsRect(var crect: GRECT); virtual;
Beschreibung
Liefert den Bereich zurück, in dem der Mauszeiger von ObjectGEM verändert werden soll. Dies ist normalerweise der Arbeitsbereich des obersten Fensters, wenn bei diesem TWindow.Class.hCursor entsprechend gesetzt ist.
Diese Methode wird intern von TApplication.GetEvent aufgerufen und sollte nicht überschrieben werden.
Deklaration
function GetCurrInstance: integer; virtual;
Beschreibung
Gibt zurück, wie oft die Applikation im Speicher vorhanden ist. Während TApplication.Attr.Instance angibt, als welche Instanz das Programm gestartet wurde, liefert GetCurrInstance den aktuellen Wert. Dieser kann vom Startwert durchaus verschieden sein, da ja zwischenzeitlich dasselbe Programm erneut gestartet worden sein könnte (z.B. unter MultiTOS).
Deklaration
function GetEvent(var data: TEventData): integer; virtual;
Beschreibung
Wird von TApplication.MessageLoop aufgerufen, um auf GEM-Messages zu warten. Wenn ein Ereignis aufgetreten ist, muß die übergebene TEventData-Struktur entsprechend ausgefüllt werden.
Normalerweise wird in dieser Methode ein evnt_multi()-Aufruf durchgeführt (siehe Beispiel). Man sollte daran nur etwas ändern, wenn man genau weiß, was man tut, und wenn sich dies nicht anders bewerkstelligen läßt, da sonst die etwas "trickreiche" (aber dennoch saubere) ObjectGEM-Verwaltung sehr leicht durcheinanderkommen kann.
Beispiel
function TApplication.GetEvent(var data: TEventData): integer; var crect: GRECT; begin GetCrsRect(crect); GetEvent:=evnt_multi(Attr.EventMask,258,3,0,0, crect.X,crect.Y,crect.W,crect.H, 1,crect.X,crect.Y,crect.W,crect.H, data.Pipe, GetMsTimer mod 65536,GetMsTimer div 65536, data.mX,data.mY, data.BStat,data.KStat,data.Key, data.Clicks) end;
Deklaration
function GetFImagePtr(Indx: integer): pointer; virtual;
Beschreibung
Ermittelt die Adresse des BITBLK-Elements mit dem Index Indx, das sich nicht in einem Dialogbaum befindet.
Man sollte immer diese Methode und nicht rsrc_gaddr() verwenden, da GetFImagePtr automatisch beachtet, ob die Resource mit InitResource oder mit LoadResource eingebunden wurde.
Deklaration
function GetFString(Indx: integer): string; virtual;
Beschreibung
Gibt die mit Indx bezeichnete freie Zeichenkette zurück. Sollte immer anstelle von GetFreeString verwendet werden.
Deklaration
function GetFStringPtr(Indx: integer): PChar; virtual;
Beschreibung
Ermittelt die Adresse einer sog. "freien" Zeichenkette mit dem Index Indx; solche Strings befinden sich in einem speziellen Objektbaum und werden für Texte verwendet, die im Programm außerhalb von Dialogen verwendet werden sollen.
Man sollte immer diese Methode und nicht rsrc_gaddr() verwenden, da GetFStringPtr automatisch beachtet, ob die Resource mit InitResource oder mit LoadResource eingebunden wurde.
Deklaration
function GetGPWindow(gHnd: integer): PWindow;
Beschreibung
Gibt den Pointer auf das Fensterobjekt mit der GEM-Kenung gHnd zurück, wenn ein solches Fenster (mit dem dazugehörigen Fensterobjekt) existiert, andernfalls nil.
Deklaration
function FirstApplication(AType: TAppTypeMR; GenName: string; var XAccAttr: TXAccAttr): boolean;
Beschreibung
Sucht auf Grundlage der XAccList nach bestimmten Programmtypen im Speicher. Diese Funktion ist hauptsächlich für Multitasking-Systeme interessant, da hiermit eine Modularisierung des Systems erreicht werden kann (eine Art rudimentäre "Component Ware"). In AType kann ein maschinenlesbarer Programmtyp übergeben werden (siehe TXAccAttr), in GenName ein sog. "generischer Name". Gesetzte Parameter werden für die Auswertung mit "und" verknüpft. Wenn AType nicht ausgewertet werden soll, muß ' ' übergeben werden; in GenName übergibt man in so einem Fall einen Leerstring.
Wenn keine passende Applikation gefunden wurde, wird false zurückgegeben, true sonst.
Deklaration
function NextApplication (var XAccAttr: TXAccAttr): boolean;
Beschreibung
Liefert die nächste auf die bei FirstApplication angegebenen Werte passende Applikation im Speicher, wenn eine solche vorhanden ist (die Rückgabe ist dann true).
Wenn keine gewünschte Applikation mehr vorhanden ist, wird false zurückgegeben.
Deklaration
procedure GetMenuEntries(var Entries: TMenuEntries); virtual;
Beschreibung
Diese Methode wird für das Menü-Protokoll benötigt. Sie wird von TApplication.LoadMenu aufgerufen; standardmäßig wird hier die Struktur Entries nur ausgenullt.
Man kann (und sollte) aber die passenden Indizes von Menüeintrag und -titel zuweisen, damit man sich nicht mehr um das Weiterleiten von z.B. <Control>+<V> an die passende Paste-Methode zu kümmern braucht.
In der Praxis sieht es also so aus, daß man die entsprechenden Menüeinträge ("Drucken", "Kopieren", "Schließen" etc.) in der Menüleiste der Applikation zur Verfügung stellt, in dieser Methode dann die Indizes einträgt, und ab dann braucht man sich um diese Menüpunkte nicht mehr zu kümmern!
Wichtig: Das Menü-Protokoll bezieht sich nur auf die Applikations-Menüleiste, nicht aber auf eine Fenster-Menüleiste!
Folgenden Einträgen kann z.Z. eine Funktion zugeordnet werden (die Namen sollten selbsterklärend sein):
PMenuEntries = ^TMenuEntries; TMenuEntries = record Close, Print, Cut, Copy, Paste, Delete, SelectAll, Quit, Full, Cycle : TMenuEntry end; PMenuEntry = ^TMenuEntry; TMenuEntry = record Entry, Title: integer end;
Deklaration
function GetMsTimer: longint; virtual;
Beschreibung
Gibt die Anzahl der Millisekunden zurück, auf die für ein Timer-Ereignis gewartet werden soll. Standardmäßig ist dies genau eine Sekunde. Diese Zahl ist allerdings nur dann wirksam, wenn in TApplication.Attr.EventMask das Bit MU_TIMER gesetzt ist, was unter MultiTOS der Fall ist (wird intern benötigt).
GetMsTimer wird von TApplication.GetEvent aufgerufen.
Deklaration
function GetPTopWindow: PWindow;
Beschreibung
Gibt einen Zeiger auf das Fensterobjekt des obersten Fensters zurück, wenn dieses zu der ObjectGEM-Applikation gehört, ansonsten nil.
Deklaration
function GetPWindow(Hnd: HWnd): PWindow;
Beschreibung
Gibt den Pointer auf das Fensterobjekt mit der ObjectGEM-Kennung Hnd zurück, wenn ein solches Fensterobjekt existiert, andernfalls nil.
Der Unterschied zu TApplication.GetGPWindow ist, daß ein Fensterobjekt immer eine ObjectGEM-interne Kennung besitzt, aber kein GEM-Handle belegen zu braucht (z.B. modale Dialoge). Wenn man nach Fensterobjekten sucht, sollte man also GetPWindow verwenden. Benötigt man aber unbedingt ein zugehöriges GEM-Fenster, muß man GetGPWindow verwenden.
Deklaration
procedure GetXAccAttr(var XAccAttr: TXAccAttr); virtual;
Beschreibung
Wird von TApplication.Init dazu verwendet, das Feld XAcc auszufüllen.
Standardmäßig wird TXAccAttr.Version auf 0, MsgGroups auf 3 und AppTypeMR auf einen Leerstring gesetzt, TXAccAttr.apID, TXAccAttr.menuID und TXAccAttr.Name auf die entsprechenden Felder des Applikations-Objekts. Alle anderen Pointer werden auf nil gesetzt.
Protocol wird mit PROTO_XACC+PROTO_AV vorbelegt, AVSrvMsg mit MSG_SENDKEY or MSG_STARTPROG or MSG_EXIT und AVAccMsg mit MSG_START.
Diese Methode muß überschrieben werden, wenn dem Programm spezielle XAcc-Eigenschaften zugewiesen werden sollen.
Deklaration
procedure HandleAV(Pipe: Pipearray); virtual;
Beschreibung
Wird aufgerufen, wenn TApplication.MUMesag eine AV-Protokoll-Meldung erhält. ObjectGEM wertet nur die Messages AV_PROTOKOLL, VA_PROTOSTATUS und AV_EXIT aus, alle anderen Nachrichten müssen - wenn das Protokoll verstanden werden soll - in dieser Methode ausgewertet werden.
Eine Dokumentation des AV-Protokolls findet sich in der Beschreibung des Shareware-Desktops GEMINI.
Deklaration
procedure HandleButton(mX,mY,BStat,KStat, Clicks: integer); virtual;
Beschreibung
Wird von TApplication.MUButton aufgerufen, wenn ein dort eintreffender Mausklick nicht verarbeitet werden konnte. Standardmäßig werden hier nur evtl. vorhandene Icons mit IconSelect deselektiert. In mX und mY wird die Position des Klicks, in Clicks die Anzahl, in BStat die gedrückte Maustaste (1=links, 2=rechts) und in KStat der Zustand der Umschalttasten übergeben.
Deklaration
procedure HandleDragDrop(PipeHnd,OrgID,WindID,mX, mY,KStat: integer); virtual;
Beschreibung
Wird von TApplication.APDragDrop aufgerufen, wenn die Drag&Drop-Anfrage keinem Fenster zugeordnet werden konnte.
Zunächst wird die Anfrage positiv beantwortet. Dann werden die von TApplication.DDGetPreferredTypes gelieferten Dateitypen übermittelt. Nachdem sich der Sender auf einen Dateityp festgelegt hat, wird darauf mit dem von TApplication.DDHeaderReply ermittelten Wert reagiert. Wenn sich Sender und Empfänger einigen konnten, werden dann mit TApplication.DDReadData die Daten gelesen, ansonsten wird die Drag&Drop-Anfrage abgewiesen oder ein neuer Dateityp verlangt.
Verschickt der Sender den 'ARGS'-Datentyp, wird automatisch die Methode TApplication.DDReadArgs aufgerufen. Wenn der Sender allerdings den Applikationspfad wissen möchte, wird dieser mit TApplication.DDGetPath zurückgeliefert.
PipeHnd ist das Dateihandle der geöffneten Pipe, auf die mit Fwrite(), Fread() etc. zugegriffen werden kann. OrgID ist die AES-Applikations-Kennung des Senders, WindID ist die GEM-Kennung des Fensters, auf das gedroppt wurde (in dieser Methode meist -1, d.h. die Applikation an sich ist gemeint). mX, mY und KStat geben die Position der Maus und den Zustand der Umschalttasten beim Aufruf an.
Deklaration
procedure HandleError; virtual;
Beschreibung
Wird von TApplication.MessageLoop aufgerufen, wenn ein Fehler aufgetreten ist. Falls das Programm den Fehler beheben kann, sollte es TApplication.Status auf em_OK zurücksetzen, damit es nicht beendet wird.
Standardmäßig sorgt diese Methode dafür, daß em_OutOfMemory ignoriert wird.
Deklaration
procedure HandleKeybd(Stat,Key: integer); virtual;
Beschreibung
Wird von TApplication.MUKeybd aufgerufen, wenn das aufgetretene Tastaturereignis nicht verarbeitet werden konnte.
Normalerweise leitet diese Methode den Tastendruck an TWindow.WMKeyDown des obersten Fensters weiter (oder, wenn as_XInputMode gesetzt ist, an das Fenster unter dem Mauszeiger).
In Stat wird der Status der Umschalttasten und in Key der VDI-Tastencode übergeben.
Wurde der Tastendruck nicht ausgewertet, wird eine entsprechende AV_SENDKEY-Message an den AV-Server geschickt.
Deklaration
procedure HandleM1(mX,mY,BStat,KStat: integer); virtual;
Beschreibung
Wird von TApplication.MUM1 aufgerufen, wenn das Mausereignis dort nicht verarbeitet werden konnte (was normalerweise der Fall ist).
Diese Methode wird intern zum Verändern des Mauscursors über dem Fensterarbeitsbereich verwendet und sollte deshalb nicht überschrieben werden.
Deklaration
procedure HandleM2(mX,mY,BStat,KStat: integer); virtual;
Beschreibung
Wird von TApplication.MUM2 aufgerufen, wenn das Mausereignis dort nicht verarbeitet werden konnte (was normalerweise der Fall ist).
Diese Methode wird intern zum Verändern des Mauscursors über dem Fensterarbeitsbereich verwendet und sollte deshalb nicht überschrieben werden.
Deklaration
procedure HandleMenu(meNum: integer); virtual;
Beschreibung
Wird von TApplication.MNSelected aufgerufen, wenn für den Menüeintrag mit dem Index meNum kein zugehöriges TEvent-Objekt vorhanden ist.
Innerhalb dieser Methode kann dann eine case-Abfrage durchgeführt werden. Nach Möglichkeit sollten allerdings TEvent-Objekte zum Einsatz kommen.
HandleMenu macht standardmäßig gar nichts.
Deklaration
procedure HandleMesag(Pipe: Pipearray); virtual;
Beschreibung
Wird von TApplication.MUMesag aufgerufen, wenn die empfangene GEM-Message unbekannt ist und auch kein TEvent-Objekt etwas damit anfangen kann. Durch Überschreiben dieser Methode können z.B. eigene Nachrichten (mit Nummern ab $5000) verarbeitet werden.
Deklaration
procedure HandleTimer; virtual;
Beschreibung
Wird von TApplication.MUTimer aufgerufen, wenn ein Timer-Ereignis auftritt. Standardmäßig passiert in dieser Methode nichts.
Deklaration
procedure HandleXAcc(Pipe: Pipearray); virtual;
Beschreibung
Wird aufgerufen, wenn TApplication.MUMesag eine XAcc-Protokoll-Meldung erhält, die nicht von einer spezialisierten Methode verarbeitet werden kann. Das sind z.Z. die Meldungen ACC_OPEN, ACC_CLOSE und ACC_ACK.
Deklaration
function GetIconTitle: string; virtual;
Beschreibung
Wird von TApplication.MUMesag aufgerufen, wenn die gesamt Applikation ikonifiziert werden soll. Die Rückgabe dient als Fenstertitel des Icon-Fensters; standardmäßig wird TApplication.Name geliefert.
Von der Rückgabe werden z.Z. allerdings nur die ersten 10 (bzw. mit ICFS nur 8) Zeichen beachtet!
Deklaration
procedure IconPaint(Work: GRECT; var PaintInfo: TPaintStruct); virtual;
Beschreibung
Wird aufgerufen, wenn das Icon-Fenster neu gezeichnet werden soll. In Work wird der Arbeitsbereich des Fensters übergeben, da das Applikationsobjekt ja keine Angaben über das Icon-Fenster besitzt.
Standardmäßig wird der Arbeitsbereich einfach nur weiß gefüllt. Die Verfahrensweise ist analog zu TWindow.Paint.
Deklaration
function IsIconified: boolean;
Beschreibung
Gibt true zurück, wenn die gesamte Applikation ikonifiziert ist, d.h. wenn alle Fenster in einem einzigen Icon-Fenster zusammengefaßt sind (erst ab AES 4.10 möglich).
Deklaration
procedure InitApplication; virtual;
Beschreibung
Wird von TApplication.Init aufgerufen, wenn es sich um die erste Instanz des Programms im Speicher handelt.
Die Methode setzt zunächst FirstInstance auf true und versucht dann, alle ObjectGEM-Applikationen über den globalen 'GOBJ'-Cookie zu verketten.
Wenn InitApplication überschrieben wird, sollte in der neuen Methode als erstes die geerbte Methode aufgerufen werden.
Deklaration
procedure InitGEM; virtual;
Beschreibung
Wird von TApplication.Init aufgerufen, um das Programm beim Betriebssystem anzumelden.
Zunächst wird TApplication.apID mit appl_init() ermittelt. Wenn das AES noch nicht aktiv ist, wird TApplication.Status auf em_AESNotActive gesetzt und das Programm damit abgebrochen. Vorher wird jedoch noch AutoFolder aufgerufen.
Ansonsten werden danach unter MiNT/MultiTOS die Signale SIGTERM und SIGQUIT abgefangen. Dann werden die Kommandozeile und der Name des Programms ermittelt und Attr.rpCmd und Attr.rpTail entsprechend gesetzt.
Schließlich werden aesHandle und TApplication.vdiHandle besetzt und somit eine VDI-Workstation geöffnet. Tritt hier ein Fehler auf, wird Status auf em_GEMInitFailure gesetzt. Bei einem Accessory oder einer MultiTOS-Applikation wird noch der Desk-Menüeintrag auf TApplication.Name geändert und TApplication.menuID gesetzt. Ist kein Platz für ein Accessory mehr, wird Status auf em_AccInitFailure gesetzt.
Deklaration
procedure InitInstance; virtual;
Beschreibung
In dieser Methode werden normalerweise alle programmspezifischen Initialisierungen vorgenommen. Wird von TApplication.Init als letzte Aktion aufgerufen. Hier wird das TKeyMenu-Objekt zum Verlassen des Programms mit <Control>+<Q> installiert. Danach wird - wenn as_HandleShutdown gesetzt und MultiTOS aktiv ist - dem Betriebssystem die Fähigkeit zum korrekten Shutdown mitgeteilt. Als letztes wird schließlich TApplication.InitMainWindow aufgerufen. Wenn diese Methode überschrieben wird, sollte die geerbte Methode dann aufgerufen werden, wenn alle Voraussetzungen dafür geschaffen sind, daß dem Öffnen des Hauptfensters nichts mehr im Weg steht.
Deklaration
procedure InitMainWindow; virtual;
Beschreibung
Wird von TApplication.InitInstance aufgerufen, um das Hauptfenster der Applikation zu Öffnen. Standardmäßig wird ein einfaches TWindow-Objekt erzeugt, d.h. diese Methode wird eigentlich immer überschrieben.
Man kann hier eigene Fenstertypen erzeugen (auch Fensterdialoge), oder - wenn das Programm zunächst kein Fenster öffnen soll - gar nichts tun.
Beispiel
procedure TApplication.InitMainWindow; begin new(PWindow,Init(nil,Name^)); if (MainWindow=nil) or (ChkError<em_OK) then Status:=em_InvalidMainWindow end;
Deklaration
procedure InitResource(AddrHiRes,AddrLoRes: pointer); virtual;
Beschreibung
Verknüpft eine im Programm mit $L eingebundene Resource (siehe Beispielprogramme) mit der GEM-Applikation. Die Objektdateien (*.O) werden mit dem Programm BINOBJ erzeugt, das dem PurePascal-Paket beiliegt.
In AddrHiRes wird der Pointer der Resource für vertikale Auflösungen >=400 Pixel angegeben, in AddrLoRes der Pointer für alle kleineren Auflösungen. Wenn das Programm nur eine Resource besitzt, setzt man den anderen Pointer einfach auf nil; ObjectGEM wählt immer die bestmögliche Resource.
InitResource paßt alle Koordinaten an die aktuelle Auflösung an und wandelt alle Bitmaps in das gerätespezifische Format.
Man sollte Resourcedateien nach Möglichkeit direkt in das Programm einbinden, damit Accessories keine Probleme mit der Speicherplatzanforderung bekommen. Achtung: Wenn zwei Resourcedateien verwendet werden, muß man darauf achten, daß die Indizes der entsprechenden Objekte gleich sind!
Beispiel
Die Resource-Datei sei MYRSC.RSC, BINOBJ.TTP wird dann mit folgender Kommandozeile aufgerufen:
myrsc.rsc myrsc.o MyResource
Folgende Zeile wird in das Programm eingefügt:
procedure MyResource; external; {$L myrsc.o}
Eingebunden wird die Resource dann in der Methode TApplication.InitInstance:
InitResource(@MyResource,nil);
Deklaration
procedure InstallDesktop(tIndx,oIndx: integer); virtual;
Beschreibung
Meldet für die Applikation einen neuen Desktop an, dessen Hintergrundobjekt den Index oIndx im Objektbaum tIndx besitzt. Anschließend wird der neue Desktop mit TApplication.DeskRedraw gezeichnet. Accessories können z.Z. noch keinen eigenen Desktop anmelden, InstallDesktop wird dann einfach ignoriert.
Später wird außerdem noch eine automatische Verwaltung von Icons, Drag&Drop etc. dazukommen.
Deklaration
procedure InvalidateRect(Wnd: HWnd; Rect: PGRECT); virtual;
Beschreibung
Zeichnet den in Rect übergebenen Bereich des durch die ObjectGEM-Kennung angegebenen Fensters neu. Wird in Rect ein nil-Pointer übergeben, wird der gesamte Arbeitsbereich des Fensters aktualisiert. Das Neuzeichnen geschieht mit einer GEM-Message, wird also erst zu einem späteren Zeitpunkt durchgeführt.
Deklaration
procedure LoadMenu(Indx: integer); virtual;
Beschreibung
Installiert die Dropdown-Menüleiste im Objektbaum Indx. Zunächst wird geprüft, ob das Menü auf dem Bildschirm komplett dargestellt werden kann. Ist dies der Fall, wird das Menü gezeichnet, ansonsten gibt ChkError em_InvalidMenu zurück. Diese Methode sollte - falls ein Dropdown-Menü verwendet wird - in TApplication.InitInstance aufgerufen werden.
Wenn das Menü korrekt installiert werden konnte, wird danach GetMenuEntries aufgerufen. Aus kompatibilitätsgründen (zu SetQuit) wird danach eine GOP_SETQUIT-Message verschickt.
Deklaration
procedure LoadResource(FileHiRes,FileLoRes: string); virtual;
Beschreibung
Lädt die Resourcedatei des Programms nach. In FileHiRes wird der Dateiname der Resource für vertikale Auflösungen >=400 Pixel angegeben, in AddrLoRes der Dateiname für alle kleineren Auflösungen. Wenn das Programm nur eine Resource besitzt, übergibt man als anderen Dateinamen einfach einen Leerstring; ObjectGEM wählt immer die bestmögliche Resource.
LoadResource paßt alle Koordinaten an die aktuelle Auflösung an und wandelt alle Bitmaps in das gerätespezifische Format.
Kann die Datei nicht gefunden werden, wird TApplication.Status auf em_RscNotFound gesetzt.
Achtung: Wenn zwei Resourcedateien verwendet werden, muß man darauf achten, daß die Indizes der entsprechenden Objekte gleich sind!
Deklaration
procedure LoadIcon(icnTree,icnIndx: integer); virtual;
Beschreibung
Weist das Icon mit dem Index icnIndx im Objektbaum icnTree der Applikation zu. Dieses Icon wird, wenn die gesamte Applikation ikonifiziert wird, in dem Icon-Fenster dargestellt.
Dialogobjekte nutzen ebenfalls dieses Icon, wenn ihnen kein eigenes Icon zugewiesen wurde.
Deklaration
procedure FreeIcon; virtual;
Beschreibung
Gibt das Feld TApplication.Icon frei, d.h. in dem Applikations-Icon-Fenster wird kein Icon mehr dargestellt.
Deklaration
procedure MessageLoop; virtual;
Beschreibung
Wird von TApplication.Run aufgerufen. Diese Methode ist die zentrale "Nachrichtenvermittlungsstelle" von ObjectGEM.
Solange TApplication.Status größer gleich em_OK ist, wird mit TApplication.GetEvent auf eine GEM-Message gewartet. Je nach Ereignis wird dann MUKeybd, MUButton, MUM1, MUM2, MUMesag oder MUTimer aufgerufen. Wenn ein Fehler aufgetreten ist, wird zunächst TApplication.HandleError aufgerufen. Wenn der Fehler nicht behoben werden konnte, wird das Programm beendet.
Soll das Programm mit TApplication.Quit verlassen werden, wird an dieser Stelle TApplication.CanClose auf Gültigkeit überprüft.
Deklaration
procedure MNSelected(meNum,mtNum: integer; Tree: PTree; PrIndx: integer); virtual;
Beschreibung
Wird von TApplication.MUMesag aufgerufen, wenn der Benutzer einen Menüeintrag angewählt hat. In meNum wird der Index dieses Eintrags, in mtNum der Index des entsprechenden Menütitels übergeben.
Unter neueren AES-Versionen wird in Tree der Zeiger auf den zugehörigen Objektbaum und in PrIndex der Index des dem Eintrag übergeordneten Objekts übergeben; unter alten AES-Versionen wird stattdessen nil bzw. 0 übergeben.
Die Methode versucht, den Menüeintrag mit einem TKeyMenu-Objekt zu verknüpfen; ist für den Eintrag kein derartiges Objekt vorhanden, wird die Methode TApplication.HandleMenu aufgerufen.
MNSelected kümmert sich außerdem um das Invertieren des Menütitels.
Deklaration
procedure MUButton(data: TEventData); virtual;
Beschreibung
Wird von TApplication.MessageLoop aufgerufen, wenn ein Mausklick registriert wurde. Zuerst werden alle zum Applikationsobjekt gehörigen TEvent-Objekte benachrichtigt. Wenn keines davon reagieren will, werden anschließend die TEvent-Objekte des obersten Fensters abgefragt. Erst wenn auch hier keine positive Antwort erfolgt, wird der Klick an die Methode TWindow.WMButton weitergeleitet, wenn in den Arbeitsbereich eines Fensters geklickt wurde.
Wurde stattdessen auf den Desktop geklickt, wird - sofern as_Rubbox gesetzt ist - TApplication.Rubbox aufgerufen, und dann evtl. TApplication.MURubbox verständigt.
Trifft keiner der o.g. Fälle zu, wird der Klick an TApplication.HandleButton weitergeleitet.
Deklaration
procedure MUKeybd(data: TEventData); virtual;
Beschreibung
Wird von TApplication.MessageLoop aufgerufen, wenn ein Tastaturereignis aufgetreten ist. Die Methode versucht, für die gedrückte Taste(nkombination) ein TKeyMenu-Objekt zu finden (so werden z.B. die Menü-Shortcuts erkannt).
Konnte kein solches Objekt gefunden werden (was bei "normalen" Tasten immer der Fall sein sollte, da diese nicht als Shortcuts verwendet werden sollten), wird TApplication.HandleKeybd aufgerufen. Standard-Shortcuts (^X, ^C, ^V, ^W etc.) werden allerdings abgefangen und geeignet interpretiert (d.h. an die zugehörigen Methoden weitergeleitet).
Deklaration
procedure MUM1(data: TEventData); virtual;
Beschreibung
Wird von TApplication.MessageLoop aufgerufen, wenn ein Mausereignis für das erste Mausrechteck eingetreten ist. MUM1 versucht, für das Ereignis ein TEvent-Objekt zu finden.
Normalerweise sollte ein solches nicht existieren, da die beiden Mausrechtecke für interne Zwecke verwendet werden. In einem solchen Fall wird die Methode TApplication.HandleM1 aufgerufen.
Deklaration
procedure MUM2(data: TEventData); virtual;
Beschreibung
Wird von TApplication.MessageLoop aufgerufen, wenn ein Mausereignis für das zweite Mausrechteck eingetreten ist. MUM2 versucht, für das Ereignis ein TEvent-Objekt zu finden.
Normalerweise sollte ein solches nicht existieren, da die beiden Mausrechtecke für interne Zwecke verwendet werden. In einem solchen Fall wird die Methode TApplication.HandleM2 aufgerufen.
Deklaration
procedure MUMesag(data: TEventData); virtual;
Beschreibung
Wird von TApplication.MessageLoop aufgerufen, wenn das Programm eine GEM-Nachricht erhält.
Zunächst wird mit wind_update() eine Bildschirmblockierung für die gesamte Methode durchgeführt. Wenn data.Pipe[2] einen Wert größer Null enthält, werden MessageBuffer und MessageBLen entsprechend gesetzt, ansonsten sind sie nil bzw. 0.
Danach versucht MUMesag, die in data.Pipe[0] übergebene Nachricht einer der folgenden Methoden zuzuordnen: ACClose, ACOpen, APDragDrop, APTerm, AVExit, AVProtokoll, CHExit, Copy, Cut, HandleAV, HandleXAcc, MNSelected, Paste, Print, ResChCompleted, SCChanged, SelectAll, ShutCompleted, SHWDraw, VAProtoStatus, WMArrowed, WMBottomed, WMClosed, WMFulled, WMHSlid, WMIconify, WMMoved, WMNewTop, WMOnTop, WMRedraw, WMShaded, WMSized, WMTopped, WMUniconify, WMUnshaded, WMUntopped, WMVSlid, XAccAcc, XAccExit, XAccID, XAccIMG, XAccKey, XAccMeta oder XAccText.
Klappt dies nicht, wird versucht, die Nachricht an ein TEvent-Objekt weiterzuleiten. Scheitert auch dies, wird schließlich TApplication.HandleMesag aufgerufen.
Deklaration
procedure MURBoxChanged(r: GRECT); virtual;
Beschreibung
Wird von TApplication.Rubbox jedesmal dann aufgerufen, wenn sich die Größe der vom Benutzer im Fenster aufgezogenenen Rubbox ändert. Dies kann z.B. dazu verwendet werden, um die aktuelle Größe, die in r übergeben wird, anzuzeigen etc.
Während des Aufrufs ist die Maus unsichtbar, und es liegt eine wind_update()-Schachtelung sowohl mit BEG_UPDATE als auch mit BEG_MCTRL vor. Veränderte VDI-Attribute müssen zurückgesetzt werden.
Deklaration
procedure MURubbox(r: GRECT); virtual;
Beschreibung
Wird von TApplication.MUButton aufgerufen, wenn der Benutzer auf dem Desktop eine Rubbox aufgezogen hat. In r wird der ausgewählte Bereich übergeben.
Deklaration
procedure MUTimer(data: TEventData); virtual;
Beschreibung
Wird von TApplication.MessageLoop aufgerufen, wenn ein Timer-Ereignis aufgetreten ist. Macht im Moment nichts weiter, als TApplication.HandleTimer aufzurufen. Später werden hier allerdings die Fenster-Timer verwaltet.
Deklaration
function Popup(APopup: PPopup; x,y, Flag: integer): integer; virtual;
Beschreibung
Ermöglicht die einfache Abarbeitung eines TPopup-Objekts. In APopup wird der Pointer auf ein bereits initialisiertes Objekt übergeben, in x, y und Flag die Werte für TPopup.pX, TPopup.pY und TPopup.pFlag. Letzterer ist normalerweise POP_CENTER. Nach der Bearbeitung wird das TPopup-Objekt freigegeben. Die Rückgabe entspricht der von TPopup.Execute.
Deklaration
procedure Quit; virtual;
Beschreibung
Muß aufgerufen werden, wenn das Programm beendet werden soll (was dann am Ende des aktuellen Durchlaufs von MessageLoop geschieht).
Intern wird TApplication.Status auf em_Quit gesetzt; dies sollte man allerdings nie selbst tun, sondern immer Quit verwenden!
Wird von WMClosed aufgerufen, wenn cs_QuitOnClose gesetzt ist.
Deklaration
procedure RemoveDesktop; virtual;
Beschreibung
Entfernt einen mit TApplication.InstallDesktop angemeldeten Desktop, so daß der ursprüngliche Desktop wieder sichtbar wird.
Wird von TApplication.ExitGEM aufgerufen.
Deklaration
procedure ResChCompleted(Stat: integer); virtual;
Beschreibung
Wird von TApplication.MUMesag aufgerufen, wenn das Programm einen Auflösungswechsel initiiert hat (mit shel_write() Modus 5).
Ist Stat=1, wurde der Wechsel bis jetzt erfolgreich beendet (d.h. keine Anwendung hat sich widersetzt). Nun muß sich das Programm nur noch selbst beenden, was ResChCompleted dadurch tut, indem TApplication.Status auf em_Terminate gesetzt wird. Der Benutzer hat also keine Möglichkeit mehr, dies zu Verhindern - wenn man einen Auflösungswechsel initiiert, sollte man also bereits wissen, ob die eigene Applikation beendet werden darf!
Deklaration
procedure RestoreModalDialog(p: PWindow); virtual;
Beschreibung
Restauriert einen modalen Dialog, wenn aus diesem heraus ein weiterer Dialog aufgerufen und wieder beendet wurde. In p wird der Pointer auf das entsprechende Dialogobjekt übergeben. Nicht-modale Dialoge (und damit auch Fenster) werden automatisch beachtet.
RestoreModalDialog wird von TDialog beim Verlassen eines modalen Dialogs und von FileSelect aufgerufen. Normalerweise braucht man diese Methode nicht selbst aufzurufen.
Deklaration
function Rubbox(WHnd,x,y,xmin,ymin,xmax, ymax: integer; var r: GRECT): boolean; virtual;
Beschreibung
Wird von TWindow.WMButton und TApplication.MUButton aufgerufen, wenn der Benutzer eine Rubbox ("Gummibandbox") aufziehen will. Rubbox kümmert sich um die komplette Abarbeitung eines solchen Vorgangs (incl. korrektem Zeichnen unter Beachtung der Rechteckliste und dem Selektieren evtl. vorhandener TIcon-Objekte).
In WHnd wird die GEM-Kennung des betreffenden Fensters oder DESK für das Desktop übergeben. x und y geben die Anfangs-Mausposition an, xmin, ymin, xmax und ymax die (absoluten) Koordinaten des Begrenzungsrechtecks.
Das Abbrechen des Aufziehens der Rubbox kann durch Drücken der rechten Maustaste bei gedrückter linker Maustaste erreicht werden.
Wurde das Aufziehen nicht abgebrochen und ist die Rubbox nicht nur ein Pixel groß, enthält r anschließend die Endgröße der Rubbox und die Methode gibt true zurück. Ansonsten erhält man false, und r wird nicht verändert.
Während des Aufziehens wird bei einer Änderung der Größe - abhängig von WHnd - entweder MURBoxChanged oder TWindow.WMRBoxChanged und TWindow.WMRBoxCheck des zugehörigen Fensters aufgerufen.
Deklaration
procedure Run; virtual;
Beschreibung
Ist normalerweise die einzige Methode (außer den Methoden TApplication.Init und TApplication.Done), die innerhalb des Hauptprogramms aufgerufen wird.
Zuerst wird hier der Mauscursor mit ArrowMouse als Pfeil dargestellt. Wenn TApplication.Status einen nichtnegativen Wert enthält, wird danach TApplication.MessageLoop aufgerufen und damit das eigentliche Programm "gestartet".
Außerdem wird TApplication.Terminate am Ende des Programms nur dann aufgerufen, wenn die Programmausführung erfolgreich bis zu diesem Punkt gelangt ist!
Beispiel
program Minimal; var MyApp: TApplication; begin MyApp.Init('Minimal'); MyApp.Run; MyApp.Done end.
Deklaration
procedure SetQuit(mNum,tNum: integer); virtual;
Beschreibung
Ermöglicht es, dem TKeyMenu-Objekt, das in der Methode TApplication.InitInstance zum Beenden des Programms durch <Control>+<Q> angelegt wird, den Menüeintrag und den entsprechenden Titel zuzuweisen, mit dem das Programm alternativ verlassen werden kann. Als Programmierer braucht man sich dann nicht weiter darum zu kümmern. mNum und tNum sind die Indizes von Menüeintrag und -titel. SetQuit muß - sofern es verwendet wird - in InitInstance nach dem Aufruf der geerbten Methode und TApplication.LoadMenu aufgerufen werden.
Hinweis: Mittlerweile gibt es im Rahmen des Menü-Protokolls mit GetMenuEntries eine elegantere Lösung, zu deren Gunsten SetQuit nicht mehr verwendet werden sollte!
Deklaration
procedure SetupVDI; virtual;
Beschreibung
Wird von TApplication.Init aufgerufen, um die VDI-Workstation mit festen Werten zu initialisieren. Zunächst werden jedoch - wenn GDOSActive true und as_LoadFonts gesetzt ist - alle verfügbaren GEM-Fonts nachgeladen. Daraus folgt, daß - wenn die Anwendung auf GEM-Zeichensätze zurückgreifen will - SetupVDI überschrieben werden muß und die geerbte Methode erst dann aufgerufen werden darf, wenn man as_LoadFonts gesetzt hat!
Danach werden folgende Werte gesetzt (Schreibweise abgekürzt): vswr_mode(MD_REPLACE), vsl_udsty($5555), vsl_type(LT_SOLID), vsf_perimeter(PER_ON), vsl_color(Black), vsl_ends(LE_SQUARED,LE_SQUARED), vsm_type(MT_DOT), vsm_height(1), vsm_color(Black), vst_rotation(0), vsf_style(4), vsf_color(Black), vst_alignment(TA_LEFT,TA_BASELINE), vsl_width(1), vst_color(Black), vsf_interior(FIS_HOLLOW), vst_effects(TF_NORMAL).
Außerdem werden das Clipping auf die Größe des gesamten Desktops, vst_font() auf den ersten verfügbaren Font (das ist normalerweise der Systemzeichensatz) und dieser Font auf die "normale" Höhe (d.h. die des "großen" Fonts auf dem Desktop) gesetzt.
Deklaration
procedure ShutCompleted(Stat,ErrID,ErrCode: integer); virtual;
Beschreibung
Wird von TApplication.MUMesag aufgerufen, wenn das Programm das System heruntergefahren hat (mittels shel_write() Modus 4).
Ist Stat=1, hat der Shutdown wie gewünscht funktioniert, die Applikation kann nun mit ihren Aktionen fortfahren (für entsprechende Reaktionen sollte ShutCompleted daher überschrieben werden, da standardmäßig nichts geschieht).
Andernfalls erhält man in ErrID die AES-ID des Programms, das den Shutdown nicht korrekt durchführen konnte, und in ErrCode den Grund des Scheiterns in Form eines Fehlercodes.
Deklaration
procedure SHWDraw(Drive: integer); virtual;
Beschreibung
Sollte von Applikationenan die System-Shell (den Desktop) geschickt werden, wenn auf einem Laufwerk Dateien geändert wurden.
Wenn man mit ObjectGEM eine Shell realisiert, erhält man in dieser Methode also eine solche Meldung und kann entsprechend z.B. mit dem Update des Laufwerksfensters reagieren. In Drive wird die Laufwerksnummer (A=0, B=1 etc.) bzw. -1 zum Update aller Laufwerke übergeben.
Deklaration
procedure Terminate; virtual;
Beschreibung
Wird von TApplication.Done vor dem Verlassen des Programms (aber bereits nach dem Schließen aller Fenster) aufgerufen, um eine korrekte Deinstallation zu ermöglichen.
Diese Methode wird allerdings nur dann aufgerufen, wenn bis zum Aufruf von TApplication.Run keine Fehler aufgetreten sind, d.h. wenn die Installation geklappt hat.
Deklaration
procedure VAProtoStatus(OrgID: integer; Msg: word; AName: string); virtual;
Beschreibung
OrgID bezeichnet die AES-Kennung des AV-Servers, Msg ist eine Bitmap der verstandenen Nachrichten und AName enthält den Namen der Programmdatei. Die genaue Funktionsweise steht in der AV-Dokumentation und ist auch für Programmierer an dieser Stelle unwichtig, da ObjectGEM die komplette Verwaltung übernimmt.
Deklaration
procedure AVExit(OrgID: integer); virtual;
Beschreibung
OrgID bezeichnet die AES-Kennung der Applikation, die nicht mehr am AV-Protokoll teilnimmt. Die genaue Funktionsweise steht in der AV-Dokumentation und ist auch für Programmierer an dieser Stelle unwichtig, da ObjectGEM die komplette Verwaltung übernimmt.
Deklaration
function AVInsert(accID: integer; SrvMsg, AccMsg: word; AName: string): boolean; virtual;
Beschreibung
Diese Methode wird immer dann aufgerufen, wenn sich eine neue AV-Applikation angemeldet hat. Wenn die Applikation bereits angemeldet ist (sollte nicht vorkommen), wird false zurückgegeben. Ansonsten ist die Rückgabe true, die Daten werden ausgewertet und in die XAccList eingetragen.
Wenn man darauf wartet, daß sich eine bestimmte Applikation ins System einklinkt, sollte man diese Methode überschreiben und nach Aufruf der geerbten Methode die XAccList auswerten.
Deklaration
procedure AVProtokoll(OrgID: integer; Msg: word; AName: string); virtual;
Beschreibung
OrgID bezeichnet die AES-Kennung des Accessories, Msg ist eine Bitmap der verstandenen Nachrichten und AName enthält den Namen der Programmdatei. Die genaue Funktionsweise steht in der AV-Dokumentation und ist auch für Programmierer an dieser Stelle unwichtig, da ObjectGEM die komplette Verwaltung übernimmt.
Deklaration
procedure AVStartProg(OrgID,Ret: integer; Prg,Cmd: string); virtual;
Beschreibung
Nach dem Empfang dieser Message wird - sofern das Programm kein Acessory ist - die Applikation Prg mit Pexec(0,Prg,Cmd,nil) nachgestartet. Nach dem Start wird an den Absender der Ursprungsmessage eine VA_PROGSTART-Message mit dem Returncode Ret geschickt.
Deklaration
procedure AVSendKey(Stat,Key: integer); virtual;
Beschreibung
Der in dieser Message empfangene Tastendruck wird direkt an MUKeybd weitergeleitet.
Deklaration
procedure VAStart(OrgID: integer; Cmd: string); virtual;
Beschreibung
Das Accessory soll sich öffnen. rpTail wird auf Cmd gesetzt, danach wird ACOpen(menuID) aufgerufen.
In OrgID erhält man die AES-ID der aufrufenden Shell (z.B. Gemini).
Deklaration
procedure XAccAcc(accID,mID: integer; Msg, Ver: byte; pName: PChar); virtual;
Beschreibung
accID bezeichnet die AES-Kennung des bei der Hauptapplikation angemeldeten Accessories (bzw. unter MultiTOS die Applikations-Kennung selbst). mID, Msg und Ver entsprechen den Feldern im Record TXAccAttr, pName zeigt auf den Namen des Accessories incl. der "Extended names".
Die genaue Funktionsweise steht in der XAcc-Dokumentation und ist auch für Programmierer an dieser Stelle unwichtig, da ObjectGEM die komplette Verwaltung übernimmt.
Deklaration
procedure XAccExit(OrgID: integer); virtual;
Beschreibung
OrgID bezeichnet die AES-Kennung der terminierenden Applikation.
Die genaue Funktionsweise steht in der XAcc-Dokumentation und ist auch für Programmierer an dieser Stelle unwichtig, da ObjectGEM die komplette Verwaltung übernimmt.
Deklaration
procedure XAccID(OrgID,mID: integer; Msg, Ver: byte; pName: PChar); virtual;
Beschreibung
OrgID bezeichnet die AES-Kennung der neu gestarteten Applikation oder des Accessories. mID, Msg und Ver entsprechen den Feldern im Record TXAccAttr, pName zeigt auf den Namen des Accessories incl. der "Extended names".
Die genaue Funktionsweise steht in der XAcc-Dokumentation und ist auch für Programmierer an dieser Stelle unwichtig, da ObjectGEM die komplette Verwaltung übernimmt.
Deklaration
function XAccIMG(OrgID: integer; pData: pointer; lData: longint; Final: boolean): boolean; virtual;
Beschreibung
Mit dieser Methode können IMG-Rastergrafiken empfangen werden. OrgID bezeichnet die AES-Kennung des Senders, pData zeigt auf die Daten (die unter MultiTOS im globalen Speicher liegen müssen). Die Grafik muß nicht an einem Stück gesendet werden, in diesem Fall ist Final erst dann true, wenn das letzte Teil versendet wird. lData gibt die Länge des zu verschickenden Teils in Bytes an. Wenn die Daten verarbeitet werden können, muß true zurückgegeben werden. Standard-Rückgabe ist false.
Wichtig: Um das Einlesen und Verarbeiten innerhalb dieser Methode muß man sich selbst kümmern!
Deklaration
function XAccInsert(accID,mID: integer; Msg, Ver: byte; pName: PChar): boolean; virtual;
Beschreibung
Diese Methode wird immer dann aufgerufen, wenn sich eine neue XAcc-Applikation angemeldet hat. Wenn die Applikation bereits angemeldet ist (sollte nicht vorkommen), wird false zurückgegeben. Ansonsten ist die Rückgabe true, die Daten (incl. der "Extended names") werden ausgewertet und in die XAccList eingetragen.
Wenn man darauf wartet, daß sich eine bestimmte Applikation (bzw. ein Programmtyp) ins System einklinkt, sollte man diese Methode überschreiben und nach Aufruf der geerbten Methode die XAccList auswerten.
Wichtig: Wenn pName einen Zeiger<=$7fff enthält, geht die Methode davon aus, daß ein falscher Pointer übergeben wurde und ignoriert den Aufruf!
Deklaration
function XAccKey(OrgID,Stat,Key: integer): boolean; virtual;
Beschreibung
Mit dieser Methode kann ein Tastendruck empfangen werden. OrgID ist die AES-Kennung der sendenden Applikation, Key enthält den Scancode der Taste und Stat den Status der Umschalttasten. Wenn der Tastendruck verarbeitet werden kann, muß true zurückgegeben werden. ObjectGEM leitet die Nachricht standardmäßig an MUKeybd weiter.
Deklaration
function XAccMeta(OrgID: integer; pData: pointer; lData: longint; Final: boolean): boolean; virtual;
Beschreibung
Mit dieser Methode können GEM-Vektorgrafiken empfangen werden. OrgID bezeichnet die AES-Kennung des Senders, pData zeigt auf die Daten (die unter MultiTOS im globalen Speicher liegen müssen). Die Grafik muß nicht an einem Stück gesendet werden, in diesem Fall ist Final erst dann true, wenn das letzte Teil versendet wird. lData gibt die Länge des zu verschickenden Teils in Bytes an. Wenn die Daten verarbeitet werden können, muß true zurückgegeben werden. Standard-Rückgabe ist false.
Wichtig: Um das Einlesen und Verarbeiten innerhalb dieser Methode muß man sich selbst kümmern!
Deklaration
function XAccText(OrgID: integer; pText: pointer): boolean; virtual;
Beschreibung
Mit dieser Methode können ASCII-Texte empfangen werden. OrgID bezeichnet die AES-Kennung des Senders, pText zeigt auf die Textdaten (die unter MultiTOS im globalen Speicher liegen müssen). Der Text darf nur ASCII-Codes>=32 enthalten, abgesehen von HT (Tab), LF und CR. Andere Steuerzeichen dürfen nur dann verwendet werden, wenn der Empfänger diese sicher auswerten kann.
Wichtig: Um das Einlesen und Verarbeiten innerhalb dieser Methode muß man sich selbst kümmern!
Deklaration
procedure IconSelect(OnOff: boolean; OffExc: integer); virtual;
Beschreibung
Wenn OnOff true ist, werden alle Icons des Desktops selektiert. Andernfalls werden die Icons deselektiert (auch die der Fenster in der MainWindow-Liste) - mit Ausnahme des Fensters mit dem GEM-Handle OffExc (wobei auch DESK übergeben werden kann).
Sollen alle Icons deselektiert werden, muß für OffExc id_No übergeben werden.
Deklaration
function FirstIcon(OnAll: boolean): PIcon; virtual;
Beschreibung
Ist OnAll true, wird ein Pointer auf das erste selektierte Icon geliefert. Ansonsten wird das erste von allen Icons zurückgegeben. Existiert kein entsprechendes Icon, erhält man nil.
Deklaration
function NextIcon: PIcon; virtual;
Beschreibung
Gibt das nächste selektiert Icon bzw. Icon überhaupt zurück, je nachdem, welche Parameter an TApplication.FirstIcon übergeben wurden.
Objekte dieses Typs verwalten sog. Push-Buttons, die normalerweise zum Verlassen des Dialogs führen (z.B. "OK", "Abbruch"). Aber auch die speziellen Aktions-Buttons (z.B. "Help") können hiermit recht einfach behandelt werden.
Pointer
PButton = ^TButton;
Methoden
Vorfahre
Nachfahre
Deklaration
constructor Init(AParent: PDialog; AnIndx,AnID: integer; UserDef: boolean; Hlp: string);
Beschreibung
Ruft den Vorfahren TControl.Init auf und setzt TControl.Style auf cs_PushButton (or bs_DefPushButton, falls es sich um den Default-Exit-Button handelt). Ist UserDef true und AnIndx der Index eines G_BUTTON-Objekts, wird TButton.Install aufgerufen, UsrDef auf true gesetzt und der Button im 3D-Look gezeichnet. Wenn UsrDef false ist und AnID eine der Konstanten id_OK..id_Esc enthält, wird aus dem Button ein spezieller Aktions-Button, der in TDialog gesondert behandelt wird. Ist der Button vom Typ G_BOXTEXT, wird er im Farbmodus dann automatisch gelb dargestellt. Soll dem Button keine spezielle Bedeutung zukommen, muß AnID gleich id_No sein.
Deklaration
destructor Done; virtual;
Beschreibung
Macht alle Veränderungen von TButton.Install rückgängig und ruft den Vorfahren TControl.Done auf.
Wenn UsrDef true ist, wird vorher noch Deinstall aufgerufen.
Deklaration
function Install: boolean; virtual;
Beschreibung
Wenn das Dialogelement vom Typ G_BUTTON ist, wird UsrDef auf true gesetzt und ein benutzerdefiniertes 3D-Button-Objekt installiert.
Wenn die Funktion false zurückliefert, wird die Installation von TButton.Init abgebrochen. Standardmäßig wird allerdings immer true zurückgegeben.
Deklaration
procedure Deinstall; virtual;
Beschreibung
Macht die Änderungen von TButton.Install rückgängig. Wird von TButton.Done aufgerufen.
Deklaration
function GetText: string; virtual;
Beschreibung
Gibt den Text des Dialogelementobjekts zurück.
Wichtig: Eine evtl. vorhandene Shortcut-Markierung ('&') wird aus der Zeichenkette entfernt!
Deklaration
procedure SetText(ATextString: string); virtual;
Beschreibung
Ändert den Text des Buttons. Der Shortcut für den Button muß mit '&' markiert werden (z.B. '&OK'), dieser braucht nicht mit dem früheren Shortcut identisch zu sein! Anschließend wird der Button neu gezeichnet.
Mit TCheckBox werden Buttons verwaltet, die jeder für sich einen Zustand repräsentieren ("an", "aus"). Der angeschaltete Zustand wird dabei normalerweise durch ein Häkchen gekennzeichnet.
Pointer
PCheckBox = ^TCheckBox;
Methoden
Vorfahre
Nachfahren
Deklaration
constructor Init(AParent: PDialog; AnIndx: integer; UserDef: boolean; Hlp: string);
Beschreibung
Ruft den Vorfahren TButton.Init auf, setzt TControl.Style auf cs_CheckBox und schaltet den Transfer-Mechanismus ein. Ist UserDef true, wird die Checkbox im 3D-Look gezeichnet.
Deklaration
function Install: boolean; virtual;
Beschreibung
Wenn das Dialogelement vom Typ G_BUTTON ist, wird UsrDef auf true gesetzt und die Checkbox im 3D-Look gezeichnet.
Wenn die Funktion false zurückliefert, wird die Installation von TCheckBox.Init abgebrochen. Standardmäßig wird allerdings immer true zurückgegeben.
Deklaration
procedure Deinstall; virtual;
Beschreibung
Hier können Änderungen von TCheckBox.Install rückgängig gemacht werden.
Standardmäßig wird TButton.Deinstall aber nur mit einer Leermethode überschrieben und damit ineffektiv gemacht.
Deklaration
function Transfer(DataPtr: pointer; TransferFlag: word): word; virtual;
Beschreibung
Überträgt den Zustand der Checkbox (siehe bf_XXXX-Konstanten) vom und in das Word, auf das DataPtr zeigt. Rückgabe ist immer 2.
Deklaration
procedure SetCheck(CheckFlag: integer); virtual;
Beschreibung
Setzt den Zustand der Checkbox, d.h. bf_Checked oder bf_Unchecked (bzw. bei TTriState evtl. auch bf_Grayed).
Deklaration
function GetCheck: integer; virtual;
Beschreibung
Gibt den Zustand der Checkbox zurück.
Deklaration
procedure Check; virtual;
Beschreibung
Ruft SetCheck(bf_Checked) auf und markiert dadurch das Dialogelement.
Deklaration
procedure Uncheck; virtual;
Beschreibung
Ruft SetCheck(bf_Unchecked) auf und versetzt das Dialogelement dadurch in den nichtmarkierten Zustand.
Deklaration
procedure Toggle; virtual;
Beschreibung
Der Objektstatus wird zwischen bf_Unchecked und bf_Checked gewechselt (bzw. bei TTriState in der Reihenfolge bf_Unchecked, bf_Checked, bf_Grayed zyklisch durchlaufen).
TClipboard regelt den Zugriff auf das globale AES-Klemmbrett. Eine Beschreibung findet sich unter "Clipboard-Verwaltung".
Pointer
PClipboard = ^TClipboard;
Felder
Methoden
Vorfahre
Nachfahre
-
Deklaration
Parent: PObject; (nur lesen)
Beschreibung
Enthält einen Zeiger auf das besitzende Objekt.
Wird von TClipboard.Init gesetzt.
Deklaration
constructor Init(AParent: PObject);
Beschreibung
Ruft zunächst den Vorfahren TObject.Init auf, danach wird TClipboard.Parent auf AParent gesetzt.
Deklaration
function CloseClipboard: boolean; virtual;
Beschreibung
Schließt das Klemmbrett und gibt es damit wieder frei. Wenn schreibend zugegriffen wurde, wird anschließend eine SC_CHANGED-Message verschickt. Damit diese korrekt gesetzt wird, sollte vorher SetClipboardFormat aufgerufen werden. Wenn das Klemmbrett geschlossen werden konnte, wird true zurückgegeben.
Zusätzlich werden eine SH_WDRAW- und AV_PATH_UPDATE- Message verschickt, wenn das Klemmbrett verändert wurde.
Deklaration
function EmptyClipboard: boolean; virtual;
Beschreibung
Löscht alle 'SCRAP.*'-Dateien im Klemmbrett. Wenn das Klemmbrett anschließend leer ist, wird true zurückgegeben und SetClipboardFormat(SCF_INDEF,`) aufgerufen.
Wird von TClipboard.OpenClipboard aufgerufen.
Deklaration
function GetClipboardFilename: string; virtual;
Beschreibung
Gibt den Pfad und Dateinamen (ohne Extension) des Klemmbretts zurück (z.B. 'C:\CLIPBRD\SCRAP.') oder einen Leerstring, wenn das Clipboard-Objekt keine Zugriffsberechtigung besitzt.
Deklaration
function GetPriorityClipboardFormat (PriorityList: string): string; virtual;
Beschreibung
Sucht in einer Liste von Extensions (durch Punkte getrennt) die Extension heraus, die im Klemmbrett vorhanden ist und in der Liste am weitesten links steht. Wenn also nur die Datei 'SCRAP.ASC' im Klemmbrett vorhanden ist und mit 'TXT.ASC.TEX' als Liste gesucht wird, erhält man als Rückgabe 'ASC'.
Deklaration
function IsClipboardFormatAvailable (Format: string): boolean; virtual;
Beschreibung
Gibt true zurück, wenn die Datei mit der Extension Format (mit oder ohne Punkt) im Klemmbrett vorhanden ist.
Falls das Clipboard-Objekt keine Zugriffsberechtigung besitzt, wird immer false zurückgegeben.
Deklaration
function IsOpen: boolean; virtual;
Beschreibung
Gibt true zurück, wenn das Klemmbrett mit der Methode TClipboard.OpenClipboard geöffnet werden konnte, false sonst.
Deklaration
function OpenClipboard(Write: boolean): boolean; virtual;
Beschreibung
Holt die Zugriffsberechtigung für das Klemmbrett.
Wenn schreibend zugegriffen werden soll, muß in Write true übergeben werden - dann wird außerdem EmptyClipboard aufgerufen.
Wenn noch kein Pfad für das Klemmbrett existiert, wird ein geeigneter ermittelt und global gesetzt. Dazu werden nicht nur die Systemfunktionen benutzt, sondern auch die Environmentvariablen CLIPBRD und SCRAPDIR abgefragt.
Konnte das Klemmbrett geöffnet werden, wird true zurückgegeben, ansonsten (wenn z.B. eine andere Applikation das Klemmbrett belegt) false.
Deklaration
procedure SetClipboardFormat(Mask: word; Ext: string); virtual;
Beschreibung
Wenn auf das Klemmbrett schreibend zugegriffen wurde, sollte mit dieser Methode der geschriebene Dateityp gesetzt werden (wird in Ext - mit oder ohne Punkt - übergeben). In Mask wird eine der SCF_XXXX-Konstanten eingetragen.
Wenn in Ext kein Leerstring übergeben wird, wird nötigenfalls ein Punkt vor die Extension gesetzt und die Zeichenkette mit Nullbytes aufgefüllt.
Wenn man in Mask SCF_INDEF und in Ext einen Leerstring übergibt, zeigt man damit an, daß das Klemmbrett gelöscht wurde (wird u.a. von EmptyClipboard genutzt).
TCollection ist ein Datentyp für dynamische Arrays, der seine Größe zur Laufzeit automatisch verändern kann. Standardmäßig werden Nachfahren von TObject verwaltet, abgeleitete Objekte speichern z.B. Zeichenketten (TStringCollection). Routinen wie das Iterieren von Elementen erleichtern die Programmierung.
Pointer
PCollection = ^TCollection;
Felder
Methoden
Vorfahre
Nachfahre
Deklaration
Items: PItemList; (nur lesen)
Beschreibung
Ein Zeiger auf ein Array von Elementzeigern.
Deklaration
Limit: longint; (nur lesen)
Beschreibung
Die Anzahl der z.Z. reservierten Element-Einträge in der Items-Liste. Ist meistens größer als Count (leere Einträge!).
Deklaration
Count: longint; (nur lesen)
Beschreibung
Die tatsächliche Anzahl der z.Z. gespeicherten Elemente in der Items-Liste, immer kleiner als MaxCollectionSize.
Deklaration
Delta: longint; (nur lesen)
Beschreibung
Die Anzahl der Elemente, um die die Items-Liste vergrößert wird, wenn sie voll ist. Ist Delta=0, kann die Kollektion nicht vergrößert werden, sie ist dann also auf Limit beschränkt.
Deklaration
constructor Init(ALimit,ADelta: longint);
Beschreibung
Ruft den Vorfahren TObject.Init auf und setzt Delta auf ADelta. Ist ADelta kleiner als Null, wird Delta auf Null gesetzt. Danach wird Items mit der Anfangsgröße von ALimit Elementen initialisiert. Die Kollektion kann sich danach bei Bedarf mit der Schrittweite Delta vergrößern, bis kein Speicher mehr vorhanden ist oder MaxCollectionSize Elemente gespeichert sind.
Deklaration
destructor Done; virtual;
Beschreibung
Gibt alle Elemente mit FreeAll frei und löscht danach die Items-Liste mit SetLimit(0). Zum Schluß wird TObject.Done aufgerufen.
Deklaration
function At(Index: longint): pointer; virtual;
Beschreibung
Gibt einen Zeiger auf das Element mit der Nummer Index zurück, wodurch Items wie ein indiziertes Array behandelt werden kann. Ist Index kleiner als Null bzw. größer gleich Count, wird nil zurückgegeben. Außerdem wird dann TCollection.Error mit den Werten coIndexError und Index aufgerufen.
Deklaration
procedure AtDelete(Index: longint); virtual;
Beschreibung
Löscht das Element mit der Nummer Index und schiebt alle folgenden Elemente um eine Position nach oben. Count wird um eins erniedrigt, Limit wird jedoch beibehalten. Ist Index kleiner als Null bzw. größer gleich Count, wird TCollection.Error mit den Werten coIndexError und Index aufgerufen.
Deklaration
procedure AtFree(Index: longint); virtual;
Beschreibung
Löscht das Element mit der Nummer Index und gibt es frei.
Deklaration
procedure AtInsert(Index: longint; Item: pointer); virtual;
Beschreibung
Fügt Item an der Position Index in Items ein und verschiebt alle folgenden Elemente um eins nach unten. Ist Count vor dem Aufruf gleich Limit, wird die Kollektion um Delta Elemente vergrößert. Kann sie nicht vergrößert werden, wird TCollection.Error mit dem Wert coOverflow aufgerufen (kann die Kollektion nicht vergrößert werden, weil Delta=0 ist, wird Error mit dem Wert coIndexError aufgerufen). Ist Index kleiner als Null bzw. größer gleich Count, wird Error mit den Werten coIndexError und Index aufgerufen.
Deklaration
procedure AtPut(Index: longint; Item: pointer); virtual;
Beschreibung
Ersetzt das Element mit der Nummer Index durch Item. Ist Index kleiner als Null bzw. größer gleich Count, wird TCollection.Error mit den Werten coIndexError und Index aufgerufen.
Deklaration
procedure Delete(Item: pointer); virtual;
Beschreibung
Löscht das Element, auf das Item zeigt, aus der Kollektion. Entspricht AtDelete(IndexOf(Item)).
Deklaration
procedure DeleteAll; virtual;
Beschreibung
Setzt Count auf Null und löscht damit alle Elemente aus der Kollektion. Wichtig: Die aktuelle, durch Limit angegebene Größe bleibt bestehen!
Deklaration
procedure Error(Code,Info: longint); virtual;
Beschreibung
Wird aufgerufen, wenn z.B. einer Methode ein ungültiger Index übergeben wird oder ein Speicherüberlauf innerhalb der Kollektion auftritt. Standardmäßig erzeugt diese Methode einen Laufzeitfehler mit der Nummer 212-Code.
Deklaration
function FirstThat(Test: PIterationFunc): pointer;
Beschreibung
FirstThat ruft für jedes Element der Kollektion die durch Test bestimmte boolesche Funktion auf, bis Test true zurückgibt. FirstThat gibt dann den Elementzeiger zurück, für den Test true zurückgegeben hat, oder nil, falls Test immer false geliefert hat. Der Pointer Test sollte eine globale (Unterschied zu ObjectWindows!) Funktion sein, der ein pointer-Parameter übergeben wird und die boolean zurückgibt.
Achtung: Im Gegensatz zu ObjectWindows kann bei einer lokalen Test-Funktion nicht auf die Variablen der übergeordneten Routine zugegriffen werden!
Beispiel
function Passt(p: pointer): boolean; { ... }
Passt sollte eine globale Funktion sein. Sei Liste ein TCollection-Objekt:
p:=Liste.FirstThat(@Passt);
Deklaration
procedure ForEach(Action: PIterationProc);
Beschreibung
ForEach ruft für jedes Element der Kollektion die durch Action bestimmte Prozedur auf. Der Pointer Action sollte eine GLOBALE (Unterschied zu ObjectWindows!) Prozedur sein, der ein pointer-Parameter übergeben wird.
Achtung: Im Gegensatz zu ObjectWindows kann bei einer lokalen Prozedur nicht auf die Variablen der übergeordneten Routine zugegriffen werden!
Beispiel
procedure ZeigeAn(p: pointer); { ... }
ZeigeAn sollte eine globale Prozedur sein. Sei Liste ein TCollection-Objekt:
Liste.ForEach(@ZeigeAn);
Deklaration
procedure Free(Item: pointer);
Beschreibung
Löscht das Element, auf das Item zeigt, und gibt es frei. Entspricht Delete(Item); FreeItem(Item);.
Deklaration
procedure FreeAll; virtual;
Beschreibung
Löscht alle Elemente und gibt sie frei.
Deklaration
procedure FreeItem(Item: pointer); virtual;
Beschreibung
Gibt das Element frei, auf das Item zeigt. Standardmäßig geht diese Methode davon aus, daß die Elemente Nachfahren von TObject sind, d.h. das Element wird mit Dispose(PObject(Item),Done) freigegeben. Die Methode muß überschrieben werden, wenn andere Elemente verwaltet werden sollen (z.B. Strings, siehe TStringCollection.FreeItem).
FreeItem wird von TCollection.Free und FreeAll aufgerufen und sollte niemals direkt aufgerufen werden!
Deklaration
function IndexOf(Item: pointer): longint; virtual;
Beschreibung
Gibt die Nummer des Element zurück, auf das Item zeigt, und ist damit das Gegenstück zu TCollection.At. Befindet sich Item nicht in der Kollektion, wird -1 zurückgegeben.
Deklaration
procedure Insert(Item: pointer); virtual;
Beschreibung
Fügt das Element Item in die Kollektion ein. Standardmäßig geschieht dies mit AtInsert(Count,Item) am Ende der Kollektion.
Deklaration
function LastThat(Test: PIterationFunc): pointer; virtual;
Beschreibung
LastThat ruft in umgekehrter Reihenfolge für jedes Element der Kollektion die durch Test bestimmte boolesche Funktion auf, bis Test true zurückgibt. LastThat gibt dann den Elementzeiger zurück, für den Test true zurückgegeben hat, oder nil, falls Test immer false geliefert hat. Test sollte eine globale (Unterschied zu ObjectWindows!) Funktion sein, der ein pointer-Parameter übergeben wird und die boolean zurückgibt.
Achtung: Im Gegensatz zu ObjectWindows kann bei einer lokalen Test-Funktion nicht auf die Variablen der übergeordneten Routine zugegriffen werden!
Beispiel
function Passt(p: pointer): boolean; { ... }
Passt sollte eine globale Funktion sein. Sei Liste ein TCollection-Objekt:
p:=Liste.LastThat(@Passt);
Deklaration
procedure Pack; virtual;
Beschreibung
Löscht alle nil-Zeiger in der Kollektion und setzt danach Limit auf den kleinstmöglichen Wert (d.h. auf Count).
Deklaration
procedure SetLimit(ALimit: longint); virtual;
Beschreibung
Vergrößert oder Verkleinert die Kollektion auf maximal ALimit Elemente. Ist ALimit kleiner als Count, wird die Limit auf Count gesetzt, ist ALimit größer als MaxCollectionSize, wird Limit auf MaxCollectionSize gesetzt.
TComboBox ist das Dialogelementobjekt für Popup-Menüs innerhalb von Dialogen. Das Objekt kümmert sich automatisch um die Abarbeitung des Popups und eines evtl. damit verknüpften TEdit-Objekts. Um die ComboBox kontextsensitiv zu gestalten, muß die Methode TComboBox.Work überschrieben werden.
Pointer
PComboBox = ^TComboBox;
Felder
Methoden
Vorfahre
Nachfahre
-
Deklaration
Edit: PEdit; (nur lesen)
Beschreibung
Wird von TComboBox.Init mit GetEdit belegt, wenn das Popup-Menü mit einem Eingabefeld verknüpft werden soll.
Deklaration
Popup: PPopup; (nur lesen)
Beschreibung
Zeigt auf das TPopup-Objekt der ComboBox. Wird von TComboBox.Init gesetzt.
Deklaration
constructor Init(AParent: PDialog; AnIndx,CycleIndx, TitleIndx,ptIndx,popIndx: integer; Cycle,Editable: boolean; Hlp: string);
Beschreibung
Zuerst wird der Vorfahre TControl.Init(AParent,AnIndx,Hlp) aufgerufen. Wenn Editable true ist, wird TComboBox.Edit danach mit GetEdit belegt, ansonsten zeigt Edit auf nil. Danach werden die internen Variablen angepaßt und zum Schluß SetSelection(0) aufgerufen.
In AnIndx wird der Index des Popup-Wert-Elements übergeben. Das ist das Element, das immer mit der aktuellen Auswahl sichtbar ist. Wenn in Editable true übergeben wird, muß dieses Element ein editierbares Objekt sein.
In CycleIndx wird das Element übergeben, mit dem der Popup-Wert um eins weiter geschaltet wird bzw. mit dem das Popup-Menü geöffnet wird, je nachdem ob Cycle true oder false ist. Dieses Objekt sollte vom Typ G_BOXCHAR sein, damit dort Attr.PopChar eingetragen werden kann.
TitleIndx bezeichnet das Objekt, das vor dem Popup-Wert-Objekt steht; dies ist quasi der Titel oder die Beschreibung des Popups. In diesem String kann auch ein Hotkey (wie üblich mit '&') festgelegt werden.
ptIndx und popIndx bezeichnen schließlich das Popup-Menü an sich, der Aufbau ist unter TPopup beschrieben.
Deklaration
destructor Done; virtual;
Beschreibung
TComboBox.Popup und TComboBox.Edit werden freigegeben, danach wird der Vorfahre TControl.Done aufgerufen.
Deklaration
procedure Changed(AnIndx: integer; DblClick: boolean); virtual;
Beschreibung
In dieser Methode findet die gesamte Abarbeitung der ComboBox statt. Durch TComboBox.TestIndex wird diese Methode bei Anwahl jedes Objektes, das mit dem Popup verknüpft ist, aufgerufen.
Wurde die aktuelle Auswahl des Popups geändert, wird anschließend TComboBox.Work aufgerufen.
Deklaration
function GetEdit: PEdit; virtual;
Beschreibung
Liefert ein TEdit-Objekt zurück, wenn ein solches mit der ComboBox verknüpft werden soll. Dazu wird diese Methode von TComboBox.Init abgefragt.
Wenn man ein "besonderes" (d.h. abgeleitetes) Eingabefeld haben möchte, muß man diese Methode überschreiben und ein entsprechendes Objekt zurückgeben.
Deklaration
function GetSelection: integer; virtual;
Beschreibung
Gibt die Nummer (>=0) der aktuellen Auswahl des Popups zurück.
Deklaration
function GetText: string; virtual;
Beschreibung
Liefert die aktuelle Auswahl des Popups als Zeichenkette. Wenn die ComboBox mit einem Eingabefeld verknüpft ist, wird TComboBox.Edit^.GetText zurückgegeben.
Deklaration
procedure Paint; virtual;
Beschreibung
Zeichnet den Titel, das Wert-Element und den Cycle-Button neu. Wenn ein Eingabefeld mit der ComboBox verknüpft ist, wird intern TComboBox.Edit^.Paint aufgerufen.
Deklaration
procedure SetSelection(Sel: integer); virtual;
Beschreibung
Setzt die Auswahl des Popups auf den Index Sel (>=0), wobei die Anzeige etc. automatisch aktualisiert wird.
Deklaration
procedure SetText(ATextString: string); virtual;
Beschreibung
Setzt den Text des Wert-Element (ObjIndx) auf ATextString. Wenn ein Eingabefeld mit der ComboBox verknüpft ist, wird dazu TComboBox.Edit^.SetText aufgerufen.
Wichtig: Der Index der Popup-Markierung wird nicht angepaßt, wenn der neue String mit einer Zeichenkette des Popups übereinstimmt! Dies muß mit TComboBox.SetSelection geschehen (bzw. wird intern automatisch durchgeführt).
Deklaration
function TestIndex(AnIndx: integer): boolean; virtual;
Beschreibung
Gibt true zurück, wenn eines der ComboBox-Elemente (ObjIndx [=Wert], Title, Cycle-Button) angewählt wurde.
ObjIndx wird allerdings nur ausgewertet, wenn TComboBox.Edit nicht belegt ist, d.h. wenn die ComboBox mit keinem Eingabefeld verknüpft ist.
Deklaration
function Transfer(DataPtr: pointer; TransferFlag: word): word; virtual;
Beschreibung
Überträgt Daten vom bzw. in das Objekt. Der genaue Aufbau der Struktur ist unter TransferBuffer beschrieben.
Deklaration
procedure Work; virtual;
Beschreibung
Dies ist eine abstrakte Methode, die zunächst nichts macht. Sie wird aber bei jeder Wertänderung des Popups aufgerufen, so daß hiermit z.B. andere Buttons kontextsensitiv gemacht werden können.
TControl ist das grundlegende Dialogelementobjekt von ObjectGEM, d.h. jedem Element in einer Resource, das abgefragt oder verändert werden soll (Buttons, Edit-Felder), sollte ein von TControl abgeleitetes Objekt zugeordnet werden (durch die TControl.Init-Methode). Dadurch kann dieses Element dann sehr einfach mit Hilfe der TControl-Methoden behandelt werden (Status etc.).
Pointer
PControl = ^TControl;
Felder
Methoden
Vorfahre
Nachfahren
Deklaration
ID: integer;
Beschreibung
Legt fest, ob dem Dialogelementobjekt beim Verlassen des Dialogs eine besondere Bedeutung zukommen soll. Wird von TControl.Init auf id_No gesetzt und von TButton bzw. TScrollBar verändert.
Deklaration
Flags: byte;
Beschreibung
Beschreibt zusätzliche Eigenschaften des Dialogelementobjekts. Wird z.Z. nur von DisableTransfer bzw. EnableTransfer direkt verändert. TControl.Init nullt das Feld aus.
Deklaration
ObjAddr: PObj; (nur lesen)
Beschreibung
TControl.Init setzt hier die zum Dialogelement TControl.ObjIndx gehörige Adresse ein.
Deklaration
ObjIndx: integer; (nur lesen)
Beschreibung
Enthält die Nummer des Dialogelementobjekts, die an TControl.Init übergeben wird. Aus diesem Index kann TControl.ObjAddr berechnet werden.
Deklaration
Parent: PDialog; (nur lesen)
Beschreibung
Enthält einen Zeiger auf das zugehörige TDialog-Objekt. Dort werden alle Dialogelementobjekte in der durch TControl.Previous und TControl.Next verketteten Liste CtrlList verwaltet.
Parent wird von TControl.Init gesetzt.
Deklaration
Style: word; (nur lesen, s.u.)
Beschreibung
Wird von TControl.Init ausgenullt. Abgeleitete Objekte tragen hier Konstanten ein, durch die die Art des Dialogelementobjekts ermittelt werden kann. Abgesehen von es_ASCIIOnly und sts_Fill ist dieses Feld nur zum Lesen freigegeben.
Deklaration
UsrBlk: USERBLK; (nur lesen)
Beschreibung
Wenn UsrDef true ist, enthält diese Struktur alle nötigen Daten zum Zeichnen des neuen Dialogelements. TControl.Init nullt dieses Feld aus.
Deklaration
UsrDef: boolean; (nur lesen)
Beschreibung
Ist dieses Feld true, verwendet das von TControl abgeleitete Objekt die UsrBlk-Struktur, d.h. das Dialogelement wird in einem ObjectGEM-eigenen Stil gezeichnet.
Wird von TControl.Init auf false gesetzt.
Deklaration
constructor Init(AParent: PDialog; AnIndx: integer; Hlp: string);
Beschreibung
Ruft den Vorfahren TObject.Init auf und setzt TControl.ObjIndx auf AnIndx, TControl.ID auf id_No und TControl.Parent auf AParent. Hlp wird als Text für die BubbleHelp verwendet, TControl.Style und Flags werden ausgenullt und der Shortcut gelöscht, so daß TestShortCut standardmäßig false zurückliefert. Außerdem wird das Dialogelement in die CtrlList des zugehörigen TDialog-Objekts eingetragen.
Wenn in AParent nil übergeben wird oder TControl.ObjAddr nicht ermittelt werden kann, bricht die Initialisierung ab und man erhält einen Nullzeiger. Da Flags auf Null gesetzt wird, nehmen TControl-Objekte standardmäßig nicht am Datentransfermechanismus teil.
Außerdem werden UsrDef und UsrBlk initialisiert.
Deklaration
destructor Done; virtual;
Beschreibung
Löscht das Dialogelement aus der CtrlList des zugehörigen TDialog-Objekts und ruft TObject.Done auf.
Deklaration
function TestIndex(AnIndx: integer): boolean; virtual;
Beschreibung
Gibt true zurück, wenn der übergebene Index mit TControl.ObjIndx übereinstimmt. Wird benutzt um zu überprüfen, welches Dialogelement angewählt wurde.
Deklaration
function TestID(AnID: integer): boolean; virtual;
Beschreibung
Gibt true zurück, wenn AnID mit TControl.ID übereinstimmt. Wird beim Verlassen des Dialogs benutzt, um evtl. speziell auf das Exit-Objekt reagieren zu können.
Deklaration
function TestShortCut(Key: integer): boolean; virtual;
Beschreibung
Gibt true zurück, wenn Key mit dem Shortcut des Dialogelementobjekts übereinstimmt. Key enthält dabei den ASCII-Wert des Zeichens (ohne Alternate-Status), Kleinbuchstaben müssen vorher in Großbuchstaben umgewandelt werden. Der Shortcut wird von der TButton.SetText-Methode gesetzt.
Deklaration
procedure SetShortCut(Key: char); virtual;
Beschreibung
Setz den Shortcut für das TControl-Objekt, mit dem dieses (zusammen mit <Alternate>) angewählt werden kann.
Kleinbuchstaben werden automatisch in Großbuchstaben umgewandelt. Mit #0 kann der Shortcut gelöscht werden.
Deklaration
procedure SetFlags(Mask: byte; OnOff: boolean); virtual;
Beschreibung
Setzt oder löscht die durch Mask angegebenen Bits in Flags, je nachdem ob OnOff true oder false ist.
Deklaration
function IsFlagSet(Mask: byte): boolean;
Beschreibung
Gibt true zurück, wenn die in Mask angegebenen Bits in Flags gesetzt sind.
Deklaration
procedure SetState(StateFlag: integer); virtual;
Beschreibung
Macht das Dialogelement anwählbar bzw. nicht anwählbar. Zulässige Werte für StateFlag sind bf_Enabled und bf_Disabled.
Deklaration
function GetState: integer; virtual;
Beschreibung
Gibt den Zustand des Dialogelements zurück (bf_Enabled, bf_Disabled).
Deklaration
procedure Disable; virtual;
Beschreibung
Ruft SetState(bf_Disabled) auf und macht das Dialogelement somit nicht anwählbar.
Deklaration
procedure Enable; virtual;
Beschreibung
Ruft SetState(bf_Enabled) auf und macht das Dialogelement dadurch anwählbar.
Deklaration
procedure EnableTransfer; virtual;
Beschreibung
Ruft SetFlags(wb_Transfer,true) auf und beteiligt das Dialogelement am Datentransfermechanismus.
Deklaration
procedure DisableTransfer; virtual;
Beschreibung
Ruft SetFlags(wb_Transfer,false) auf und nimmt das Dialogelement dadurch vom Datentransfermechanismus aus.
Deklaration
function Transfer(DataPtr: pointer; TransferFlag: word): word; virtual;
Beschreibung
Dies ist eine abstrakte Methode, die nichts weiter macht als Null zurückzuliefern. Sie wird aber von anderen Objekten überschrieben, um Daten in das Element bzw. aus dem Element heraus zu übertragen. DataPtr zeigt dabei auf die zu setzenden Daten bzw. auf einen Puffer, der die ausgelesenen Daten aufnimmt. TransferFlag muß eine der tf_XXXX-Konstanten enthalten.
Die Rückgabe entspricht der Anzahl der übertragenen Bytes, muß aber immer gerade sein (evtl. aufrunden).
Deklaration
procedure Changed(AnIndx: integer; DblClick: boolean); virtual;
Beschreibung
Wird von TDialog.CallChanged aufgerufen, wenn das Dialogelement aufgerufen wird und dadurch seinen Status ändert. Standardmäßig macht diese Methode nichts, durch sie können Dialogboxen aber kontextsensitiv werden, indem z.B. in dieser Methode der Zustand eines Buttons etc. in Abhängigkeit vom Zustand des Dialogelements geändert wird.
AnIndx gibt den Index des angewählten Dialogelements an (sollte mit TControl.ObjIndx übereinstimmen), DblClick zeigt an, ob das Element mit Doppelklick angewählt wurde.
Deklaration
procedure Paint; virtual;
Beschreibung
Ruft Parent^.ObjcPaint auf, d.h. das Dialogelement wird gezeichnet. Befindet sich der zugehörige Dialog in einem Fenster, wird die Rechteckliste automatisch beachtet.
An ObjcPaint wird der Index des Dialogelements (TControl.ObjIndx) und ein boolean-Parameter übergeben, der true ist, wenn wb_Lazy gesetzt ist.
Deklaration
procedure Hide(Draw: boolean); virtual;
Beschreibung
Macht das Dialogelement unsichtbar. Ist Draw true, wird dann das übergeordnete Dialogelement gezeichnet, damit das Element auch auf dem Bildschirm (und nicht nur logisch) verschwindet.
Wenn man allerdings direkt nach Hide ein anderes Dialogelement an derselben Stelle mit TControl.Unhide sichtbar macht, kann Draw auf false gesetzt werden (Achtung allerdings bei Elementen, die nicht deckend gezeichnet werden, z.B. Images).
Deklaration
procedure Unhide; virtual;
Beschreibung
Macht das Dialogelement sichtbar und zeichnet es.
Deklaration
function IsHidden: boolean; virtual;
Beschreibung
Gibt true zurück, wenn das Dialogelement unsichtbar ist, false sonst.
Deklaration
function GetColor: integer; virtual;
Beschreibung
Liefert den Farbindex (0..15) des Dialogelements zurück. Wenn es sich nicht um ein G_BOX-, G_IBOX-, G_BOXCHAR-, G_TEXT-, G_BOXTEXT-, G_FTEXT-, G_ICON-, G_FBOXTEXT- oder G_IMAGE-Objekt handelt, ist die Rückgabe standardmäßig Black.
Deklaration
procedure SetColor(Color: integer); virtual;
Beschreibung
Setzt die Farbe des Dialogelements neu. In Color wird dazu der entsprechende Farbindex (0..15) übergeben.
Anschließend wird das Element neu gezeichnet.
Deklaration
function IsHelpAvailable: boolean; virtual;
Beschreibung
Gibt true zurück, wenn das Dialogelementobjekt mit TControl.GetHelp einen Hilfstext für die BubbleHelp liefern kann.
Deklaration
function GetHelp: string; virtual;
Beschreibung
Gibt einen Hilfstext für die BubbleHelp zurück.
Deklaration
procedure SetHelp(Hlp: string); virtual;
Beschreibung
Weist dem Dialogelementobjekt einen neuen Hilfstext für die BubbleHelp zu.
Deklaration
function Previous: PControl;
Beschreibung
Gibt einen Zeiger auf das vorhergehende TControl-Objekt in der CtrlList des zugehörigen TDialog- Objekts zurück. Ist kein weiteres Objekt vorhanden, erhält man einen nil-Zeiger, d.h. in diesem Fall zeigt CtrlList genau auf das aktuelle Objekt.
Deklaration
function Next: PControl;
Beschreibung
Gibt einen Zeiger auf das nächste TControl-Objekt in der CtrlList des zugehörigen TDialog-Objekts zurück. Ist kein weiteres Objekt vorhanden, erhält man einen nil-Zeiger.
TDialog ist der grundlegende Objekttyp für alle (Fenster-)Dialoge, d.h. modale und nicht-modale Dialogboxen. Die Abarbeitung erfolgt normalerweise automatisch, kann aber auch "von Hand" vorgenommen werden.
Die einfache Bearbeitung eines modalen Dialogs kann auch mit TApplication.ExecDialog durchgeführt werden, allerdings sollten Dialoge nach Möglichkeit im Fenster (also nicht-modal) dargestellt werden, da sonst das gesamte System blockiert wird, was unter einem Multitasking-Betriebssystem Probleme bereiten kann.
Pointer
PDialog = ^TDialog;
Felder
Methoden
Vorfahre
Nachfahren
-
Deklaration
Cont: boolean;
Beschreibung
Dieses Flag zeigt an, ob die Dialogbearbeitung fortgesetz wird (true) oder ob der Dialog beendet werden soll (false).
Von TDialog.SetupWindow wird es auf false initialisiert, von TDialog.OpenWindow auf true und von TDialog.CloseWindow wieder auf false gesetzt. Veränderungen werden u.a. in TDialog.WMButton und im Tastatur-Handler des Dialogs durch ObjectGEM-interne form_button()- bzw. form_keybd()-Routinen vorgenommen.
Modale Dialoge nutzen dieses Flag in der Methode TDialog.Execute als Abbruchbedingung.
Normalerweise muß dieses Flag weder beachtet noch manipuliert werden, einzig in TDialog.EndDlg kann dadurch die Abarbeitung sinnvoll gesteuert werden (aber auch dort gibt es genug andere Möglichkeiten, die auch genutzt werden sollten).
Deklaration
CtrlList: PControl; (nur lesen)
Beschreibung
In dieser Liste werden die Dialogelementobjekte verwaltet. TControl-Schnittstellenobjekte tragen sich bei ihrer Initialisierung hier ein. Alle Auswertungen der Benutzeraktionen werden mit den Objekten in dieser Liste durchgeführt.
Mit TDialog.FirstThat und TDialog.ForEach kann diese Liste recht einfach durchlaufen werden.
Wird von TDialog.SetupWindow mit nil initialisiert.
Deklaration
IsModal: boolean; (nur lesen)
Beschreibung
Dieses Flag gibt an, ob es sich um einen modalen Dialog handelt (true), d.h. das System wird während der Abarbeitung blockiert. Nur dieses Flag darf zur Unterscheidung zwischen modalen und nicht-modalen Dialogen verwendet werden!
Wird von TDialog.SetupWindow gesetzt und von TDialog.Create nötigenfalls korrigiert. Modale Dialoge werden mit TDialog.Execute abgearbeitet.
Deklaration
Result: integer;
Beschreibung
In diesem Feld steht nach erfolgreicher Abarbeitung des Dialogs der Index des Dialogelements, mit dem die Dialogbox verlassen wurde.
Wird z.B. von den Methoden TApplication.ExecDialog und TApplication.Alert benötigt, derentwegen normalerweise kein direkter Zugriff auf dieses Feld nötig ist.
Deklaration
TransferBuffer: pointer;
Beschreibung
Dieses Feld kann auf einen sog. Transfer-Puffer des Dialogs zeigen, der das Belegen und Auswerten aller Dialogelementobjekte, die am Datentransfermechanismus teilnehmen können, erheblich vereinfacht.
Wird von TDialog.SetupWindow auf nil gesetzt, d.h. der Transfermechanismus ist ausgeschaltet. Will man einen Transfer-Puffer installieren, sollte man die Methode SetupWindow überschreiben und nach dem Aufruf der geerbten Methode TransferBuffer auf diesen Puffer (der schon wie gewünscht vorbelegt sein sollte) setzen.
Ein Transfer-Puffer ist normalerweise ein Record, in dem für alle Dialogelementobjekte in der Reihenfolge ihrer Initialisierung (!) Felder vorhanden sind. Dialogelementobjekten, die keine Daten übertragen, werden auch keine Felder zugewiesen. Folgende Felder sind z.Z. notwendig:
Objekt | Transferpuffer-Feld |
TCheckBox | ein word (oder integer), das eine |
der bf_XXXX-Konstanten enthält | |
TTriState | siehe TCheckBox |
TRadioButton | siehe TCheckBox |
TScrollBar | ein TScrollBarTransferRec-Record |
zum Speichern des Bereichs und der | |
Position der Bildlaufleiste | |
TStatic | ein string[x], wobei x:=TextLen-1 |
ist (d.h. die maximale Anzahl von | |
Zeichen in diesem Textobjekt ohne | |
das abschließende Nullbyte); | |
ist x gerade, muß x um eins | |
erhöht werden! | |
TEdit | siehe TStatic |
TComboBox | wenn die ComboBox mit einem Eingabe- |
feld verknüpft ist, wird zuerst ein | |
string (siehe TStatic) und dann ein | |
integer gespeichert; ansonsten wird | |
nur ein integer verwendet |
Von den ObjectGEM-Dialogelementobjekten führen TControl, TButton und TGroupBox keinen Transfer durch. Einzelne Objekte können mit den Methoden TControl.DisableTransfer und TControl.EnableTransfer vom Datentransfer ausgenommen bzw. daran beteiligt werden.
Wenn man mit eigenen Dialogelementobjekten neue Feldtypen einführt, muß man beachten, daß jeder Typ eine gerade Länge haben muß, da es sonst früher oder später zu einem Adreßfehler kommt...
Beispiel
type SampleTransferRecord = record stat1 : string[x]; { zur Berechnung von } edit1 : string[y]; { x bzw. y s.o. } check1 : word; radio1 : word; tri1 : word; scroll1 : TScrollBarTransferRec; combed1s: string[z]; combed1i: integer; comb2 : integer end;
Deklaration
constructor Init(AParent: PWindow; ATitle: string; Indx: integer);
Beschreibung
Ruft den Vorfahren TWindow.Init auf und weist dem Objekt mittels TDialog.LoadDialog den Dialogbaum mit dem Index Indx zu. Zum Schluß wird die Methode TDialog.SetupSize aufgerufen.
Wird in Indx id_No übergeben, wird der Dialogbaum nicht gesetzt; man sollte dann so bald wie möglich die Methoden SetDlgTree und SetupSize selbst aufrufen. Diese Option sollte normalerweise nicht verwendet werden, allerdings können so im Speicher erzeugte Resourcen verwendet werden (das wird z.B. von TApplication.Alert gemacht).
Deklaration
destructor Done; virtual;
Beschreibung
Gibt alle Objekte der CtrlList-Liste frei und ruft dann den Vorfahren TWindow.Done auf.
Deklaration
function GetVDIHandle: integer; virtual;
Beschreibung
Gibt TApplication.vdiHandle zurück, d.h. Dialoge besitzen standardmäßig keine eigene VDI-Workstation.
Deklaration
procedure CallChanged(Indx: integer; dclk, edt,push: boolean); virtual;
Beschreibung
Wird immer dann aufgerufen, wenn ein anderes Dialogelement(-objekt) aktiv wird. In Indx wird der Index des neu aktiven Elements übergeben. dclk ist true, wenn die Anwahl durch Doppelklick erfolgt ist; edt ist true, wenn es sich bei dem neuen Element um ein Eingabefeld handelt (wird - wie push - intern benötigt).
CallChanged versucht, per TControl.TestIndex das zum Dialogelement gehörige Dialogelementobjekt zu finden. War die Suche erfolgreich, wird anschließend TControl.Changed des betreffenden Objekts aufgerufen.
Diese Methode sollte man nicht direkt aufrufen. Allerdings kann man sich durch Überschreiben in den Zeitpunkt einklinken, an dem die Benutzeraktionen am besten "überwacht" werden können.
Deklaration
function Cancel: boolean; virtual;
Beschreibung
Wird aufgerufen, wenn der Dialog abgebrochen werden soll (z.B. weil der Benutzer auf <Abbruch> geklickt hat). Die Rückgabe ist true (default), wenn der Dialog beendet werden darf, false sonst.
Wenn man diese Methode überschreibt, kann man auf den Abbruch angemessen reagieren (standardmäßig passiert nichts).
Deklaration
procedure CloseWindow; virtual;
Beschreibung
Schließt alle untergeordneten Fenster und beendet die Dialogbearbeitung (TDialog.Cont wird auf false gesetzt). Bei modalen Dialogen wird der Hintergrund restauriert, bei nicht-modalen Dialogen wird TWindow.CloseWindow aufgerufen.
Deklaration
procedure Create; virtual;
Beschreibung
Wird von TDialog.MakeWindow aufgerufen, um den (Fenster-)Dialog zu erzeugen; natürlich kann diese Methode auch "von Hand" aufgerufen werden. Wenn ws_ex_Modeless nicht gesetzt ist oder ws_ex_TryModeless gesetzt, aber kein GEM-Fenster mehr verfügbar ist, wird TDialog.IsModal auf false gesetzt.
Ist bis jetzt kein Fehler aufgetreten, wird Attr.Status auf ws_Created gesetzt, und die Abmessungen und Position des Dialog(fenster)s werden ermittelt, wobei ws_ex_Center, ws_ex_Center2Parent, ws_ex_CenterOnce und ein evtl. vorhandener virtueller Bildschirm (VSCR-Cookie) beachtet werden.
Schließlich werden noch alle untergeordneten Dialoge erzeugt.
Deklaration
procedure Destroy; virtual;
Beschreibung
Zerstört zunächst alle untergeordneten Dialoge. Danach wird der Dialog geschlossen (sofern dies noch nicht geschehen ist); bei modalen Dialogen wird nun IsModal auf false und Attr.Status auf ws_NoWindow gesetzt, bei nicht-modalen Dialogen wird TWindow.Destroy aufgerufen.
Deklaration
procedure EndDlg(Indx: integer; DblClick: boolean); virtual;
Beschreibung
Wird von TDialog.WMButton und vom Tastatur-Handler aufgerufen, wenn der Benutzer ein Dialogelement angewählt hat, mit dem der Dialog beendet werden kann. In Indx wird der Index des betreffenden Dialogelements übergeben; ist DblClick true, erfolgte die Anwahl mit Doppelklick.
Zunächst wird TDialog.Result auf Indx gesetzt. Dann wird mit TControl.TestID überprüft, ob das zum Dialogelement gehörige Objekt eine der Konstanten id_OK, id_Cancel, id_Help, id_Undo oder id_Esc enthält; ist dies der Fall, wird entsprechend OK, Cancel, TDialog.Help, TDialog.Undo oder TDialog.Esc aufgerufen. Besitzt das Objekt den Wert id_NoExit, wird der Dialog einfach nicht beendet.
Konnte kein Objekt für das Dialogelement gefunden werden, wird TDialog.ExitDlg gefragt, ob der Dialog beendet werden soll.
Hat EndDlg bis jetzt keine positive Antwort zum Verlassen des Dialogs erhalten, wird die Dialogbearbeitung normal fortgesetzt. Ansonsten hängt das Ende nur noch von TWindow.CanClose ab.
Deklaration
function Esc: boolean; virtual;
Beschreibung
Wird aufgerufen, wenn der Benutzer <Esc> gedrückt oder ein Dialogelement angeklickt hat und ein passendes Dialogelementobjekt existiert, das den Wert id_Esc besitzt.
Die Rückgabe ist true, wenn der Dialog beendet werden soll, false sonst (default).
Wenn man diese Methode überschreibt, kann man z.B. die gerade laufende Aktion abbrechen.
Deklaration
procedure Execute; virtual;
Beschreibung
Wird von TDialog.MakeWindow aufgerufen, wenn der abzuarbeitende Dialog modal ist, da in diesem Fall nicht auf die üblichen Routinen, die das System nicht blockieren, zurückgegriffen werden kann. Solange TDialog.Cont true ist, wird mit evnt_multi() auf Ereignisse gewartet, die dann an den Tastatur-Handler bzw. an TDialog.WMButton verteilt werden.
Bei modalen Dialogen ist es außerdem möglich, diese durch Anklicken auf ein nicht anwählbares Dialogelement (z.B. den Hintergrund) auf dem Bildschirm zu verschieben.
Wichtig: Wenn man Execute direkt aufruft, muß sichergestellt sein, daß das System sowohl mit wind_update(BEG_UPDATE) als auch mit wind_update(BEG_MCTRL) blockiert ist! Normalerweise kümmern sich TDialog.OpenWindow/TDialog.CloseWindow darum.
Deklaration
function ExitDlg(AnIndx: integer): boolean; virtual;
Beschreibung
Wird von TDialog.EndDlg aufgerufen, wenn der Benutzer ein Dialogelement angewählt hat, mit dem der Dialog beendet werden kann, dem aber keine der id_XXXX-Konstanten zugewiesen ist.
ExitDlg muß nun entscheiden, ob der Dialog verlassen werden soll. Standardmäßig wird true zurückgegeben, d.h. der Dialog wird beendet.
In AnIndx wird der Index des angewählten Dialogelements übergeben.
Deklaration
function FirstThat(Test: PIterationFunc): PControl;
Beschreibung
FirstThat ruft für jedes Objekt der CtrlList-Liste die durch Test bestimmte boolesche Funktion auf, bis Test true zurückgibt. FirstThat gibt dann den Zeiger auf das Objekt zurück, für den Test true zurückgegeben hat, oder nil, falls Test immer false geliefert hat. Der Pointer Test sollte eine globale (Unterschied zu ObjectWindows!) Funktion sein, der ein pointer-Parameter übergeben wird und die boolean zurückgibt.
Achtung: Im Gegensatz zu ObjectWindows kann bei einer lokalen Test-Funktion nicht auf die Variablen der übergeordneten Routine zugegriffen werden!
Beispiel
function IstMarkiert(p: pointer): boolean; { ... }
IstMarkiert sollte eine globale Funktion sein. Sei Dialog ein TDialog-Objekt:
p:=Dialog.FirstThat(@IstMarkiert);
Deklaration
procedure ForEach(Action: PIterationProc);
Beschreibung
ForEach ruft für jedes Objekt der CtrlList-Liste die durch Action bestimmte Prozedur auf. Der Pointer Action sollte eine globale (Unterschied zu ObjectWindows!) Prozedur sein, der ein pointer-Parameter übergeben wird.
Achtung: Im Gegensatz zu ObjectWindows kann bei einer lokalen Prozedur nicht auf die Variablen der übergeordneten Routine zugegriffen werden!
Beispiel
procedure Markiere(p: pointer); { ... }
Markiere sollte eine globale Prozedur sein. Sei Dialog ein TDialog-Objekt:
Dialog.ForEach(@Markiere);
Deklaration
function GetClassName: string; virtual;
Beschreibung
Gibt den Namen der Dialogklasse zurück. Abgeleitete Dialogobjekte, die wesentliche Veränderungen bzw. Erweiterungen gegenüber TDialog besitzen, sollten diese Methode überschreiben, um einen anderen Namen zu liefern. TDialog gibt 'Dialog' zurück.
Deklaration
function GetFocus: integer; virtual;
Beschreibung
Wenn der Dialog mind. ein Eingabefeld besitzt, gibt GetFocus den Index des Feldes zurück, in dem sich z.Z. der Eingabecursor befindet.
Besitzt der Dialog kein Eingabefeld oder ist der Eingabecursor momentan nicht aktiv, erhält man als Rückgabe id_No.
Deklaration
function GetKBHandler: PEvent; virtual;
Beschreibung
Gibt einen Pointer auf den Tastatur-Handler des Dialogobjekts zurück. Der Handler ist nichts anderes als ein TEvent-Objekt, das direkt aufgerufen wird.
Das Objekt wird in TDialog.SetupWindow initialisiert, vorher gibt GetKBHandler nil zurück.
Als einzige Methode wurde TEvent.TestKey effektiv gemacht (d.h. überschrieben). Innerhalb dieser Methode werden die Alternate-Shortcuts sowie die <Help>-, <Undo>- und <Esc>-Taste ausgewertet. Außerdem wird hier die BubbleHelp realisiert.
Deklaration
function GetStyle: integer; virtual;
Beschreibung
Gibt eine Bitmap der GEM-Fensterkomponenten zurück, die für TDialog.Create benötigt wird. TDialog.GetStyle liefert NAME or CLOSER or MOVER. Sollen andere Fensterelemente benutzt werden, muß man diese Methode überschreiben (es ist z.B. kein Problem, auch einem Dialogfenster ein SIZER-Element zuzuweisen).
Ab AES 4.10 wird zusätzlich SMALLER für die Iconification geliefert und, wenn der Backdrop-Mechanismus unterstützt wird, BACKDROP (z.Z. nur unter MagiC).
Deklaration
procedure GetWindowClass(var AWndClass: TWndClass); virtual;
Beschreibung
Füllt das Feld Class aus, das die Dialogklasse beschreibt. Soll der Fensterdialog andere grundlegende Eigenschaften besitzen, muß diese Methode überschrieben werden.
Wichtig: In diesem Fall muß in der neuen Methode zuerst die ursprüngliche Methode aufgerufen werden, da es sonst mit einiger Sicherheit einen Programmabsturz gibt...
Von den Werten, die TWindow.GetWindowClass ermittelt, wird cs_CreateOnAccOpen gelöscht und cs_SaveBits bzw. cs_WorkBackground neu gesetzt. Class.hbrBackground wird auf Null gesetzt.
Beispiel
procedure TD.GetWindowClass(var AWndClass: TWndClass); begin inherited GetWindowClass(AWndClass); { ... } end;
Deklaration
procedure GetWorkMax(var maxX,maxY: integer); virtual;
Beschreibung
maxX und maxY werden auf die größe des Hintergrundobjekts der Dialogbox gesetzt, d.h. bei einem Fensterdialog kann das Fenster nie größer als die Dialogbox werden.
Deklaration
function Help: boolean; virtual;
Beschreibung
Wird aufgerufen, wenn der Benutzer <Help> gedrückt oder ein Dialogelement angeklickt hat und ein passendes Dialogelementobjekt existiert, das den Wert id_Help besitzt.
Die Rückgabe ist true, wenn der Dialog beendet werden soll, false sonst (default).
Wenn man diese Methode überschreibt, kann man z.B. eine größere Hilfe-Dialogbox zum gerade aktuellen Dialog anzeigen.
Deklaration
procedure InitFocus; virtual;
Beschreibung
Initialisiert den Eingabecursor, d.h. dieser wird auf das (von der Resource-Hierarchie her) erste Eingabefeld gesetzt. Wird von TDialog.SetFocus aufgerufen.
Deklaration
function IsDialog: boolean; virtual;
Beschreibung
Gibt true zurück, d.h. das Fenster ist ein Dialogfenster. Wird intern benötigt, da TWindow- und TDialog-Objekte in den gleichen Listen (MainWindow bzw. ChildList) verwaltet werden.
Deklaration
procedure LoadDialog(Indx: integer); virtual;
Beschreibung
Wird von TDialog.Init aufgerufen, um den Dialog im Objektbaum Indx mit dem Dialogobjekt zu verknüpfen.
Damit der Dialogbaum in beliebig vielen Fenstern gleichzeitig verwendet und bearbeitet werden kann, wird der komplette Baum umkopiert, so daß alle Änderungen an einer Kopie vorgenommen werden, die von TDialog.FreeDialog wieder gelöscht wird. Wenn der übergebene Dialogbaum gültig ist, wird anschließend TWindow.LoadDialog aufgerufen.
Deklaration
procedure FreeDialog; virtual;
Beschreibung
Gibt den mit TDialog.LoadDialog installierten Dialogbaum (und den dafür allozierten Speicher) wieder frei.
Deklaration
procedure MakeWindow; virtual;
Beschreibung
Ruft zuerst TDialog.Create und dann TDialog.OpenWindow auf. Handelt es sich um einen modalen Dialog, wird dieser dann mit TDialog.Execute abgearbeitet.
Deklaration
procedure ObjcPaint(Indx: integer; Lazy: boolean); virtual;
Beschreibung
Zeichnet das Dialogelement mit dem Index Indx neu. Dabei wird beachtet, ob der Dialog geöffnet ist und ob er sich in einem Fenster befindet.
Ist Lazy true und AES 4.0 oder höher vorhanden, wird das Dialogelement nur gezeichnet, wenn keine andere Applikation den Bildschirm blockiert. So können z.B. Statusanzeigen realisiert werden.
Wird u.a. von TControl.Paint aufgerufen.
Deklaration
function OK: boolean; virtual;
Beschreibung
Wird aufgerufen, wenn der Dialog erfolgreich beendet werden soll (z.B. weil der Benutzer auf <OK> geklickt hat). Die Rückgabe ist true, wenn der Dialog beendet werden darf, false sonst.
Intern werden zunächst alle TEdit-Objekte mit deren TEdit.CanClose-Methode überprüft. Liefern alle true zurück, wird anschließend die Methode TransferData(tf_GetData) aufgerufen und true zurückgegeben.
Deklaration
procedure OpenWindow; virtual;
Beschreibung
Wird von TDialog.MakeWindow aufgerufen.
Zunächst wird geprüft, ob ws_ex_Popup gesetzt ist und die Dialogposition evtl. korrigiert. Dann wird der Eingabecursor initialisiert und TransferData mit dem Parameter tf_SetData aufgerufen.
Wenn es sich um einen modalen Dialog handelt, wird nun eine wind_update()-Schachtelung sowohl mit BEG_UPDATE als auch mit BEG_MCTRL durchgeführt. Danach wird Attr.Status auf ws_Open gesetzt und der Dialog gezeichnet.
Ansonsten wird die geerbte TWindow.OpenWindow-Methode aufgerufen.
Deklaration
procedure Paint(var PaintInfo: TPaintStruct); virtual;
Beschreibung
Mittels objc_draw() wird die Dialogbox gezeichnet. Anschließend wird noch der Eingabecursor dargestellt.
Diese Methode sollte nie direkt aufgerufen werden, sondern immer nur mittels ForceRedraw, WMRedraw oder TApplication.InvalidateRect. Wer meint, dies dennoch tun zu müssen, muß darauf achten, vor dem Aufruf von Paint die Methoden TDialog.UpdateDialog und InitPaint sowie nach dem Aufruf ExitPaint aufzurufen.
Deklaration
procedure SetFocus(Obj: integer); virtual;
Beschreibung
Setzt den Eingabecursor auf das Eingabefeld mit dem Index Obj. Wenn dies kein gültiges Eingabefeld ist (Objekt ist versteckt, disabled oder überhaupt gar kein Eingabefeld), wird InitFocus aufgerufen.
Deklaration
procedure SetupSize; virtual;
Beschreibung
Berechnet die Anfangsgröße des Dialogfensters.
Nach dem Aufruf von TWindow.SetupSize wird TWindow.Work an die Ausmaße des Dialogs angepaßt.
Wird von TDialog.Init aufgerufen.
Deklaration
procedure SetupWindow; virtual;
Beschreibung
In dieser Methode sollten alle Einstellungen, die das Dialogfenster (d.h. nicht nur das Dialogobjekt an sich) betreffen, vorgenommen werden. Wird von TDialog.Init (bzw. TWindow.Init) aufgerufen.
Wird diese Methode überschrieben, sollte die geerbte Methode nach Möglichkeit am Anfang der neuen Methode aufgerufen werden.
Attr.ExStyle wird mit ws_ex_TryModeless+ws_ex_CenterOnce initialisiert. Wenn global as_MoveTransparent oder as_MoveDials gesetzt ist, dann wird zusätzlich noch ws_ex_MoveTransparent bzw. ws_ex_MoveDial gesetzt.
Cont, CtrlList, TransferBuffer und IsModal werden initialisiert, und drei TKey-Objekte (siehe TWindow.SetupWindow) sowie der Tastatur-Handler werden installiert.
Deklaration
procedure TransferData(Direction: word); virtual;
Beschreibung
Wenn der Transfermechanismus durch Setzen von TransferBuffer auf einen Datentransfer-Puffer eingeschaltet ist, überträgt diese Methode Daten zwischen dem Puffer und den TControl-Objekten, bei denen wb_Transfer gesetzt ist.
TranferData ruft die Transfer-Methode jedes beteiligten Dialogelementobjekts auf und übergibt einen Zeiger auf das betreffende Feld des Transfer-Puffers sowie die in Direction vorgegebene Richtung.
Direction muß eine der tf_XXXX-Konstanten enthalten.
Deklaration
function Undo: boolean; virtual;
Beschreibung
Wird aufgerufen, wenn der Benutzer <Undo> gedrückt oder ein Dialogelement angeklickt hat und ein passendes Dialogelementobjekt existiert, das den Wert id_Undo besitzt.
Die Rückgabe ist true, wenn der Dialog beendet werden soll, false sonst (default).
Wenn man diese Methode überschreibt, kann man z.B. eine gerade ausgeführte Aktion rückgängig machen.
Deklaration
procedure UpdateDialog; virtual;
Beschreibung
Wenn der Dialog modal ist, wird zunächst TWindow.Work auf Curr gesetzt. Danach wird die geerbte Methode TWindow.UpdateDialog aufgerufen.
Braucht (und sollte) nicht direkt aufgerufen werden.
Deklaration
procedure WMButton(mX,mY,BStat,KStat, Clicks: integer); virtual;
Beschreibung
Wird von TApplication.MUButton aufgerufen, wenn der Benutzer auf ein Dialogelement geklickt hat.
In dieser Methode wird im wesentlichen die Benutzeranwahl mit einer ObjectGEM-internen form_button()-Routine ausgewertet. Außerdem wird hier ein Klick mit der rechten Maustaste an den Tastatur-Handler weitergeleitet, der dann - wenn vorhanden - eine BubbleHelp anzeigt.
Bei modalen Dialogen wird hier auch das Verschieben des Dialogs durchgeführt.
Deklaration
procedure WMClosed; virtual;
Beschreibung
Wenn TWindow.CanClose true zurückgibt, wird der Dialog beendet und mit TDialog.Destroy freigegeben. Zuvor muß allerdings auch OK bzw. - wenn cs_CancelOnClose gesetzt ist - Cancel true geliefert haben. Wenn der zu OK bzw. Cancel gehörige Button disabled ist, kann der Dialog nicht verlassen werden!
Kann der Dialog verlassen werden, wird - sofern cs_QuitOnClose gesetzt ist - die Applikation beendet.
Wird von TApplication.MUMesag aufgerufen.
Deklaration
procedure Cut; virtual;
Beschreibung
Wird aufgerufen, wenn der Benutzer <Control>+<X> drückt. Wenn ein Eingabefeld aktiv ist, wird die zugehörige TEdit.Cut-Methode aufgerufen.
Deklaration
procedure Delete; virtual;
Beschreibung
Wird aufgerufen, wenn der Benutzer <Delete> drückt. Standardmäßig wird der Tastendruck an den Tastatur-Handler weitergeleitet.
Deklaration
procedure Copy; virtual;
Beschreibung
Wird aufgerufen, wenn der Benutzer <Control>+<C> drückt. Wenn ein Eingabefeld aktiv ist, wird die zugehörige TEdit.Copy-Methode aufgerufen.
Deklaration
procedure Paste; virtual;
Beschreibung
Wird aufgerufen, wenn der Benutzer <Control>+<V> drückt. Wenn ein Eingabefeld aktiv ist, wird die zugehörige TEdit.Paste-Methode aufgerufen.
Deklaration
procedure SetDefaultButton(Obj: integer); virtual;
Beschreibung
Macht das Dialogelement mit dem Index Obj zum neuen Default-Button.
Deklaration
function GetDefaultButton: integer; virtual;
Beschreibung
Liefert den Dialogelementindex des aktuellen Default-Buttons.
Mit TEdit werden einzeilig Eingabefelder verwaltet, die zum Einlesen von beliebigen Zeichenketten verwendet werden. Zusätzlich kann eine Eingabeprüfung mit Hilfe der Validierungsobjekte vorgenommen werden.
Pointer
PEdit = ^TEdit;
Felder
Methoden
Vorfahre
Nachfahren
-
Deklaration
Validator: PValidator; (nur lesen)
Beschreibung
Zeigt auf das mit diesem Objekt verbundene Validierungsobjekt. Ist ein solches nicht vorhanden, hat Validator den Wert nil.
Ein Validierungsobjekt sollte einem TEdit-Objekt nur mittels SetValidator zugeordnet werden.
Deklaration
Clipboard: PClipboard; (nur lesen)
Beschreibung
Zeigt auf das mit dem TEdit-Objekt verknüpfte TClipboard-Objekt (oder ist nil, wenn ein solches nicht existiert).
Wird mit TEdit.GetClipboard gesetzt.
Deklaration
constructor Init(AParent: PDialog; AnIndx, ATextLen: integer; Hlp: string);
Beschreibung
Ruft den Vorfahren TStatic.Init auf, setzt TControl.Style auf cs_Edit+es_Undo und beteiligt das Objekt am Transfermechanismus. Danach wird Validator auf nil gesetzt, ClearModify aufgerufen und der Undo-Puffer vorbereitet.
Wenn das zugehörige Dialogelement nicht vom Typ G_FTEXT oder G_FBOXTEXT ist oder TextLen kleiner als 2 ist, wird die Initialisierung abgebrochen. ATextLen gibt die Länge des editierbaren Textes plus 1 an. Wird hier ein zu kleiner Wert übergeben, funktioniert die Eingabe u.U. nicht korrekt.
Deklaration
destructor Done; virtual;
Beschreibung
Gibt den Speicher des Undo-Puffers frei, entfernt das Validierungsobjekt mit SetValidator(nil) und gibt TEdit.Clipboard frei, wenn ein neues Klemmbrett-Objekt installiert wurde.
Zum Schluß wird TStatic.Done aufgerufen.
Deklaration
function CanClose: boolean; virtual;
Beschreibung
Liefert normalerweise true zurück, d.h. der Dialog darf beendet werden. Gibt allerdings IsValid(true) false zurück und ist das Dialogelement nicht disabled, liefert CanClose false, und der Cursor wird mittels Focus zu diesem Objekt bewegt.
Deklaration
function CanUndo: boolean; virtual;
Beschreibung
Gibt true zurück, wenn der Undo-Puffer Zeichen enthält, d.h. wenn die letzte Bearbeitung rückgängig gemacht werden kann.
Wenn es_Undo nicht gesetzt ist, wird immer false zurückgegeben.
Deklaration
procedure Clear; virtual;
Beschreibung
Ruft den Vorfahren TStatic.Clear auf, beachtet aber zusätzlich den Eingabe-Cursor.
Deklaration
procedure Paint; virtual;
Beschreibung
Ruft den Vorfahren TControl.Paint auf, beachtet aber zusätzlich den Eingabe-Cursor.
Deklaration
procedure ClearModify; virtual;
Beschreibung
Setzt das Änderungsflag für das Eingabefeld zurück.
Deklaration
procedure Cut; virtual;
Beschreibung
Löscht den Text im Eingabefeld und legt ihn im Klemmbrett ab. Wird von TDialog.Cut aufgerufen.
Deklaration
procedure Copy; virtual;
Beschreibung
Kopiert den Text des Eingabefeldes ins Klemmbrett. Wird von TDialog.Copy aufgerufen.
Deklaration
procedure Paste; virtual;
Beschreibung
Fügt die erste Zeile des Textes im Klemmbrett an der aktuellen Cursorposition im Eingabefeld ein. Wird von TDialog.Paste aufgerufen.
Deklaration
procedure Edit; virtual;
Beschreibung
Wird bei jedem Zeichen aufgerufen, das in das Eingabefeld eingefügt wird. In dieser Methode wird der Undo-Puffer und das Änderungsflag gesetzt und das Validierungsobjekt abgefragt, wenn bei diesem das Flag voOnEdit gesetzt ist.
Wenn diese Methode überschrieben wird, muß als erstes die ursprüngliche Methode aufgerufen werden.
Deklaration
procedure Focus; virtual;
Beschreibung
Ruft Parent^.SetFocus(ObjIndx) auf und bewegt damit den Eingabe-Cursor auf dieses Dialogelement.
Deklaration
function GetClipboard: PClipboard; virtual;
Beschreibung
Liefert das TClipboard-Objekt, das mit dem TEdit-Objekt verknüpft wird.
Standardmäßig wird Parent^.Clipboard zurückgegeben. Will man ein spezialisiertes Klemmbrett-Objekt installieren, muß man diese Methode überschreiben. Wichtig: Ein solches Objekt wird dann von TEdit.Done freigegeben!
Deklaration
function GetCursor: integer; virtual;
Beschreibung
Gibt die Position des Eingabe-Cursors zurück: 0=ganz am Anfang (vor dem Text), Textlänge=am Ende (hinter dem Text).
Wichtig: Dies sagt nichts darüber aus, ob dieses Eingabefeld auch aktiv ist. Dazu muß TControl.ObjIndx mit TDialog.GetFocus des zugehörigen Dialogobjekts verglichen werden, und zusätzlich muß TDialog.Attr.Status=ws_Open sein. ObjectGEM verwaltet nämlich pro Eingabefeld einen eigenen Cursor, und dessen Position wird solange gespeichert, bis das entsprechende Dialogelementobjekt aus dem Speicher entfernt wird.
Deklaration
function IsModified: boolean; virtual;
Beschreibung
Gibt true zurück, wenn der Text im Eingabefeld geändert wurde.
Wichtig: Das Änderungsflag wird nicht automatisch auf false gesetzt, dazu muß ClearModify aufgerufen werden.
Deklaration
function IsValid(ReportError: boolean): boolean; virtual;
Beschreibung
Gibt true zurück, wenn der Text des Eingabefeldes gültig ist. IsValid gibt immer true zurück, wenn kein Validierungsobjekt mit diesem TEdit-Objekt verknüpft ist. Andernfalls wird, wenn ReportError true ist, die Rückgabe von TValidator.Valid weitergereicht, ansonsten die von TValidator.IsValid.
Deklaration
procedure SetColor(Color: integer); virtual;
Beschreibung
Ruft den Vorfahren TControl.SetColor auf, beachtet aber zusätzlich den Eingabe-Cursor.
Deklaration
procedure SetCursor(CPos: integer); virtual;
Beschreibung
Setzt den Eingabe-Cursor an die Position CPos (0..Textlänge). Wenn es sich um das aktive Eingabefeld eines sichtbaren Dialogs handelt, wird der Cursor an der neuen Position gezeichnet.
Deklaration
procedure SetValidator(AValid: PValidator); virtual;
Beschreibung
Gibt das eventuell schon vorhandene Validierungsobjekt frei und setzt dann Validator auf AValid.
Deklaration
procedure SetState(StateFlag: integer); virtual;
Beschreibung
Ruft den Vorfahren TControl.SetState auf, beachtet aber zusätzlich den Eingabecursor.
Deklaration
procedure SetText(ATextString: string); virtual;
Beschreibung
Setzt den Text des Eingabefeldes. Mußte überschrieben werden, damit der Undo-Puffer, das Änderungsflag und der Cursor korrekt behandelt werden. Intern wird trotzdem noch TStatic.SetText aufgerufen (hierbei ist es vielleicht interessant zu wissen, daß bei TEdit-Objekten sts_Fill normalerweise nicht gesetzt ist).
Deklaration
procedure Undo; virtual;
Beschreibung
Macht die letzte Änderung rückgängig, wenn im Undo-Puffer eine entsprechende Zeichenkette vorhanden ist.
TEvent überprüft die Gültigkeit von GEM-Ereignissen, die an TApplication- und TWindow-Objekte gemeldet werden. Wenn also z.B. ein Fenster auf eine spezielle Nachricht reagieren soll, muß diesem Fenster ein abgeleitetes TEvent-Objekt zugeordnet werden, das (in diesem Fall) auf TestMessage positiv antwortet. Zur Abfrage einer Menüanwahl existieren spezielle TKeyMenu-Objekte.
Pointer
PEvent = ^TEvent;
Felder
Methoden
Vorfahre
Nachfahren
Deklaration
Parent: PEventObject; (nur lesen)
Beschreibung
Enthält einen Zeiger auf das zugehörige TEventObject (d.h. TApplication oder TWindow). Wird von TEvent.Init gesetzt.
Deklaration
Style: word; (nur lesen)
Beschreibung
Wird von TEvent.Init mit Null initialisiert. Abgeleitete Objekte können hier eine der es_XXXX-Konstanten eintragen, mit denen wichtige Objekttypen unterschieden werden können.
Deklaration
constructor Init(AParent: PEventObject);
Beschreibung
Ruft den Vorfahren TObject.Init auf und setzt TEvent.Parent auf AParent. Ist AParent=nil, wird Parent auf Application gesetzt. Danach installiert sich das Objekt in der EventList des durch Parent angegebenen TEventObject. TEvent.Style wird auf Null gesetzt.
Deklaration
destructor Done; virtual;
Beschreibung
Entfernt sich selbst aus der EventList des durch TEvent.Parent angegebenen TEventObject und ruft dann TObject.Done auf.
Deklaration
function Next: PEvent;
Beschreibung
Gibt einen Zeiger auf das nächste TEvent-Objekt in der EventList des zugehörigen TEventObject zurück. Ist kein weiteres Objekt vorhanden, erhält man einen nil-Zeiger.
Deklaration
function Previous: PEvent;
Beschreibung
Gibt einen Zeiger auf das vorhergehende TEvent-Objekt in der EventList des zugehörigen TEventObject zurück. Ist kein weiteres Objekt vorhanden, erhält man einen nil-Zeiger, d.h. in diesem Fall zeigt EventList genau auf das aktuelle Objekt.
Deklaration
function TestKey(Stat,Key: integer): boolean; virtual;
Beschreibung
Gibt false zurück. Muß überschrieben werden, damit das Objekt Tastendrücke überprüfen kann. Sollte dann true zurückgeben, wenn die in Stat und Key übergebenen Werte die gesuchten sind. Key entspricht der Rückgabe von evnt_keybd(), Stat dem Tastaturzustand von evnt_button().
Deklaration
function TestMenu(mNum: integer): boolean; virtual;
Beschreibung
Gibt false zurück. Muß überschrieben werden, damit das Objekt die Anwahl eines Menüeintrags überprüfen kann. Sollte dann true zurückgeben, wenn mNum dem gewünschten Index des Menübaums entspricht.
Deklaration
function TestButton(mX,mY,BStat,KStat,Clicks: integer): boolean; virtual;
Beschreibung
Gibt false zurück. Muß überschrieben werden, damit das Objekt Mausklicks überprüfen kann. Sollte dann true zurückgeben, wenn die gewünschten Werte übergeben werden. Die Variablen entsprechen denen von evnt_button(), Clicks gibt die Anzahl der Mausklicks an, die zu dem Ereignis geführt haben.
Deklaration
function TestMouse(M,mX,mY,BStat,KStat: integer): boolean; virtual;
Beschreibung
Gibt false zurück. Muß überschrieben werden, damit das Objekt überprüfen kann, ob die Maus einen rechteckigen Bereich betritt oder verläßt. Die Variablen sind wie bei evnt_mouse() belegt, M gibt die Nummer des Rechtecks (MU_M1, MU_M2) an (siehe evnt_multi()).
Wichtig: Diese Methode sollte nicht überschrieben werden, da die Rechtecke intern von ObjectGEM für die Fensterklassen-Mauscursor verwendet werden.
Deklaration
function TestMessage(Pipe: Pipearray): boolean; virtual;
Beschreibung
Gibt false zurück. Muß überschrieben werden, damit das Objekt GEM-Nachrichten überprüfen kann. Sollte im Erfolgsfall true zurückgeben. Pipearray entspricht dem ARRAY_8 von evnt_mesag().
Deklaration
procedure Work; virtual;
Beschreibung
Macht gar nichts. Kann aber z.B. von den TestXXXX-Methoden im Falle eines erfolgreichen Tests aufgerufen werden, was u.a. von TKeyMenu getan wird. An dieser Stelle steht dann z.B. die Abarbeitung einer zu einem Menüeintrag gehörigen Dialogbox etc.
TEventObject definiert ein grundlegendes Objekt, das auf GEM-Ereignisse ("Events", "Messages") reagieren kann. TEventObject verwaltet mit EventList TEvent-Objekte, mit deren Methoden die Gültigkeit eines Ereignisses überprüft werden kann.
Pointer
PEventObject = ^TEventObject;
Felder
Methoden
Vorfahre
Nachfahren
Deklaration
EventList: PEvent; (nur lesen)
Beschreibung
EventList ist eine Liste von Zeigern auf TEvent-Objekte. Zwischen den Objekten bestehen Verweise mit TEvent.Previous und TEvent.Next, EventList zeigt auf das erste Element der Liste. TEvent-Objekte tragen sich bei ihrer Initialisierung automatisch in diese Liste ein.
Deklaration
constructor Init;
Beschreibung
Init ruft den Vorfahren TObject.Init auf und initialisiert EventList mit nil.
Deklaration
destructor Done; virtual;
Beschreibung
Entfernt alle in EventList eingetragenen Objekte mit ihrer Free-Methode und ruft dann TObject.Done auf.
Das Objekt TFilterValidator überwacht ein Eingabefeld, in das der Anwender Zeichen eingibt, und vergleicht die Eingabe mit einem Satz erlaubter Zeichen. Wurde ein Zeichen eingegeben, das nicht in diesem Satz enthalten ist, wird eine ungültige Eingabe gemeldet. Teilweise wird dieses Verhalten schon vom GEM abgedeckt (siehe TEDINFO-Struktur), allerdings ist dieses Validierungsobjekt wesentlich flexibler, da eine beliebige Menge an erlaubten Zeichen angegeben werden kann.
Pointer
PFilterValidator = ^TFilterValidator;
Felder
Methoden
Vorfahre
Nachfahre
Deklaration
ValidChars: TCharSet;
Beschreibung
Speichert den Satz für die Eingabe gültiger Zeichen. Sollen z.B. nur Ziffern erlaubt sein, muß ValidChars den Wert ['0'..'9'] haben.
Wird von TFilterValidator.Init gesetzt.
Deklaration
constructor Init(ValidCharSet: TCharSet);
Beschreibung
Ruft TValidator.Init auf und setzt dann ValidChars auf ValidCharSet und Options auf voOnEdit.
Deklaration
procedure Error; virtual;
Beschreibung
Zeigt die Fehlermeldung an, daß die Eingabe ungültige Zeichen enthält.
Deklaration
function IsValid(s: string): boolean; virtual;
Beschreibung
Vergleicht jedes Zeichen in s mit ValidChars. Ist jedes Zeichen gültig und liefert TValidator.IsValid true, wird true zurückgegeben.
Deklaration
function IsValidInput(var s: string; SuppressFill: boolean): boolean; virtual;
Beschreibung
Vergleicht jedes Zeichen in s mit ValidChars. Ist jedes Zeichen gültig (evtl. werden dazu Klein- in Großbuchstaben umgewandelt), wird true zurückgegeben, sonst false.
Ist s ein Leerstring, ist die Rückgabe immer true.
Macht aus "normalen" Rechteck-Elementen eine Groupbox, d.h. es wird eine Überschrift ausgegeben. Weitere Aktionen sind von TGroupBox nicht nötig, da die durch das Rechteck-Element vorgegebene Hierarchie automatisch vom GEM-Objekt-Manager beachtet wird.
Pointer
PGroupBox = ^TGroupBox;
Methoden
Vorfahre
Nachfahren
-
Deklaration
constructor Init(AParent: PDialog; AnIndx: integer; ATitle,Hlp: string);
Beschreibung
Ruft den Vorfahren TControl.Init auf. AnIndx muß dabei der Index eines G_BOX-Elements sein. ATitle ist der Titel der Groupbox. TControl.Style wird auf cs_GroupBox gesetzt.
Deklaration
destructor Done; virtual;
Beschreibung
Macht aus dem TGroupBox-Objekt wieder ein "normales" Rechteck-Element und ruft danach den Vorfahren TControl.Done auf.
Deklaration
procedure SetText(ATextString: string); virtual;
Beschreibung
Gibt der GroupBox eine neue Überschrift und zeichnet das Dialogelement neu.
Deklaration
function GetText: string; virtual;
Beschreibung
Liefert den Titel der GroupBox.
Mit diesem Objekttyp werden Icons verwaltet. Jedes Icon sollte mit einem TIcon-Objekt verknüpft werden, da hierdurch eine automatische Selektion, Verschiebung etc. möglich ist. Als Nachfahren von TEvent hängen sich die Icons in die EventList ein. Zur Auswertung stehen u.a. die Methoden IconSelect, FirstIcon und NextIcon zur Verfügung.
Pointer
PIcon = ^TIcon;
Felder
Methoden
Vorfahre
Nachfahre
-
Deklaration
ADialog: PDialog;
Beschreibung
Dies ist ein universeller Dialog-Pointer, der in TIcon.Init zunächst auf nil gesetzt wird. So ist jedes TIcon-Objekt bereits auf die Verwaltung eines Dialogs vorbereitet.
In der TEvent.Work-Methode kann der Dialog dann initialisiert bzw. abgearbeitet werden (siehe Beispielprogramme).
Deklaration
Click: integer; (nur lesen)
Beschreibung
Wenn die TEvent.Work-Methode aufgerufen wird, steht in diesem Feld die Anzahl der Mausklicks (kann bei Tastaturanwahl auch Null sein!).
Deklaration
Shift: integer; (nur lesen)
Beschreibung
Wenn die TEvent.Work-Methode aufgerufen wird, steht in diesem Feld der Status der Umschalttasten.
Deklaration
VKey: integer;
Beschreibung
Gibt zusammen mit TIcon.VStat die Taste an, auf die TIcon.TestKey positiv reagieren soll. Wird von TIcon.Init auf -1 gesetzt, d.h. das Icon ist nicht per Tastatur anwählbar.
Deklaration
VStat: integer;
Beschreibung
Gibt zusammen mit TIcon.VKey die Taste an, auf die TIcon.TestKey positiv reagieren soll. Wird von TIcon.Init auf Null gesetzt.
Wichtig: Wenn egal ist, ob die linke oder die rechte <Shift>-Taste gedrückt ist, sollte hier K_SHIFT eingetragen sein.
Deklaration
XPos: integer; (nur lesen)
Beschreibung
Gibt die X-Position des Icons in Pixel relativ zum Parent an, d.h. entweder zum zugehörigen Fenster-Arbeitsbereich oder zum Desktop.
Deklaration
YPos: integer; (nur lesen)
Beschreibung
Gibt die Y-Position des Icons in Pixel relativ zum Parent an, d.h. entweder zum zugehörigen Fenster-Arbeitsbereich oder zum Desktop.
Deklaration
constructor Init(AParent: PEventObject; ATree, AnIndex,iX,iY: integer; Movable, Selectble: boolean; AName, Hlp: string);
Beschreibung
Ruft den Vorfahren TEvent.Init auf. Danach wird die Adresse des Icons mit ATree und AnIndex berechnet, TEvent.Style wird auf es_Icon gesetzt und SetPos(iX,iY) sowie SetText(AName) werden aufgerufen.
Movable gibt an, ob das Icon bewegt werden darf, Selectble gilt entsprechend für die Anwahl. Hlp enthält den Text für die BubbleHelp.
Wichtig: Im Moment sind nur Dialogelemente vom Typ G_IMAGE erlaubt. G_ICON, G_CICON und freie Images werden noch zurückgewiesen. Außerdem sollten TIcon-Objekte z.Z. nur in Fenstern und nicht auf dem Desktop verwendet werden, da das Objekt TDesktop noch nicht verfügbar ist.
Deklaration
destructor Done; virtual;
Beschreibung
Intern benötigte Speicherstrukturen werden freigegeben. Danach wird TEvent.Done aufgerufen.
Deklaration
procedure Check; virtual;
Beschreibung
Ruft SetCheck(bf_Checked) auf und selektiert damit das Icon.
Deklaration
function GetCheck: integer; virtual;
Beschreibung
Gibt bf_Checked bzw. bf_Unchecked zurück, je nachdem ob das Icon markiert ist oder nicht.
Deklaration
function GetHelp: string; virtual;
Beschreibung
Gibt den Hilfstext für die BubbleHelp zurück.
Deklaration
function GetOutline(var IcnRect, TxtRect: GRECT): boolean; virtual;
Beschreibung
Gibt die Umrißrechtecke (absolute Koordinaten) für das Icon und den Icontext zurück, was für die Selektion und das Verschieben benötigt wird.
Wenn das Icon keinen Text besitzt, ist die Rückgabe false und TxtRect sollte ein Rechteck außerhalb des Bildschirms beschreiben (zur einfacheren Auswertung). Stehen in beiden GRECTs gültige Rechtecke, wird true zurückgegeben.
Deklaration
function GetText: string; virtual;
Beschreibung
Gibt den Text des Icons zurück bzw. einen Leerstring, wenn das Icon keinen Text besitzt.
Deklaration
procedure Hide(Draw: boolean); virtual;
Beschreibung
Macht das Icon unsichtbar. Ist Draw true, wird dann das Parent-Objekt neu gezeichnet (d.h. der Fenster-Arbeitsbereich oder der Desktop), damit das Icon auch auf dem Bildschirm (und nicht nur logisch) verschwindet.
Wenn man allerdings mehrere Icons versteckt und das komplette Fenster anschließend neu zeichnet, kann man Draw auf false setzen.
Versteckte Icons können (natürlich) nicht angewählt bzw. verschoben werden.
Deklaration
procedure IMMoved(X,Y: integer); virtual;
Beschreibung
Wird aufgerufen, nachdem das Icon vom Benutzer verschoben wurde.
Intern wird SetPos(X,Y,true) aufgerufen.
Deklaration
function IsHelpAvailable: boolean; virtual;
Beschreibung
Gibt true zurück, wenn mit TIcon.GetHelp ein Hilfstext für die BubbleHelp geliefert werden kann.
Deklaration
function IsHidden: boolean; virtual;
Beschreibung
Gibt true zurück, wenn das Icon unsichtbar ist, false sonst.
Unsichtbare Icons können weder angewählt noch verschoben werden.
Deklaration
function IsSelected(r: GRECT): boolean; virtual;
Beschreibung
Gibt true zurück, wenn sich das Rechteck in r und mind. eines der von GetOutline gelieferten Rechtecke überschneiden.
Wird für die Selektion per Klick und durch die Methode TApplication.Rubbox benötigt.
Deklaration
procedure Paint; virtual;
Beschreibung
Zeichnet das Icon und den dazugehörigen Text unter Beachtung der jeweiligen Rechteckliste. Für Dialogelemente vom Typ G_IMAGE wird automatisch eine passende "Maske" erzeugt.
Wenn das Icon unsichtbar ist, passiert in dieser Methode nichts!
Deklaration
procedure SetCheck(CheckFlag: integer); virtual;
Beschreibung
Bestimmt die Markierung des Icons, d.h. bf_Checked oder bf_Unchecked.
Deklaration
procedure SetHelp(Hlp: string); virtual;
Beschreibung
Weist dem Icon einen neuen Hilfstext für die BubbleHelp zu.
Deklaration
procedure SetPos(iX,iY: integer; Redraw: boolean); virtual;
Beschreibung
Bringt das Icon an die neue Position iX,iY. Wenn Redraw true ist, wird das Icon vorher an der alten Stelle gelöscht und nachher an der neuen Position gezeichnet.
Deklaration
procedure SetText(AName: string); virtual;
Beschreibung
Weist dem Icon einen neuen Text zu und stellt diesen dar.
Deklaration
function TestButton(mX,mY,BStat,KStat, Clicks: integer): boolean; virtual;
Beschreibung
Kümmert sich um die Icon-Selektion per Maus so, wie sie vom MultiTOS-Desktop her bekannt ist, d.h. Anwahl und Verschieben.
Wenn das Icon nicht verschoben wird, wird TEvent.Work aufgerufen, nachdem Click und Shift entsprechend gesetzt wurden.
Wurde das Icon mit der rechten Maustaste angeklickt, wird hier die BubbleHelp angezeigt.
Deklaration
function TestKey(Stat,Key: integer): boolean; virtual;
Beschreibung
Wenn TIcon.VStat und TIcon.VKey die zu Stat und Key passenden Werte enthalten, wird das Icon selektiert und dann TEvent.Work aufgerufen. Vorher werden noch Click und Shift auf Null gesetzt.
Deklaration
procedure Toggle; virtual;
Beschreibung
Wechselt bei dem Icon den Zustand der Markierung.
Deklaration
procedure Uncheck; virtual;
Beschreibung
Ruft SetCheck(bf_Unchecked) auf und deselektiert dadurch das Icon.
Deklaration
procedure Unhide; virtual;
Beschreibung
Macht das Icon sichtbar und zeichnet es.
TKey ist ein spezielles TKeyMenu-Objekt, das nur auf einen Tastaturshortcut reagiert. Zusätzlich kann eine GEM-Message übergeben werden, die bei Aktivierung automatisch verschickt wird.
Pointer
PKey = ^TKey;
Methoden
Vorfahre
Nachfahren
-
Deklaration
constructor Init(AParent: PEventObject; Stat, Key: integer; Msg: pointer; GetHnd: boolean);
Beschreibung
Ruft TKeyMenu.Init auf, wobei die Menü-Parameter auf -1 gesetzt werden, d.h. alle Menüfunktionen von TKeyMenu werden ausgeschaltet.
TKeyMenu.VGHnd wird auf GetHnd gesetzt. Wenn Msg<>nil ist, sollte der Pointer auf einen 16 Bytes großen Bereich zeigen (bequemerweise z.B. ein Pipearray), in dem sich eine komplette GEM-Message befindet.
Diese Message wird dann in TKeyMenu.VPipe umkopiert, wobei VPipe^[1] mit TApplication.apID und VPipe^[2] mit 0 initialisiert wird.
Deklaration
function TestMenu(mNum: integer): boolean; virtual;
Beschreibung
Liefert einfach nur false zurück, d.h. das TKey-Objekt reagiert nicht mehr auf eine Menüanwahl.
TKeyMenu ist ein spezialisiertes TEvent-Objekt, daß auf eine Menüanwahl per Maus oder Shortcut reagiert. Jeder Menüeintrag sollte mit einem solchen Objekt verknüpft sein, da in diesen Objekten die eigentlichen Aktionen nach der Anwahl (Abarbeiten von Dialogen etc.) geschehen sollten.
Wenn entweder auf Maus- oder aber auf Tastaturanwahl verzichtet werden soll, stehen dafür spezielle Nachfahren von TKeyMenu zur Verfügung.
TKeyMenu kann sowohl für "normale" Menüleisten als auch für solche im Fenster verwendet werden.
Pointer
PKeyMenu = ^TKeyMenu;
Felder
Methoden
Vorfahre
Nachfahren
Deklaration
ADialog: PDialog;
Beschreibung
Dies ist ein universeller Dialog-Pointer, der in TKeyMenu.Init zunächst auf nil gesetzt wird. So ist jedes TKeyMenu-Objekt bereits auf die Verwaltung eines Dialogs vorbereitet (was in der Praxis auch meistens genutzt wird).
In der TEvent.Work-Methode kann der Dialog dann initialisiert bzw. abgearbeitet werden (siehe Beispielprogramme).
Deklaration
VGHnd: boolean;
Beschreibung
Gibt an, ob TKeyMenu.VPipe^[3] unmittelbar vor dem Versenden auf das GEM-Handle des übergeordneten Fensters gesetzt werden soll (da sich diese Kennung ja ändern kann). Wenn Parent auf das Applikations-Objekt zeigt, wird die Kennung des obersten Fensters eingetragen. Wenn wind_get(WF_OWNER) vorhanden ist (das ist bei neueren TOS-Versionen der Fall), können so auch Nachrichten an Fenster fremder Applikationen verschickt werden.
Wird von TKeyMenu.Init auf false initialisiert und kann mit TKey.Init bzw. TMenu.Init gesetzt werden.
Deklaration
VKey: integer;
Beschreibung
Gibt zusammen mit TKeyMenu.VStat die Taste an, auf die TKeyMenu.TestKey positiv reagieren soll.
Wird von TKeyMenu.Init gesetzt.
Deklaration
VMNum: integer;
Beschreibung
Gibt den Index des Menüeintrags an, auf den TKeyMenu.TestMenu positiv reagieren soll.
Wird von TKeyMenu.Init gesetzt.
Deklaration
VPipe: PPipearray; (nur lesen)
Beschreibung
Enthält einen Pointer auf eine komplette GEM-Nachricht, die von TKeyMenu.TestKey bzw. TKeyMenu.TestMenu bei positiver Anwahl verschickt wird.
TKeyMenu.Init besetzt dieses Feld mit nil, d.h. es wird keine Nachricht verschickt. Kann mit TKey.Init oder TMenu.Init gesetzt werden.
Deklaration
VStat: integer;
Beschreibung
Gibt zusammen mit TKeyMenu.VKey die Taste an, auf die TKeyMenu.TestKey positiv reagieren soll. Wird von TKeyMenu.Init gesetzt.
Wichtig: Wenn egal ist, ob die linke oder die rechte <Shift>-Taste gedrückt ist, sollte hier K_SHIFT eingetragen sein.
Deklaration
VTNum: integer;
Beschreibung
Enthält den Index des Menütitels vom zugehörigen Menüeintrag VMNum.
Wird von TKeyMenu.Init gesetzt und von TKeyMenu.TestKey einzig und allein zum Invertieren des Menütitels benötigt.
Deklaration
constructor Init(AParent: PEventObject; Stat,Key,mNum,tNum: integer);
Beschreibung
Ruft den Vorfahren TEvent.Init auf. Dann wird TKeyMenu.VStat auf Stat, TKeyMenu.VKey auf Key, VMNum auf mNum und VTNum auf tNum gesetzt, sowie TKeyMenu.ADialog und TKeyMenu.VPipe mit nil und TKeyMenu.VGHnd mit false initialisiert.
Deklaration
destructor Done; virtual;
Beschreibung
Gibt eine evtl. in TKeyMenu.VPipe vorhandene GEM-Message frei und ruft den Vorfahren TEvent.Done auf.
Deklaration
procedure Check; virtual;
Beschreibung
Ruft TKeyMenu.SetCheck(bf_Checked) auf und markiert damit den über VMNum angegebenen Menüeintrag mit einem Häkchen.
Deklaration
procedure Disable; virtual;
Beschreibung
Ruft TKeyMenu.SetState(bf_Disabled) auf und macht damit den Menüeintrag mit Index VMNum nicht anwählbar.
Deklaration
procedure Enable; virtual;
Beschreibung
Ruft TKeyMenu.SetState(bf_Enabled) auf und macht damit den Menüeintrag mit Index VMNum wieder anwählbar.
Deklaration
function GetCheck: integer; virtual;
Beschreibung
Gibt bf_Checked bzw. bf_Unchecked zurück, je nachdem ob der Menüeintrag mit Index VMNum mit einem Häkchen markiert ist oder nicht.
Ist VMNum kein korrekter Eintrag zugewiesen, erhält man als Rückgabe id_No.
Deklaration
function GetState: integer; virtual;
Beschreibung
Gibt bf_Enabled bzw. bf_Disabled zurück, je nachdem ob der Menüeintrag mit Index VMNum anwählbar ist oder nicht.
Ist VMNum kein korrekter Eintrag zugewiesen, erhält man als Rückgabe id_No.
Deklaration
function GetText: string; virtual;
Beschreibung
Gibt den Text des Menüeintrags mit Index VMNum zurück bzw. einen Leerstring, wenn VMNum kein korrekter Eintrag zugewiesen ist.
Deklaration
procedure SetCheck(CheckFlag: integer); virtual;
Beschreibung
Bestimmt die Markierung des Menüeintrags VMNum, d.h. bf_Checked oder bf_Unchecked.
Deklaration
procedure SetState(StateFlag: integer); virtual;
Beschreibung
Setzt den Zustand des Menüeintrags VMNum, d.h. bf_Enabled oder bf_Disabled.
Deklaration
procedure SetText(ATextString: string); virtual;
Beschreibung
Weist dem Menüeintrag VMNum einen neuen Text zu.
Wichtig: Man muß selbst darauf achten, daß der String nicht zu lang ist! Ist der String allerdings zu kurz, wird er mit Leerzeichen aufgefüllt.
Deklaration
function TestKey(Stat,Key: integer): boolean; virtual;
Beschreibung
Wenn Stat=TKeyMenu.VStat, Key=TKeyMenu.VKey und TKeyMenu.GetState<>bf_Disabled ist, liefert TestKey true zurück. Außerdem werden dann folgende Aktionen ausgeführt: Der Menütitel VTNum wird invertiert; wenn TKeyMenu.VPipe<>nil ist, wird die entsprechende GEM-Message verschickt; zum Schluß wird dann noch Work aufgerufen. Ansonsten gibt TestKey false zurück.
Wichtig: Wenn in VStat K_SHIFT eingetragen ist, werden beide <Shift>-Tasten gleichwertig behandelt!
Deklaration
function TestMenu(mNum: integer): boolean; virtual;
Beschreibung
Wenn mNum<>VMNum ist, gibt TestMenu false zurück. Ansonsten liefert diese Methode true. Vorher wird noch - wenn TKeyMenu.VPipe<>nil ist - die entsprechende GEM-Message verschickt und dann Work aufgerufen.
Deklaration
procedure Toggle; virtual;
Beschreibung
Wechselt beim Menüeintrag VMNum mit TKeyMenu.SetCheck den Zustand zwischen gesetztem und nicht gesetztem Häkchen.
Deklaration
procedure Uncheck; virtual;
Beschreibung
Ruft TKeyMenu.SetCheck(bf_Unchecked) auf und entfernt damit ein evtl. vor dem Menüeintrag mit Index VMNum vorhandenes Häkchen.
TLookupValidator vergleicht einen gegebenen String mit einer Liste gültiger Werte. Es ist ein abstrakter Objekttyp, d.h. es macht nicht sehr viel Sinn, ihn zu instantiieren. Er kann aber als Grundlage neuer Objekttypen verwendet werden, die über eine entsprechende Liste gültiger Werte verfügen. Dazu muß dann auch die Methode Lookup überschrieben werden.
Pointer
PLookupValidator = ^TLookupValidator;
Methoden
Vorfahre
Nachfahre
Deklaration
function IsValid(s: string): boolean; virtual;
Beschreibung
Gibt true zurück, wenn TLookupValidator.Lookup true liefert. Wenn voNotEmpty gesetzt ist, darf die Eingabe außerdem nicht leer sein, sonst wird false zurückgegeben.
Deklaration
function Lookup(s: string): boolean; virtual;
Beschreibung
Vergleicht die Zeichenkette s mit einer Liste gültiger Elemente und gibt true zurück, wenn s einem dieser Elemente entspricht, sonst false.
TLookupValidator.Lookup ist allerdings eine abstrakte Methode, die immer true zurückgibt.
TMenu ist ein spezielles TKeyMenu-Objekt, das nur auf Mausanwahl eines Menüeintrags reagiert. Zusätzlich kann eine GEM-Message übergeben werden, die bei Aktivierung automatisch verschickt wird.
Pointer
PMenu = ^TMenu;
Methoden
Vorfahre
Nachfahren
-
Deklaration
constructor Init(AParent: PEventObject; mNum: integer; Msg: pointer; GetHnd: boolean);
Beschreibung
Ruft TKeyMenu.Init auf, wobei die Tastatur-Parameter und der Menütitel auf -1 gesetzt werden, d.h. alle Tastaturfunktionen von TKeyMenu werden ausgeschaltet.
TKeyMenu.VGHnd wird auf GetHnd gesetzt. Wenn Msg<>nil ist, sollte der Pointer auf einen 16 Bytes großen Bereich zeigen (bequemerweise z.B. ein Pipearray), in dem sich eine komplette GEM-Message befindet. Diese Message wird dann in TKeyMenu.VPipe umkopiert, wobei VPipe^[1] mit TApplication.apID und VPipe^[2] mit 0 initialisiert wird.
Deklaration
function TestKey(Stat,Key: integer): boolean; virtual;
Beschreibung
Liefert einfach nur false zurück, d.h. das TMenu-Objekt reagiert nicht mehr auf eine Tastaturanwahl.
TObject ist das grundlegende Objekt von ObjectGEM. Alle weiteren Objekte stammen letztendlich von TObject ab. TObject besitzt keinen Vorfahren.
Pointer
PObject = ^TObject;
Methoden
Vorfahre
-
Nachfahren
Deklaration
constructor Init;
Beschreibung
Initialisiert das Objekt. Wird von den Konstruktoren aller abgeleiteten Objekte aufgerufen.
Deklaration
procedure Free;
Beschreibung
Ruft den Destruktor Done auf und entfernt das Objekt aus dem Speicher.
Deklaration
destructor Done; virtual;
Beschreibung
Gibt den Speicher von dynamischen Objekten frei.
Popup-Menüs erscheinen an einer beliebigen Bildschirmposition (z.B. beim Mauscursor) und lassen den Benutzer aus einer festen Liste von Werten, Aktionen etc. auswählen. Eine einfache Bearbeitung von Popup-Menüs kann mit TApplication.Popup erfolgen. Eine Beschreibung der Tastatursteuerung und der weitergehenden Programmierung findet sich unter "Popup-Menüs".
Pointer
PPopup = ^TPopup;
Felder
Methoden
Vorfahre
Nachfahren
-
Deklaration
pFlag: integer;
Beschreibung
Gibt an, auf welche Position sich die Koordinaten pX und pY beziehen. Wird mit POP_LEFTOP (0) initialisiert, d.h. pX und pY entsprechen der linken oberen Ecke des Popup-Menüs. Der andere mögliche Wert ist POP_CENTER (1), pX und pY entsprechen dann der Mitte des Popups.
Deklaration
pIndex: integer; (nur lesen)
Beschreibung
Entspricht dem Index des Popup-Hintergrundrechtecks im Objektbaum PopTree. Wird von TPopup.Init gesetzt. Kann auch ROOT sein (dann wäre der gesamte Baum das Popup-Menü).
Deklaration
pMax: integer; (nur lesen)
Beschreibung
Gibt an, wieviele Einträge das Popup-Menü maximal enthält. Bei den dynamischen Popups kann das Menü mehr Einträge besitzen, als gerade sichtbar sind!
Deklaration
PopTree: PTree; (nur lesen)
Beschreibung
PopTree zeigt auf den Objektbaum, in dem man praktischerweise alle Popup-Menüs eines Programms zusammenfassen kann (allerdings nicht muß). Die Menüs bestehen aus einem G_BOX-Objekt als Hintergrund, das von oben nach unten sortierte G_STRING-Einträge enthält.
Wird von TPopup.Init gesetzt.
Deklaration
pRows: integer; (nur lesen)
Beschreibung
Gibt an, wieviele Einträge angezeigt werden, d.h. aus wieviele Zeilen das Popup-Menü besteht.
Beim Entwurf im RCS muß bedacht werden, daß nicht mehr als z.Z. 19 Einträge erlaubt sind!
Deklaration
pX: integer;
Beschreibung
Gibt die X-Position des Popup-Menüs an. Wird mit 0 initialisiert und sollte deshalb geändert werden (das macht z.B. TApplication.Popup).
Deklaration
pY: integer;
Beschreibung
Gibt die Y-Position des Popup-Menüs an. Wird mit 0 initialisiert und sollte deshalb geändert werden (das macht z.B. TApplication.Popup).
Deklaration
constructor Init(AParent: PEventObject; tIndx,oIndx: integer);
Beschreibung
Ruft den Vorfahren TEvent.Init auf und setzt dann PopTree auf den durch tIndx angegebenen Objektbaum. Danach werden pMax und pRows berechnet. Entspricht das Menü nicht den Konventionen (siehe PopTree und pRows), wird die Initialisierung abgebrochen. Schließlich wird noch pIndex auf oIndx gesetzt, und pFlag, pX und pY werden initialisiert. Wenn in tIndx id_No übergeben wird, kann mit der Methode SetPopTree z.B. ein im Speicher erzeugter Objektbaum gesetzt werden, andernfalls wird das übergebene Menü umkopiert! oIndx muß aber trotzdem korrekt gesetzt (d.h. größer gleich ROOT) sein!
Deklaration
destructor Done; virtual;
Beschreibung
Gibt den Speicherplatz der kopierten Resource frei und ruft den Vorfahren TEvent.Done auf.
Deklaration
procedure Check(nr: integer); virtual;
Beschreibung
Ruft SetCheck(nr,bf_Checked) auf und markiert damit den Eintrag nr mit einem Häkchen.
Deklaration
procedure Disable(nr: integer); virtual;
Beschreibung
Ruft SetState(nr,bf_Disabled) auf und macht den Eintrag nr damit nicht anwählbar (hell dargstellt).
Deklaration
procedure Enable(nr: integer); virtual;
Beschreibung
Ruft SetState(nr,bf_Enabled) auf und macht den Eintrag nr damit wieder anwählbar.
Deklaration
function Execute: integer; virtual;
Beschreibung
Execute übernimmt die eigentliche Bearbeitung des Popup-Menüs (Zeichnen, Abarbeiten, Auswerten). Als Rückgabe erhält man id_No, wenn die Bearbeitung abgebrochen wurde, oder einen Wert zwischen 0 und pRows-1 (inklusive), der die Nummer des angewählten Eintrags angibt.
Die Anwahl der Einträge kann mit der linken Maustaste, <Return>, <Enter> oder <Space> erfolgen. Das Menü kann mit der rechten Maustaste, <Undo> oder <Esc> abgebrochen werden. Zur Steuerung innerhalb des Menüs können (neben der Maus) die Tasten <Cursor hoch,runter> und [<Shift>+]<Home> benutzt werden.
Sind in dem Menü alle Einträge disabled, wird es zwar angezeigt, als Rückgabe erhält man aber immer id_No.
Deklaration
function GetCheck(nr: integer): integer; virtual;
Beschreibung
Liefert bf_Checked oder bf_Unchecked, je nachdem ob der Menü-Eintrag nr markiert ist oder nicht. Ist nr kleiner Null oder größer gleich pRows, wird id_No zurückgegeben.
Deklaration
function GetState(nr: integer): integer; virtual;
Beschreibung
Liefert bf_Enabled oder bf_Disabled, je nachdem ob der Menü-Eintrag nr anwählbar ist oder nicht. Ist nr kleiner Null oder größer gleich pRows, wird id_No zurückgegeben.
Deklaration
function GetText(nr: integer): string; virtual;
Beschreibung
Gibt den Text des Menü-Eintrags nr zurück. Ist nr kleiner Null oder größer gleich pRows, wird ein Leerstring zurückgegeben.
Deklaration
procedure SetCheck(nr,CheckFlag: integer); virtual;
Beschreibung
Wenn nr im Intervall [0,pRows) liegt, wird der entsprechende Menü-Eintrag markiert (CheckFlag=bf_Checked) oder die Markierung zurückgesetzt (CheckFlag=bf_Unchecked).
Deklaration
procedure SetState(nr,StateFlag: integer); virtual;
Beschreibung
Wenn nr im Intervall [0,pRows) liegt, wird der entsprechende Menü-Eintrag anwählbar gemacht (StateFlag=bf_Enabled) oder nicht (StateFlag=bf_Disabled).
Deklaration
procedure SetText(nr: integer; ATextString: string); virtual;
Beschreibung
Wenn nr im Intervall [0,pRows) liegt, wird dem entsprechenden Menü-Eintrag der Text ATextString zugewiesen.
Deklaration
procedure Toggle(nr: integer); virtual;
Beschreibung
Wenn der Eintrag nr (0..pRows-1) nicht markiert ist, wird er markiert, ansonsten wird die Markierung zurückgesetzt.
Deklaration
procedure Uncheck(nr: integer); virtual;
Beschreibung
Ruft SetCheck(nr,bf_Unchecked) auf und nimmt damit die Markierung des Eintrags zurück.
Deklaration
procedure SetPopTree(tree: PTree); virtual;
Beschreibung
Setzt den in tree übergebenen Objektbaum als Baum für das Popup-Menü. Außerdem werden einige interne Variablen ermittelt.
Wird von TPopup.Init aufgerufen, wenn als Tree-Index ein Wert ungleich id_No übergeben wurde. Normalerweise ruft man diese Methode nicht selbst auf.
Deklaration
function ExitPop(mX,mY: integer): integer; virtual;
Beschreibung
Wird von TPopup.Execute aufgerufen, solange sich der Mauscursor außerhalb des Popup-Menüs befindet. In mX und mY erhält man die aktuellen Mauskoordinaten. Gibt man einen Wert ungleich id_No zurück, wird das Popup-Menü mit dem von ExitPop gelieferten Wert abgebrochen.
Deklaration
function KeyExit(Stat,Key: integer): integer; virtual;
Beschreibung
Wird von TPopup.Execute aufgerufen, wenn eine Taste gedrückt wird, die nicht zur Steuerung des Popup-Menüs benutzt wird. Hier können solche Tasten nun ausgewertet werden.
Gibt man einen Wert ungleich id_No zurück, wird das Popup-Menü mit dem von KeyExit gelieferten Wert abgebrochen.
Deklaration
procedure SetSelection(nr: integer); virtual;
Beschreibung
Setzt den Mauscursor auf den Popup-Menü-Eintrag mit der Nummer nr (0..pMax-1).
Deklaration
function GetSelection: integer; virtual;
Beschreibung
Wenn ein Eintrag des Popup-Menüs markiert ist, erhält man von dieser Routine dessen Nummer (0..pMax-1).
Ansonsten wird id_No zurückgegeben.
Mit diesem Objekt können Eingabefelder mit Datenbank-Masken, die kompatibel zu Paradox (Borland) sind, auf Gültigkeit überprüft werden. Die Möglichkeiten sind sehr komplex und gehen weit über die vom GEM bereitgestellten Masken hinaus.
Pointer
PPXPictureValidator = ^TPXPictureValidator;
Felder
Methoden
Vorfahre
Nachfahren
-
Deklaration
Pic: PString;
Beschreibung
Enthält die Paradox-Maske zur Überprüfung der Eingabe. Wird von TPXPictureValidator.Init gesetzt und von Picture aus gewertet.
Die Masken setzen sich aus folgenden Elementen zusammen:
# | Akzeptiert nur eine Ziffer |
? | Akzeptiert einen beliebigen Buchstaben |
& | Akzeptiert Buchstaben und wandelt sie |
in Großbuchstaben um | |
@ | Akzeptiert jedes Zeichen |
! | Akzeptiert jedes Zeichen und wandelt |
Klein- in Großbuchstaben um | |
; | Das folgende Zeichen wird buchstäblich |
übernommen | |
* | Wiederholungszähler |
[] | Der Maskenteil ist optional |
{} | markiert eine Gruppe, mit |
, | werden die Alternativen getrennt |
Alle anderen Zeichen werden buchstäblich übernommen. Bei Gruppierungen mit Alternativen kann es vorkommen, daß spätere Alternativen nicht erkannt werden, weil die jeweilige Eingabe schon als Anfangsteil einer früheren Maske aufgetaucht ist. In diesem fall muß man versuchen, die Gruppe anders zu sortieren.
Beispiele
DM*#;,##;@ | Stückpreis, z.B. DM345,67@ |
???;;;# | z.B. ABC;# |
*5# | fünf Ziffern (#####) |
*# | beliebig viele (auch Null) Ziffern |
&*? | Wort mit großem Anfangsbuchstaben |
*3{##:} | = ##:##:##: |
*3{5}# | = 555# |
*35# | 35 Wiederholungen von # |
{20,75,100}W | Wattzahlen von Glühbirnen |
*{&[*?][@][ ]} | bel. Anzahl Wörter mit großem |
Anfangsbuchstaben | |
ROT,BLAU | eines der beiden Worte |
###,## | zwei- oder dreistellige Zahl; |
##,### hätte nicht den ge- | |
wünschten Effekt! |
Deklaration
constructor Init(APic: string; AutoFill: boolean);
Beschreibung
Ruft TValidator.Init auf und setzt Pic auf APic. Dann wird Options auf voOnAppend und, wenn in AutoFill true übergeben wurde, zusätzlich auf voFill gesetzt. Danach wird die in APic übergebene Maske auf Gültigkeit getestet. Wenn ein Fehler auftritt, wird TValidator.Status auf vsSyntax gesetzt.
Wichtig: AutoFill hat z.Z. noch keine Wirkung!
Deklaration
destructor Done; virtual;
Beschreibung
Pic wird freigegeben, danach wird der Destruktor des Vorfahren aufgerufen.
Deklaration
procedure Error; virtual;
Beschreibung
Zeigt die Fehlermeldung an, daß die Eingabe nicht zur Maske in Pic paßt.
Deklaration
function IsValid(s: string): boolean; virtual;
Beschreibung
Gibt true zurück, wenn die Eingabe korrekt oder leer ist (letzteres nur dann, wenn voNotEmpty nicht gesetzt ist).
Deklaration
function IsValidInput(var s: string; SuppressFill: boolean): boolean; virtual;
Beschreibung
Liefert true, wenn Pic keine Maske zugewiesen ist oder wenn Picture keinen Fehler in der Eingabe feststellen kann.
Deklaration
function Picture(var Input: string; AutoFill: boolean): TPicResult; virtual;
Beschreibung
Prüft den in Input übergebenen String auf Übereinstimmung mit der Maske in Pic. Dabei werden notfalls Korrekturen (z.B. Groß-/Kleinwandlung) vorgenommen. Ist AutoFill true, wird die Eingabe mit evtl. fehlenden Zeichen aufgefüllt, sofern diese eindeutig bestimmt sind. Wichtig: Diese Option ist z.Z. noch ohne Wirkung!
TPicResult ist wie folgt deklariert:
PPicResult = ^TPicResult; TPicResult = (prComplete, prIncomplete, prEmpty, prError, prSyntax, prAmbiguous, prIncompNoFill);
Als Rückgabe erhält man einen der folgenden Werte (nicht beschriebene Werte werden nur intern verwendet):
prComplete | Die Eingabe ist korrekt |
prIncomplete | Die Eingabe ist soweit korrekt, |
erfüllt die Maske aber nicht voll- | |
ständig | |
prEmpty | Die Eingabe ist leer |
prError | Die Eingabe paßt nicht zur Maske |
prSyntax | Die Maske ist falsch (meistens |
falsche Klammerung) | |
prAmbiguous | Tritt auf, wenn die Eingabe die |
Maske erfüllt, aber am Ende der | |
Eingabe noch Zeichen übrig bleiben |
RadioButtons werden in RCS-Hierarchiestufen zusammengefaßt, d.h. alle Buttons innerhalb eines Rahmens o.ä. gehören zusammen. Von diesen Buttons kann dann pro Hierarchiestufe nur einer aktiv sein. Es empfiehlt sich, den zugehörigen Rahmen mit einem TGroupBox-Objekt zu verknüpfen.
Pointer
PRadioButton = ^TRadioButton;
Methoden
Vorfahre
Nachfahren
-
Deklaration
constructor Init(AParent: PDialog; AnIndx: integer; UserDef: boolean; Hlp: string);
Beschreibung
Ruft den Vorfahren TCheckBox.Init auf und setzt TControl.Style auf cs_RadioButton.
Deklaration
function Install: boolean;
Beschreibung
Wenn das Dialogelement vom Typ G_BUTTON ist, wird UsrDef auf true gesetzt und der RadioButton im 3D-Look gezeichnet.
Wenn die Funktion false zurückliefert, wird die Installation von TRadioButton.Init abgebrochen. Standardmäßig wird allerdings immer true zurückgegeben.
Deklaration
procedure SetState(StateFlag: integer); virtual;
Beschreibung
Wenn in StateFlag bf_Disabled übergeben wird, wird zunächst TCheckBox.Uncheck aufgerufen. Danach wird immer der Vorfahre TControl.SetState aufgerufen.
TRangeValidator überprüft, ob eine vom Anwender eingegebene Zahl innerhalb eines festgelegten ganzzahligen Bereichs liegt.
Pointer
PRangeValidator = ^TRangeValidator;
Felder
Methoden
Vorfahre
Nachfahren
-
Deklaration
Min: longint;
Beschreibung
Bestimmt den kleinstmöglichen ganzzahligen Wert für die Eingabe.
Deklaration
Max: longint;
Beschreibung
Bestimmt den größtmöglichen ganzzahligen Wert für die Eingabe.
Deklaration
constructor Init(AMin,AMax: longint);
Beschreibung
Ruft TFilterValidator.Init(['0'..'9','+','-']) auf, d.h. in dem Eingabefeld sind nur positive oder negative Dezimalzahlen erlaubt. Wenn AMin größer gleich Null ist, wird '-' aus ValidChars wieder entfernt. Dann wird TRangeValidator.Min auf AMin und TRangeValidator.Max auf AMax gesetzt und voOnEdit aus Options gelöscht.
Deklaration
procedure Error; virtual;
Beschreibung
Zeigt die Fehlermeldung an, daß der eingegebene Wert nicht innerhalb des zulässigen Bereichs liegt.
Deklaration
function IsValid(s: string): boolean; virtual;
Beschreibung
Gibt true zurück, wenn s (in eine longint-Zahl umgewandelt) innerhalb des Intervalls [TRangeValidator.Min,TRangeValidator.Max] liegt und TFilterValidator.IsValid ebenfalls true liefert.
Evtl. vorhandene Leerzeichen werden vor der Umwandlung abgeschnitten.
Deklaration
function IsValidInput(var s: string; SuppressFill: boolean): boolean; virtual;
Beschreibung
Gibt true zurück, wenn s (in eine longint-Zahl umgewandelt) innerhalb des Intervalls [TRangeValidator.Min,TRangeValidator.Max] liegt und TFilterValidator.IsValidInput ebenfalls true liefert.
TScrollBar ist das Dialogelementobjekt für Bildlaufleisten innerhalb von Dialogen. Das Objekt kümmert sich automatisch um die Abarbeitung und das Neuzeichnen des Sliders. Soll nach einer Änderung des Sliderwertes eine Aktion ausgeführt werden, muß die Methode TScrollBar.Work überschrieben werden.
Pointer
PScrollBar = ^TScrollBar;
Felder
Methoden
Vorfahre
Nachfahren
-
Deklaration
IsHorizontal: boolean; (nur lesen)
Beschreibung
Gibt an, ob es sich bei der Bildlaufleiste um einen vertikalen (false) oder horizontalen (true) Slider handelt. Dieser Wert wird von TScrollBar.Init automatisch aus den Abmessungen des Sliders bestimmt.
Deklaration
LineMagnitude: longint;
Beschreibung
Gibt an, um wieviele Einheiten der Slider verschoben wird, wenn einer der Pfeile einfach angeklickt wird. Wird von TScrollBar.Init auf 1 gesetzt.
Deklaration
PageMagnitude: longint;
Beschreibung
Gibt an, um wieviele Einheiten der Slider verschoben wird, wenn der graue (bzw. schraffierte) Bereich einfach angeklickt wird. PageMagnitude wird von TScrollBar.Init zunächst auf TScrollBar.Size gesetzt.
Deklaration
Size: longint;
Beschreibung
Size gibt an, wie groß der verschiebbare Kasten im Vergleich zum gesamten Slider sein soll. Man kann sich diese Zahl als Anzahl der Einträge einer Liste vorstellen, die gleichzeitig sichtbar sind. Wenn also fünf Einträge untereinander angezeigt werden, sollte Size 5 sein; wenn aber z.B. eine Adresse dargestellt wird, ist Size normalerweise 1.
Size wird durch TScrollBar.Init gesetzt, der kleinstmögliche Wert ist 1.
Deklaration
constructor Init(AParent: PDialog; SIndx,DIndx, IIndx: integer; TheSize, TheRange: longint; Hlp: string);
Beschreibung
Ruft den Vorfahren TControl.Init mit den Parametern AParent, SIndx und Hlp auf. SIndx muß der Index eines Dialogelements vom Typ G_BOX sein, das den grauen Hintergrund des Sliders darstellt. Innerhalb dieses Elements muß sich genau ein weiteres G_BOX-Element befinden, das zum Verschieben benutzt wird. Je nachdem ob SIndx eine größere Breite bzw. Höhe besitzt, wird IsHorizontal auf true bzw. false gesetzt und das Verschiebe-Element auf die maximale Höhe bzw. Breite gebracht.
DIndx und IIndx bezeichnen Elemente vom Typ G_BOXCHAR, die für die Slider-Pfeile verwendet werden. Je nach Slidertyp werden die korrekten Pfeile automatisch gesetzt (dies muß also nicht im RCS gemacht werden).
TControl.Style wird auf cs_ScrollBar und eine der sbs_XXXX-Konstanten gesetzt, TControl.ID auf id_NoExit, TScrollBar.Size auf TheSize, PageMagnitude auf Size und LineMagnitude auf 1. TheRange gibt an, wieviele Einheiten der gesamte Slider umfaßt; Minimum ist 1.
Auch TScrollBar-Objekte nehmen standardmäßig nicht am Datentransfermechanismus teil.
Deklaration
function TestIndex(AnIndx: integer): boolean; virtual;
Beschreibung
Liefert true, wenn eines der vier Slider-Elemente (Hintergrund, Verschiebe-Element, zwei Pfeile) angewählt wurde.
Deklaration
function Transfer(DataPtr: pointer; TransferFlag: word): word; virtual;
Beschreibung
Überträgt Daten mit Hilfe der Struktur TScrollBarTransferRec.
Deklaration
procedure Changed(AnIndx: integer; DblClick: boolean); virtual;
Beschreibung
In dieser Methode wird der Sliderwert in Abhängigkeit vom angewählten Dialogelement verändert und der Slider evtl. neu gezeichnet.
Der neue Wert wird mit SetPosition gesetzt.
Deklaration
procedure Work; virtual;
Beschreibung
Dies ist eine abstrakte Methode, die zunächst nichts macht. Sie wird aber bei jeder Wertänderung des Sliders aufgerufen, so daß hier z.B. die Anzeige des neuen Wertes stattfinden kann.
Deklaration
procedure SetPosition(ThumbPos: longint); virtual;
Beschreibung
Setzt die Bildlaufleiste auf die neue Position ThumbPos. Es wird darauf geachtet, daß der mit TScrollBar.SetRange eingestellte Bereich nicht unter- bzw. überschritten wird.
Deklaration
function GetPosition: longint; virtual;
Beschreibung
Gibt den aktuellen Wert des Sliders zurück.
Deklaration
function DeltaPos(Delta: longint): longint; virtual;
Beschreibung
Ändert den Wert der Bildlaufleiste mit SetPosition um Delta Einheiten. Als Rückgabe erhält man den neuen Wert.
Deklaration
procedure SetRange(LoVal,HiVal: longint); virtual;
Beschreibung
Setzt den Wertebereich der Bildlaufleiste. In LoVal wird die untere, in HiVal die obere Grenze übergeben. Die aktuelle Position wird an die neue untere Grenze angepaßt.
SetRange(-2,5) setzt z.B. die untere Grenze auf -2 und die obere auf 5, d.h. der Slider umfaßt einen Bereich von acht Einheiten.
Deklaration
function GetRange(var LoVal,HiVal: longint): longint; virtual;
Beschreibung
Gibt in LoVal die untere Grenze, in HiVal die obere Grenze des Sliders zurück. Die Rückgabe der Funktion ist der gesamte Bereich, den die Bildlaufleiste umfaßt. Dieser Wert ist allerdings immer um eins erhöht, d.h. die Rückgabe entspricht (HiVal-LoVal)+2.
Wird TScrollBar.Init für TheRange z.B. 100 übergeben, gibt GetRange in diesem Fall also 101 zurück.
Deklaration
function GetSBoxMin: integer; virtual;
Beschreibung
Gibt an, wie klein das Verschiebe-Element des Sliders minimal werden darf (in Pixeln). Voreingestellt ist z.Z. 8.
TScroller-Objekte werden über das TWindow.Scroller-Feld verwaltet. Das Objekt bietet einem Fenster die automatische Bearbeitung der Bildlaufleisten (Slider), d.h. man braucht sich nicht mehr um die Abfrage und Aktualisierung der Slider (und standardmäßig auch nicht um das Neuzeichnen des Fensters) kümmern!
Normalerweise initialisieren und manipulieren Sie TScroller- Objekte von den Methoden der Fenster-Objekte aus, zu denen Sie gehören.
Pointer
PScroller = ^TScroller;
Felder
Methoden
Vorfahre
Nachfahren
-
Deklaration
HasHScrollBar: boolean; (nur lesen)
Beschreibung
Wenn das zugehörige Fenster über einen horizontalen Slider verfügt, ist HasHScrollBar true.
Deklaration
HasVScrollBar: boolean; (nur lesen)
Beschreibung
Wenn das zugehörige Fenster über einen vertikalen Slider verfügt, ist HasVScrollBar true.
Deklaration
Style: word;
Beschreibung
Gibt erweiterte Fähigkeiten des TScroller-Objektes an. Wird von TScroller.Init auf Null gesetzt, z.Z. kann nur scs_BitbltScrolling verwendet werden.
Deklaration
TrackMode: boolean;
Beschreibung
Ist TrackMode true, wird das Fenster bei Veränderungen der Sliderpositionen automatisch neu gezeichnet, indem TScroller-intern eine wind_update()-Schachtelung durchgeführt und WMRedraw direkt aufgerufen wird. Ansonsten wird ForceRedraw verwendet. scs_BitbltScrolling funktioniert nur, wenn TrackMode true ist.
Standardmäßig wird TrackMode mit true initialisiert.
Deklaration
Window: PWindow; (nur lesen)
Beschreibung
Window zeigt auf das Fenster, das TScroller besitzt. Wird von TScroller.Init gesetzt.
Deklaration
XLine: longint;
Beschreibung
XLine ist die Anzahl der XUnit-Einheiten, um die - als Reaktion auf ein Anklicken eines der beiden horizontalen Pfeile - der Slider verschoben werden soll. Der voreingestellte Wert ist 1.
Deklaration
XPage: longint;
Beschreibung
XPage ist die Anzahl von XUnit-Einheiten, um die der horizontale Slider verschoben wird, wenn in den grauen Bereich geklickt wird.
Wird von TScroller.Init auf die aktuelle Breite des Fensters in XUnit-Einheiten gesetzt und beim Ändern der Fenstergröße mittels SetPageSize entsprechend angepaßt.
Deklaration
XPos: longint; (nur lesen)
Beschreibung
XPos ist die aktuelle horizontale Position, angegeben in XUnit-Einheiten.
Deklaration
XRange: longint; (nur lesen)
Beschreibung
XRange ist die Gesamtzahl von XUnit-Einheiten, um die das Fenster horizontal gescrollt werden kann. Wird von TScroller.Init gesetzt.
Deklaration
XUnit: integer; (nur lesen)
Beschreibung
XUnit ist die kleinste Anzahl von Pixeln, um die das Fenster horizontal gescrollt werden kann. Soll das Fenster Text anzeigen, kann XUnit mit SetUnits auf z.B. charWidth gesetzt werden. Wird von TScroller.Init gesetzt.
Deklaration
YLine: longint;
Beschreibung
YLine ist die Anzahl der YUnit-Einheiten, um die - als Reaktion auf ein Anklicken eines der beiden vertikalen Pfeile - der Slider verschoben werden soll. Der voreingestellte Wert ist 1.
Deklaration
YPage: longint;
Beschreibung
YPage ist die Anzahl von YUnit-Einheiten, um die der vertikale Slider verschoben wird, wenn in den grauen Bereich geklickt wird.
Wird von TScroller.Init auf die aktuelle Höhe des Fensters in YUnit-Einheiten gesetzt und beim Ändern der Fenstergröße mittels SetPageSize entsprechend angepaßt.
Deklaration
YPos: longint; (nur lesen)
Beschreibung
YPos ist die aktuelle vertikale Position, angegeben in YUnit-Einheiten.
Deklaration
YRange: longint; (nur lesen)
Beschreibung
YRange ist die Gesamtzahl von YUnit-Einheiten, um die das Fenster vertikal gescrollt werden kann. Wird von TScroller.Init gesetzt.
Deklaration
YUnit: integer; (nur lesen)
Beschreibung
YUnit ist die kleinste Anzahl von Pixeln, um die das Fenster vertikal gescrollt werden kann. Soll das Fenster Text anzeigen, kann YUnit mit SetUnits auf z.B. charHeight gesetzt werden. Wird von TScroller.Init gesetzt.
Deklaration
constructor Init(TheWindow: PWindow; TheXUnit, TheYUnit: integer; TheXRange,TheYRange: longint);
Beschreibung
Initialisiert ein neues TScroller-Objekt mit Window (=TheWindow) als dem besitzenden Fenster, wozu auch TObject.Init aufgerufen wird. Danach wird das Scroller-Feld des zugehörigen Fensters auf @self, TrackMode auf true, XLine und YLine auf 1, TScroller.XPos und TScroller.YPos auf 0, XUnit auf TheXUnit und YUnit auf TheYUnit gesetzt. HasHScrollBar und HasVScrollBar werden ermittelt. Schließlich werden noch SetPageSize und SetRange(TheXRange,TheYRange) aufgerufen, womit alle Felder initialisiert wären.
Deklaration
destructor Done; virtual;
Beschreibung
Das Scroller-Feld des zugehörigen Fensters wird auf nil gesetzt, dann wird TObject.Done aufgerufen.
Deklaration
function GetXOrg: longint; virtual;
Beschreibung
Gibt den (virtuellen) X-Ursprung relativ zur linken Kante des Fenster-Arbeitsbereichs zurück. Wenn der Slider nicht ganz links ist, ist die Rückgabe also negativ.
Wenn die Ausgaben an diesen neuen Ursprung angepaßt werden, kümmert sich TScroller automatisch darum, daß immer der richtige Ausschnitt im Fenster gezeigt wird!
Deklaration
function GetYOrg: longint; virtual;
Beschreibung
Gibt den (virtuellen) Y-Ursprung relativ zur oberen Kante des Fenster-Arbeitsbereichs zurück. Wenn der Slider nicht ganz oben ist, ist die Rückgabe also negativ.
Wenn die Ausgaben an diesen neuen Ursprung angepaßt werden, kümmert sich TScroller automatisch darum, daß immer der richtige Ausschnitt im Fenster gezeigt wird!
Deklaration
procedure HScroll; virtual;
Beschreibung
Berechnet die neue Sliderposition, wenn TScroller.XPos geändert wurde. Wird intern von ScrollTo und ScrollBy verwendet und braucht nicht direkt aufgerufen werden.
Deklaration
function IsVisibleRect(X,Y,XExt, YExt: longint): boolean; virtual;
Beschreibung
Gibt true zurück, wenn ein Teil des in XUnit- bzw. YUnit-Einheiten übergebenen Rechtecks gegenwärtig im Arbeitsbereich des besitzenden Fensters sichtbar ist.
Deklaration
procedure ScrollBy(dX,dY: longint); virtual;
Beschreibung
Scrollt um den durch dX und dY angegebenen Betrag und aktualisiert die Slider. Ist TrackMode true, wird der Fensterinhalt sofort neu gezeichnet, ansonsten wird nur ForceRedraw des zugehörigen Fensters aufgerufen.
Deklaration
procedure ScrollTo(X,Y: longint); virtual;
Beschreibung
Scrollt zur Position (X,Y) und aktualisiert die Slider. Ist TrackMode true, wird der Fensterinhalt sofort neu gezeichnet, ansonsten wird nur die Methode ForceRedraw des zugehörigen Fensters aufgerufen.
Deklaration
procedure SetPageSize; virtual;
Beschreibung
Setzt die Felder XPage und YPage entsprechend der aktuellen Breite und Höhe des Fensters, die in XUnit- bzw. YUnit-Einheiten umgerechnet werden.
Deklaration
procedure SetRange(TheXRange,TheYRange: longint); virtual;
Beschreibung
Setzt XRange und YRange neu, wobei darauf geachtet wird, daß die Mindestgröße von 1 nicht unterschritten wird. Dann wird SetSBarRange aufgerufen.
Deklaration
procedure SetSBarRange; virtual;
Beschreibung
Überprüft die TScroller-Werte auf ihre Gültigkeit und paßt die Slider (Position und Größe) dann an diese Werte an. Wenn nötig, wird auch der Fensterinhalt neu gezeichnet.
Deklaration
procedure SetUnits(TheXUnit,TheYUnit: integer); virtual;
Beschreibung
Setzt XUnit und YUnit auf die übergebenen Werte, wobei auf die Mindestgröße von 1 geachtet wird. Dann wird der Fensterinhalt neu gezeichnet.
Deklaration
procedure VScroll; virtual;
Beschreibung
Berechnet die neue Sliderposition, wenn TScroller.YPos geändert wurde. Wird intern von ScrollTo und ScrollBy verwendet und braucht nicht direkt aufgerufen werden.
TSortedCollection ist ein Nachfahre von TCollection, mit dem sortierte Kollektionen verwaltet werden können. Die Art der Sortierung wird durch die Methode Compare bestimmt, die zu diesem Zweck überschrieben werden muß. TSortedCollection kann Kollektionen mit und ohne doppelte Schlüssel verwalten, was durch Duplicates angegeben wird.
Pointer
PSortedCollection = ^TSortedCollection;
Felder
Methoden
Vorfahre
Nachfahre
Deklaration
Duplicates: boolean;
Beschreibung
Duplicates gibt an, ob Elemente mit gleichem Schlüssel innerhalb der Kollektion erlaubt sind. Standardmäßig wird das Feld von TSortedCollection.Init auf false gesetzt, d.h. es darf kein Schlüssel mehrfach vorkommen.
Deklaration
constructor Init(ALimit,ADelta: longint);
Beschreibung
Ruft den Vorfahren TCollection.Init auf und setzt Duplicates auf false, d.h. es sind keine doppelten Schlüssel erlaubt.
Deklaration
function Compare(Key1,Key2: pointer): integer; virtual;
Beschreibung
Compare ist eine abstrakte Methode, die überschrieben werden muß. Dabei werden mit KeyOf aus Key1 und Key2 zwei Schlüsselwerte ermittelt, die dann verglichen werden. Die Rückgabe ist wie folgt definiert:
-1 | Key1<Key2 |
0 | Key1=Key2 |
1 | Key1>Key2 |
Wird Compare nicht überschrieben, wird die Prozedur Abstract aufgerufen, die einen Laufzeitfehler erzeugt.
Deklaration
function IndexOf(Item: pointer): longint; virtual;
Beschreibung
Ermittelt mit Search die Nummer des Elements Item. Ist das gesuchte Element nicht vorhanden, gibt IndexOf -1 zurück.
Deklaration
procedure Insert(Item: pointer); virtual;
Beschreibung
Wenn das neue Element in der Kollektion noch nicht vorhanden ist, wird es an der richtigen Stelle einsortiert. Ist das Element schon vorhanden und Duplicates true, wird das Element vor dem bereits existierenden Element eingefügt. Ist das Element schon vorhanden, Duplicates aber false, wird das alte Element durch das neue ersetzt(!). Das alte Element wird in diesem Fall mit FreeItem freigegeben.
Deklaration
function KeyOf(Item: pointer): pointer; virtual;
Beschreibung
Gibt für das Element Item einen Zeiger auf den Schlüssel des Elements zurück. Standardmäßig ist dies Item selbst. Sollen andere Daten verwaltet werden (z.B. Records), muß KeyOf überschrieben werden, damit ein anderer Zeiger (in diesem Fall z.B. auf ein Feld des Records) zurückgegeben werden kann.
Beispiel
type PName = ^TName; TName = record Nachname, Vorname: string end; { ... } function MySColl.KeyOf(Item: pointer): pointer; begin KeyOf:=@PName(Item)^.Nachname end;
Deklaration
function Search(Key: pointer; var Index: longint): boolean; virtual;
Beschreibung
Sucht das Element mit dem Schlüssel Key in der Kollektion. Konnte dies gefunden werden, liefert Search true zurück, und Index enthält die Nummer des gefundenen Elements. Ansonsten wird false zurückgegeben und Index auf die Position gesetzt, bei der das angegebene Element eingefügt würde.
Mit TStatic können beliebige Textelemente recht einfach verwaltet werden. Einfache String-Elemente können außerdem unterstrichen werden.
Pointer
PStatic = ^TStatic;
Felder
Methoden
Vorfahre
Nachfahre
Deklaration
TextLen: integer; (nur lesen)
Beschreibung
Gibt die maximal zulässige Länge des Textes+1 (für das Nullbyte am Ende) an. Wird von TStatic.Init gesetzt.
Deklaration
constructor Init(AParent: PDialog; AnIndx, ATextLen: integer; UserDef: boolean; Hlp: string);
Beschreibung
Ruft den Vorfahren TControl.Init auf und setzt TextLen auf ATextLen. Wird in ATextLen -1 übergeben und ist das Dialogelement ein G_[F][BOX]TEXT-Objekt, wird die Länge automatisch berechnet.
Ist UserDef true und AnIndx der Index eines G_BUTTON-, G_STRING- oder G_TITLE-Objekts, wird UsrDef auf true gesetzt und der Text später unterstrichen ausgegeben. Ansonsten muß AnIndx zu einem G_TEXT-, G_BOXTEXT-, G_FTEXT- oder G_FBOXTEXT- Element gehören.
TControl.Style wird auf cs_Static und sts_Fill gesetzt.
Deklaration
destructor Done; virtual;
Beschreibung
Deinstalliert das Dialogelementobjekt und ruft den Vorfahren TControl.Done auf.
Deklaration
procedure Clear; virtual;
Beschreibung
Löscht den Text des Dialogelementobjekts und zeichnet das Objekt neu. sts_Fill wird beachtet.
Deklaration
function GetText: string; virtual;
Beschreibung
Gibt den Text des Dialogelementobjekts zurück. Wichtig: Leerzeichen, die evtl. wegen sts_Fill angehängt wurden, werden nicht abgeschnitten!
Deklaration
function GetTextLen: integer; virtual;
Beschreibung
Gibt length(GetText) zurück.
Deklaration
procedure SetText(ATextString: string); virtual;
Beschreibung
Setzt den Text eines Dialogelementobjekts neu und zeichnet dieses. Ist das zugehörige Textobjekt ein formatierter Text und das erste Zeichen in AText-String gleich '@', wird der Text gelöscht. sts_Fill wird beachtet.
Deklaration
function Transfer(DataPtr: pointer; TransferFlag: word): word; virtual;
Beschreibung
Überträgt die Daten des Objekts (d.h. den Text) mittels TStatic.SetText und TStatic.GetText. Wichtig: Die Rückgabe ist immer gerade; bei ungeraden Textlängen wird 1 addiert. Im TransferBuffer werden die Daten in einem string[x] abgelegt, wobei x ungerade sein muß (damit die Stringlänge incl. Nullbyte wieder gerade ist). D.h. x entspricht der Textlänge, wenn diese ungerade ist; ansonsten muß x auf Textlänge+1 gesetzt werden.
TStrCollection ist ein Nachfahre von TStringCollection und verwaltet sortierte Null-terminierte PChar-Zeichenketten.
Pointer
PStrCollection = ^TStrCollection;
Methoden
Vorfahre
Nachfahren
-
Deklaration
function Compare(Key1,Key2: pointer): integer; virtual;
Beschreibung
Gibt Sgn(StrComp(Key1,Key2)) zurück.
Deklaration
procedure FreeItem(Item: pointer); virtual;
Beschreibung
Löscht das Element Item aus der Kollektion und gibt es mit ChrDispose(PChar(Item)) frei.
TStringCollection ist ein Nachfahre von TSortedCollection und verwaltet sortierte Pascal-Zeichenketten (Strings).
Pointer
PStringCollection = ^TStringCollection;
Methoden
Vorfahre
Nachfahre
Deklaration
constructor Init(ALimit,ADelta: longint);
Beschreibung
Ruft den Vorfahren TSortedCollection.Init auf und setzt Duplicates auf true, d.h. gleiche Zeichenketten können mehrfach gespeichert werden.
Deklaration
function Compare(Key1,Key2: pointer): integer; virtual;
Beschreibung
Vergleicht PString(Key1)^ und PString(Key2)^. Die Rückgabe ist bei TSortedCollection.Compare definiert.
Deklaration
procedure FreeItem(Item: pointer); virtual;
Beschreibung
Löscht das Element Item aus der Kollektion und gibt es mit DisposeStr(PString(Item)) frei.
TStringLookupValidator vergleicht die Zeichenkette eines TEdit-Objektes mit einer Liste gültiger Strings, so daß eine Eingabe auf bestimmte, aber evtl. komplett verschiedenen Zeichenketten beschränkt werden kann.
Pointer
PStringLookupValidator = ^TStringLookupValidator;
Felder
Methoden
Vorfahre
Nachfahren
-
Deklaration
Strings: PStringCollection;
Beschreibung
Zeigt auf eine String-Kollektion, die alle akzeptablen Zeichenketten enthält. Ist Strings nil, wird jede Eingabe zurückgewiesen.
Wird von TStringLookupValidator.Init gesetzt und kann mit NewStringList ersetzt werden.
Deklaration
constructor Init(AString: PStringCollection);
Beschreibung
Ruft den geerbten TValidator.Init-Konstruktor auf und setzt dann Strings auf AString.
Deklaration
destructor Done; virtual;
Beschreibung
Ruft NewStringList(nil) auf und gibt damit die Kollektion, auf die Strings zeigt, frei.
Deklaration
procedure Error; virtual;
Beschreibung
Zeigt die Fehlermeldung an, daß die Eingabe nicht in der Gültigkeitsliste vorhanden ist.
Deklaration
function Lookup(s: string): boolean; virtual;
Beschreibung
Gibt true zurück, wenn s einem der in der Kollektion Strings gespeicherten Zeichenketten entspricht. Zur Suche wird die Kollektion-Methode Search verwendet.
Ist Strings nil, wird immer false zurückgegeben.
Deklaration
procedure NewStringList(AString: PStringCollection); virtual;
Beschreibung
Gibt eine evtl. schon vorhandene Gültigkeitsliste frei und setzt dann Strings auf AString. Wird in AString nil übergeben, besitzt das Validierungsobjekt fortan keine Gültigkeitsliste mehr und nimmt somit auch keine Eingabe mehr an.
TTextWindow ist ein Fensterobjekt, das Textzeilen anzeigen kann. Der Benutzer kann vollautomatisch durch den Text scrollen (auch mit den üblichen Tastaturshortcuts), eine weitergehende Bearbeitung ist aber nicht möglich.
Pointer
PTextWindow = ^TTextWindow;
Felder
Methoden
Vorfahre
Nachfahre
Deklaration
Color: integer; (nur lesen)
Beschreibung
Enthält den Farbindex für die Textzeilen. Wird von TTextWindow.GetScroller auf Black gesetzt.
Wenn man einen neuen Farbindex setzt, muß man danach ein Neuzeichnen des Fensterinhalts veranlassen.
Deklaration
FontID: integer; (nur lesen)
Beschreibung
Enthält die ID des aktuellen Fonts. Wird von der Methode TTextWindow.GetScroller auf den ersten Systemfont initialisiert und kann mit der Methode TTextWindow.SetFont geändert werden.
Deklaration
FontSize: integer; (nur lesen)
Beschreibung
Gibt die Größe des aktuellen Fonts an (in Punkten).
Wird von TTextWindow.GetScroller auf 10 initialisiert und kann mit TTextWindow.SetFont geändert werden.
Deklaration
Lines: PStrCollection; (nur lesen)
Beschreibung
Mit dieser Kollektion werden die Textzeilen verwaltet. Zum Setzen bzw. Auswerten der Zeilen sollten nach Möglichkeit nicht die Kollektions- sondern die speziellen TTextWindow-Methoden verwendet werden.
Wird von TTextWindow.Init angelegt.
Deklaration
RealTabs: boolean;
Beschreibung
Dieses Feld wird von TTextWindow.Init auf true gesetzt, d.h. Tabulatoren (HT) werden von der Methode TTextWindow.TabXpand in die entsprechende Anzahl Leerzeichen umgewandelt.
Andernfalls werden nur die Tab-Zeichen angezeigt.
Deklaration
TabSize: integer;
Beschreibung
Gibt die von TTextWindow.TabXpand benötigte Tabulatorweite an. Wird von TTextWindow.Init auf 2 gesetzt.
Deklaration
constructor Init(AParent: PWindow; ATitle: string; InitLines,ADelta: integer);
Beschreibung
Ruft den Vorfahren TWindow.Init auf. Danach wird die Kollektion Lines mit den Werten InitLines und ADelta erzeugt. Der erste Parameter gibt also die maximal mögliche Anzahl von Zeilen an (die ständig Speicherplatz belegen), die notfalls um ADelta erhöht wird.
Hat die Initialisierung funktioniert, wird zum Schluß noch UpdateSubTitle aufgerufen und RealTabs, TabSize und ws_ex_ReadOnly werden gesetzt.
Deklaration
destructor Done; virtual;
Beschreibung
Gibt die Kollektion in Lines frei und ruft dann den Vorfahren TWindow.Done auf.
Deklaration
procedure SetupVDI; virtual;
Beschreibung
Setzt die passenden Textattribute und ruft dann den Vorfahren TWindow.SetupVDI auf.
Deklaration
procedure AddLine(NewLine: string); virtual;
Beschreibung
Hängt eine Zeile am Ende des Textes an.
Deklaration
procedure DeleteLine(LineNumber: integer); virtual;
Beschreibung
Löscht die Zeile mit der Nummer LineNumber (0 bis GetNumLines-1).
Deklaration
procedure ExitPrint; virtual;
Beschreibung
Wird von TTextWindow.Print aufgerufen, nachdem alle Textzeilen gedruckt wurden. Z.Z. wird hier ein Seitenvorschub durchgeführt und dem Drucker zum Schluß noch ein BEL gesendet.
Deklaration
function GetClassName: string; virtual;
Beschreibung
Gibt 'TextWindow' zurück.
Deklaration
function GetLine(LineNumber: integer): string; virtual;
Beschreibung
Liefert die Zeile LineNumber (0 bis GetNumLines-1).
Ist LineNumber nicht gültig, wird ein Leerstring zurückgegeben.
Deklaration
function GetLineLength (LineNumber: integer): integer; virtual;
Beschreibung
Gibt die Länge der Zeile LineNumber zurück. Intern wird dazu TTextWindow.GetLine aufgerufen.
Deklaration
function GetNumLines: integer; virtual;
Beschreibung
Gibt die Anzahl der vorhandenen Zeilen zurück, d.h. Lines^.Count. Dieser Methode sollte allerdings Vorrang gegeben werden.
Deklaration
function GetScroller: PScroller; virtual;
Beschreibung
Liefert ein TScroller-Objekt zurück. Außerdem wird SetFont aufgerufen und Color gesetzt. Für ein optimiertes Redraw wird scs_BitbltScrolling gesetzt.
Deklaration
function GetStyle: integer; virtual;
Beschreibung
Gibt TWindow.GetStyle zurück, löscht daraus aber INFO und fügt SLIDER hinzu.
Deklaration
procedure InitPrint; virtual;
Beschreibung
Wird von TTextWindow.Print aufgerufen, bevor die eigentlichen Textzeilen gedruckt werden. Im Moment passiert hier nichts, man könnte in dieser Methode aber z.B. den Drucker initialisieren.
Deklaration
procedure InsertLine(Index: longint; NewLine: string); virtual;
Beschreibung
Fügt eine neue Zeile vor der Zeile mit der Nummer Index ein. Ist Index kleiner gleich Null, wird die Zeile am Anfang des Textes eingefügt; ist Index größer gleich GetNumLines, wird sie am Ende des Textes angehängt.
Deklaration
procedure Paint(var PaintInfo: TPaintStruct); virtual;
Beschreibung
Zeigt den Text im Fenster an. Im Moment wird auch beim zeilenweisen Scrollen der komplette Fensterinhalt neu gezeichnet, für die Zukunft kann man aber eine optimiertere Lösung erwarten.
Deklaration
procedure SetFont(NewID,NewSize: integer); virtual;
Beschreibung
Setzt FontID und FontSize neu, wobei die übergebenen Werte evtl. korrigiert werden. Anschließend werden die Slider aktualisiert.
Wird von TTextWindow.GetScroller aufgerufen.
Deklaration
procedure TTextWindow.SetColor(NewColor: integer); virtual;
Beschreibung
Setzt die Textfarbe, die in Color abgefragt werden kann.
Deklaration
procedure UpdateSubTitle; virtual;
Beschreibung
Aktualisiert die Info-Zeile (sofern vorhanden). Z.Z. wird darin nur die Anzahl der Zeilen angezeigt.
Wird von allen Methoden aufgerufen, die die Anzahl der Textzeilen verändern.
Deklaration
procedure GetWindowClass(var AWndClass: TWndClass); virtual;
Beschreibung
Löscht cs_QuitOnClose aus Class.Style, d.h. die Applikation wird beim Schließen des Fensters nicht beendet.
cs_ByteAlignClient wird gesetzt, damit das Scrolling beschleunigt wird.
Deklaration
function TabXpand(s: string): string; virtual;
Beschreibung
Wandelt Tabulatorzeichen in s in die entsprechende Anzahl Leerzeichen um, wenn TTextWindow.RealTabs true ist. Ansonsten wird s zurückgegeben.
Deklaration
procedure Read(AFileName: string); virtual;
Beschreibung
Fügt die Textdatei AFileName an das Ende des Textes an, wenn die Datei existiert. Der alte Text wird also nicht gelöscht!
Anschließend wird das Fenster neu gezeichnet.
Deklaration
procedure Cut; virtual;
Beschreibung
Wird aufgerufen, wenn der Benutzer <Control>+<X> drückt. Macht z.Z. noch nichts.
Deklaration
procedure Copy; virtual;
Beschreibung
Wird aufgerufen, wenn der Benutzer <Control>+<C> drückt. Macht z.Z. noch nichts.
Deklaration
procedure Paste; virtual;
Beschreibung
Wird aufgerufen, wenn der Benutzer <Control>+<V> drückt.
Wenn sich im Klemmbrett eine Datei SCRAP.TXT oder SCRAP.ASC befindet, wird diese an den Text im Fenster angehängt.
Wenn ws_ex_ReadOnly gesetzt ist, kann keine Paste-Operation durchgeführt werden.
Deklaration
procedure SelectAll; virtual;
Beschreibung
Wird aufgerufen, wenn der Benutzer <Control>+<A> drückt. Macht z.Z. noch nichts.
Deklaration
procedure Clear; virtual;
Beschreibung
Löscht den gesamten Text des Fensters ohne Sicherheitsabfrage!
Deklaration
procedure Print; virtual;
Beschreibung
Wird aufgerufen, wenn der Benutzer <Control>+<P> drückt. Nach einer Sicherheitsabfrage wird der gesamte Text auf der parallelen Schnittstelle ausgedruckt.
Deklaration
function PrintFilter(s: string): string; virtual;
Beschreibung
Wird von TTextWindow.Print für jede zu druckende Zeile aufgerufen. Hier können dann bestimmte Zeichen aus s ausgefiltert, geändert etc. werden. Standardmäßig wird der Atari-Zeichensatz auf den IBM- (bzw. Epson-) Druckerzeichensatz abgebildet.
TToolbar-Objekte werden mit Dialogelementen von Fenster-Toolbars verknüpft, die dem jeweiligen Fenster mit TWindow.LoadToolbar zugewiesen wurden. Sie sind in ihrer Funktionsweise den TKeyMenu-Objekten recht ähnlich.
Pointer
PToolbar = ^TToolbar;
Felder
Methoden
Vorfahre
Nachfahren
-
Deklaration
ADialog: PDialog;
Beschreibung
Dies ist ein universeller Dialog-Pointer, der in TToolbar.Init zunächst auf nil gesetzt wird. So ist jedes TToolbar-Objekt bereits auf die Verwaltung eines Dialogs vorbereitet (was in der Praxis auch meistens genutzt wird).
In der Work-Methode kann der Dialog dann initialisiert bzw. abgearbeitet werden (siehe Beispielprogramme).
Deklaration
VGHnd: boolean;
Beschreibung
Gibt an, ob TToolbar.VPipe^[3] unmittelbar vor dem Versenden auf das GEM-Handle des übergeordneten Fensters gesetzt werden soll (da sich diese Kennung ja ändern kann).
Wird von TToolbar.Init gesetzt.
Deklaration
VKey: integer;
Beschreibung
Gibt zusammen mit TToolbar.VStat die Taste an, auf die TToolbar.TestKey positiv reagieren soll. Wird von TToolbar.Init gesetzt.
Deklaration
VPipe: PPipearray; (nur lesen)
Beschreibung
Enthält einen Pointer auf eine komplette GEM-Nachricht, die von TToolbar.TestKey bzw. TToolbar.TestMessage bei positiver Anwahl verschickt wird.
Kann mit TToolbar.Init gesetzt werden.
Deklaration
VStat: integer;
Beschreibung
Gibt zusammen mit TToolbar.VKey die Taste an, auf die TToolbar.TestKey positiv reagieren soll. Wird von TToolbar.Init gesetzt.
Wichtig: Wenn egal ist, ob die linke oder die rechte <Shift>-Taste gedrückt ist, sollte hier K_SHIFT eingetragen sein.
Deklaration
ObjAddr: PObj; (nur lesen)
Beschreibung
TToolbar.Init setzt hier die zum Dialogelement TToolbar.ObjIndx gehörige Adresse ein.
Deklaration
ObjIndx: integer; (nur lesen)
Beschreibung
Enthält die Nummer des Dialogelementobjekts, die an TToolbar.Init übergeben wird. Aus diesem Index kann TToolbar.ObjAddr berechnet werden.
Deklaration
ObjTree: integer; (nur lesen)
Beschreibung
Enthält den Index des Objektbaums der Toolbar, zu der das TToolbar-Objekt gehört. Wird für TToolbar.Paint und TToolbar.TestMessage benötigt und von TToolbar.Init gesetzt.
Deklaration
constructor TToolbar.Init(AParent: PWindow; ATree, AnIndx,Stat,Key: integer; Msg: pointer; GetHnd,Switch: boolean; Hlp: string);
Beschreibung
Ruft den Vorfahren TEvent.Init auf. Dann wird TToolbar.VStat auf Stat, TToolbar.VKey auf Key, TToolbar.VGHnd auf GetHnd und TToolbar.ADialog auf nil gesetzt sowie TToolbar.VPipe angelegt, wenn Msg<>nil ist.
ATree und AnIndx geben den Objektbaum und den Objektindex des Toolbar-Elements an, mit dem das TToolbar-Objekt verknüpft werden soll. Der Objektbaum muß deshalb angegeben werden, da eine Toolbar ja zur Laufzeit gewechselt werden kann, es aber recht umständlich wäre, dann auch jedesmal alle TToolbar-Objekte auszutauschen.
Switch legt fest, ob das Toolbar-Element ein Pushbutton (false) ist, der also eine Aktion auslöst, oder ob das Element einen Zustand darstellt (true).
Hlp enthält den Hilfstext für die BubbleHelp.
Deklaration
destructor Done; virtual;
Beschreibung
Gibt eine evtl. in TToolbar.VPipe vorhandene GEM-Message frei und ruft den Vorfahren TEvent.Done auf.
Deklaration
function TestMessage(Pipe: Pipearray): boolean; virtual;
Beschreibung
Wird von TWindow.WMToolbar aufgerufen, wenn ein Toolbar-Element angewählt wurde. Die Methode überprüft, ob es sich dabei um das eigene Objekt handelt, und gibt dann true zurück, ansonsten false.
Work wird in dieser Methode nicht aufgerufen, dies wird von WMToolbar erledigt!
Die übergebene Message hat folgendes Format:
[0]: GO_PRIVATE ($1235) [1]: apID [2]: 0 [3]: GOP_TOOLBAR (1) [4]: Objektbaum-Index der aktiven Toolbar [5]: Index des angewählten Elements [6]: Status der Umschalttasten [7]: Anzahl der Mausklicks
Deklaration
procedure Check; virtual;
Beschreibung
Ruft TToolbar.SetCheck(bf_Checked) auf und markiert damit das mit TToolbar.ObjIndx und TToolbar.ObjAddr angegebene Toolbar-Element.
Deklaration
procedure Disable; virtual;
Beschreibung
Ruft TToolbar.SetState(bf_Disabled) auf und macht damit das zugehörige Toolbar-Element nicht anwählbar.
Deklaration
procedure Enable; virtual;
Beschreibung
Ruft TToolbar.SetState(bf_Enabled) auf und macht damit das zugehörige Toolbar-Element wieder anwählbar.
Deklaration
function GetCheck: integer; virtual;
Beschreibung
Gibt bf_Checked bzw. bf_Unchecked zurück, je nachdem ob das zugehörige Toolbar-Element markiert ist oder nicht.
Deklaration
function GetState: integer; virtual;
Beschreibung
Gibt bf_Enabled bzw. bf_Disabled zurück, je nachdem ob das zugehörige Toolbar-Element anwählbar ist oder nicht.
Deklaration
procedure SetCheck(CheckFlag: integer); virtual;
Beschreibung
Bestimmt die Markierung des zugehörigen Toolbar-Elements, d.h. bf_Checked oder bf_Unchecked.
Deklaration
procedure SetState(StateFlag: integer); virtual;
Beschreibung
Setzt den Zustand des zugehörigen Toolbar-Elements, d.h. bf_Enabled oder bf_Disabled.
Deklaration
function TestKey(Stat,Key: integer): boolean; virtual;
Beschreibung
Wenn Stat=TToolbar.VStat, Key=TToolbar.VKey und TToolbar.GetState<>bf_Disabled ist, liefert TestKey true zurück. Außerdem werden dann folgende Aktionen ausgeführt: Das zugehörige Toolbar-Element wird entsprechend markiert, Work wird aufgerufen, und wenn TToolbar.VPipe<>nil ist, wird die darin enthaltene GEM-Message verschickt. Ansonsten gibt TestKey false zurück.
Wichtig: Wenn in VStat K_SHIFT eingetragen ist, werden beide <Shift>-Tasten gleichwertig behandelt!
Deklaration
procedure Toggle; virtual;
Beschreibung
Wechselt beim zugehörigen Toolbar-Element mit der Methode TToolbar.SetCheck den Zustand der Markierung.
Deklaration
procedure Uncheck; virtual;
Beschreibung
Ruft TToolbar.SetCheck(bf_Unchecked) auf und nimmt damit eine evtl. vorhandene Markierung des zugehörigen Toolbar-Elements zurück.
Deklaration
procedure Paint; virtual;
Beschreibung
Zeichnet das zugehörige Toolbar-Element neu, wenn die aktive Toolbar mit ObjTree übereinstimmt. Die Rechteckliste des Fensters wird automatisch beachtet.
Deklaration
function IsHelpAvailable: boolean; virtual;
Beschreibung
Gibt true zurück, wenn das mit TToolbar.GetHelp ein Hilfstext für die BubbleHelp geliefert werden kann.
Deklaration
function GetHelp: string; virtual;
Beschreibung
Gibt einen Hilfstext für die BubbleHelp zurück.
Deklaration
procedure SetHelp(Hlp: string); virtual;
Beschreibung
Weist dem Toolbarelement-Objekt einen neuen Hilfstext für die BubbleHelp zu.
Deklaration
procedure ClearMenuIndex; virtual;
Beschreibung
Ruft SetMenuIndex(0) auf und löscht damit eine evtl. bestehende Verknüpfung zu einem Menü-Eintrag.
Deklaration
function GetMenuIndex: byte; virtual;
Beschreibung
Liefert den Index des Menü-Eintrags zurück, mit dem dieses Objekt verknüpft ist. Null bedeutet, daß keine Verknüpfung besteht.
Die Rückgabe entspricht dem höherwertigen Byte des Objekttyps ob_type.
Deklaration
procedure SetMenuIndex(Indx: byte); virtual;
Beschreibung
Verknüpft das Objekt mit dem Menü-Eintrag Indx.
Hiermit können Anwender-konfigurierbare Toolbars realisiert werden, da statt des Aufrufs dieser Methode das höherwertige Byte von ob_type auch direkt geändert werden darf.
Wenn sich die Verknüpfung auf eine Fenster-Menüleiste im selben Fenster beziehen soll, muß cs_WindowMenuToolbar gesetzt werden.
TTriState verhält sich genauso wie eine Checkbox. Zusätzlich gibt es allerdings noch einen dritten Zustand (bf_Grayed), der z.B. für "Wert nicht verändert" benutzt werden kann.
Pointer
PTriState = ^TTriState;
Methoden
Vorfahre
Nachfahren
-
Deklaration
constructor Init(AParent: PDialog; AnIndx: integer; Hlp: string);
Beschreibung
Ruft den Vorfahren TCheckBox.Init auf und setzt TControl.Style auf cs_3State.
Deklaration
procedure Gray; virtual;
Beschreibung
Ruft SetCheck(bf_Grayed) auf und versetzt die Checkbox damit in den "neutralen" Zustand.
TValidator definiert ein weitestgehend abstraktes Validierungsobjekt. Es ist nicht sinnvoll, dieses Objekt zu instantiieren, außer man möchte nur verhindern, daß das zugehörige Eingabefeld leer ist (s. voNotEmpty). Jedoch bietet es die Basis für weiterreichende Validierungsobjekte, da es die wichtigsten dafür notwendigen Methoden vordefiniert.
Pointer
PValidator = ^TValidator;
Felder
Methoden
Vorfahre
Nachfahren
Deklaration
Options: word;
Beschreibung
Options ist ein Bitmap-Feld, das die Optionen für verschiedene Nachkommen von TValidator kontrolliert. Standardmäßig wird Options mit 0 initialisiert.
Deklaration
Status: word;
Beschreibung
Bezeichnet den Status des Validierungsobjekts. Ist Status gleich vsOK, wurde das Objekt korrekt initialisiert. Jeder andere Wert bedeutet, daß ein Fehler aufgetreten ist.
Deklaration
Window: PDialog;
Beschreibung
Wird zunächst mil nil initialisiert und dann von TEdit.SetValidator mit einem Zeiger auf den Dialog besetzt, zu dem das Eingabefeld gehört.
Deklaration
constructor Init;
Beschreibung
Ruft TObject.Init auf und setzt danach Options auf Null, TValidator.Status auf vsOK und TValidator.Window auf nil.
Deklaration
procedure Error; virtual;
Beschreibung
Error wird von Valid aufgerufen, wenn diese Methode feststellt, daß der Anwender ungültige Werte eingegeben hat. Diese Instanz vor Error zeigt eine Fehlermeldung an, wenn voNotEmpty gesetzt ist, die Eingabe aber leer ist.
Deklaration
function IsValid(s: string): boolean; virtual;
Beschreibung
Gibt an, ob die in s übergebene Zeichenkette eine gültige Eingabe für das zugehörige Eingabefeld darstellt.
Normalerweise gibt IsValid true zurück, nur wenn voNotEmpty gesetzt ist, wird vorher noch geprüft, ob s nicht leer ist.
Deklaration
function IsValidInput(var s: string; SuppressFill: boolean): boolean; virtual;
Beschreibung
Ein Eingabefeld, das mit einem Validierungsobjekt verbunden ist, ruft, wenn bei letzterem voOnEdit gesetzt ist, IsValidInput auf, während es in seiner TEdit.Edit-Methode die Eingabe eines Zeichens bearbeitet. Dadurch haben Validierungsobjekte die Möglichkeit, fehlerhafte Eingaben zu ermitteln (und zu korrigieren), bevor der Anwender die Eingabe abgeschlossen hat.
TValidator.IsValidInput selbst gibt immer true zurück. Um dieses Verhalten zu ändern, d.h. eine Überprüfung zu ermöglichen, muß die Methode überschrieben werden.
s ist der aktuelle Eingabestring. SuppressFill legt fest, ob das Validierungsobjekt vor der Überprüfung evtl. fehlende Zeichen ergänzen soll (z.B. Leerzeichen, Datumsformatierung etc.).
Ist SuppressFill true, wird s unverändert geprüft, ansonsten sollten vom Objekt - sofern dies vorgesehen ist - die entsprechenden Änderungen vorgenommen werden.
Da s ein var-Parameter ist, kann ihn IsValidInput verändern (z.B. Klein- in Großbuchstaben umwandeln). Es sollten jedoch niemals ungültige Zeichen aus dem String gelöscht werden. Dadurch, daß in diesem Fall false zurückgegeben wird, erfährt das Eingabefeld von der Existenz ungültiger Zeichen und kann sich selbst um deren Eliminierung kümmern.
Deklaration
function Valid(s: string): boolean; virtual;
Beschreibung
Gibt true zurück, wenn auch IsValid(s) true zurückgibt. Andernfalls wird TValidator.Error aufgerufen und false geliefert. Wird von TEdit.IsValid aufgerufen.
TWindow definiert das grundlegende Fensterobjekt, das sich um die komplette GEM-Fensterverwaltung kümmert. Standardmäßig wird ein leeres Fenster erzeugt, das aber bereits auf Maus- und Tastaturereignisse reagiert. Durch Überschreiben der entsprechenden Methoden können Fenster für bestimmte Aufgaben spezialisiert werden.
Pointer
PWindow = ^TWindow;
Felder
Methoden
WMNewTop
WMOnTop
WMRBoxChanged
WMRBoxCheck
WMRButton
WMRedraw
WMRubbox
WMShaded
WMSized
WMToolbar
WMTopped
WMUniconify
WMUnshaded
WMUntopped
WMVSlid
Vorfahre
Nachfahren
Deklaration
Attr: TWindowAttr;
Beschreibung
Diverse Attribute und fensterspezifische Werte sind in diesem Record zusammengefaßt. Wird von TWindow.Init initialisiert.
PWindowAttr = ^TWindowAttr; TWindowAttr = record Title, (nur lesen) SubTitle : PString; (nur lesen) RBox : GRECT; Handle : HWnd; (nur lesen) gemHandle, (nur lesen) Status, (nur lesen) Style, (nur lesen) sysFonts, (nur lesen) addFonts, (nur lesen) charWidth, charHeight, boxWidth, boxHeight : integer; ExStyle : longint end;
Title enthält einen Zeiger auf den Titel-String des Fensters (wird mit dem an TWindow.Init übergebenen Titel besetzt), SubTitle einen Zeiger auf die Infozeile (wird mit einem Leerstring initialisiert). RBox wird zunächst ausgenullt, hiermit kann der Bereich für eine evtl. unterstützte Rubbox beschränkt werden (s. TWindow.WMRubbox).
Handle enthält die ObjectGEM-interne Kennung für alle Fenster und Dialoge (d.h. auch modale Dialoge erhalten eine solche). Im Gegensatz dazu bekommt gemHandle von TWindow.Create die GEM-Kennung für ein Fenster bzw. einen nicht-modalen Dialog zugewiesen (initialisiert mit -1).
Status zeigt den Zustand des Fensters an, s. dazu die ws_XXXX-Konstanten; Anfangswert ist ws_NoWindow. In Style wird der GEM-Fensterstil gespeichert, der mit TWindow.GetStyle ermittelt wird.
ExStyle schließlich beschreibt speziellere Eigenschaften des Fensters. Bei TWindow wird mit ws_ex_Modeless initialisiert, bei TDialog mit ws_ex_TryModeless+ws_ex_CenterOnce. Wenn global as_MoveTransparent oder as_MoveDials gesetzt ist, dann wird zusätzlich noch ws_ex_MoveTransparent bzw. ws_ex_MoveDial gesetzt.
Deklaration
Parent: PWindow; (nur lesen)
Beschreibung
Zeigt auf das übergeordnete Fenster, wenn dieses existiert. Das Fensterobjekt ist dann in der ChildList des übergeordneten Fensters eingetragen. Andernfalls ist Parent nil, und TApplication ist gewissermaßen das Elternobjekt, da das Fenster dann in der MainWindow-Liste zu finden ist. Wird von TWindow.Init gesetzt.
Deklaration
vdiHandle: integer; (nur lesen)
Beschreibung
Wird von TWindow.Init mit GetVDIHandle ermittelt. Für TWindow-Objekte enthält das Feld normalerweise das Handle einer eigenen VDI-Workstation! TDialog-Objekte verwenden stattdessen eine Kopie des TApplication.vdiHandle-Feldes.
Deklaration
Work: GRECT; (nur lesen)
Beschreibung
Enthält den aktuellen Arbeitsbereich des Fensters. Kann mit TWindow.GetWork neu berechnet werden; das sollte allerdings nicht notwendig sein, wenn zur Größenmanipulation des Fensters nut ObjectGEM-Methoden verwendet werden.
Wichtig: Der Arbeitsbereich sollte nie mittels wind_get() erfragt werden, da man sonst zu evtl. Erweiterungen (Toolbars, Menüleisten etc.) inkompatibel würde!
Deklaration
ChildList: PWindow; (nur lesen)
Beschreibung
ChildList ist eine verkettete Liste aller untergeordneten Fensterobjekte. ChildList ist nil, wenn keine Child-Fenster existieren, sonst zeigt der Pointer auf das erste Objekt in der Liste. Untergeordnete Fenster können relativ bequem mit TWindow.FirstWndThat und TWindow.ForEachWnd durchlaufen werden.
Deklaration
IconClass: TIconWndClass;
Beschreibung
Mit diesem Record wird die Fensterklasse des Icon-Fensters festgelegt. Da ein solches Fenster sehr viel weniger Funktionen als ein "richtiges" Fenster hat, sind hier auch weniger Informationen als in TWindow.Class gespeichert.
PIconWndClass = ^TIconWndClass; TIconWndClass = record hCursor : HCursor; hbrBackground: HBrush end;
Mit hCursor wird die Mausform festgelegt, die verwendet wird, sobald die Maus den TWindow.Work-Bereich des Icon-Fensters betritt. Standardmäßig wird ARROW eingetragen. Ist der Wert größer als $7fff, wird er als Pointer auf eine selbstdefinierte MFORM-Struktur aufgefaßt. Soll der Mauscursor nicht verändert werden, muß id_No eingetragen werden. hbrBackground gibt die Farbe an, mit der der Arbeitsbereich des Icon-Fensters vor dem Aufruf der TWindow.Paint-Methode gelöscht wird. Dabei muß der VDI-Farbindex+1 eingetragen werden, da eine Null signalisiert, daß der Hintergrund nicht gelöscht werden soll. Wird auf White+1 gesetzt. Der Record wird von TWindow.Init mit der Methode GetIconWindowClass eingelesen.
Wichtig: Alle anderen Werte werden auch bei Icon-Fenster aus dem Feld TWindow.Class genommen - abgesehen von den cs_Align-Konstanten, die von Icon-Fenstern generell nicht beachtet werden.
Deklaration
Class: TWndClass;
Beschreibung
Mit diesem Record werden sog. "Fensterklassen" festgelegt, d.h. die Struktur enthält allgemeinere Attribute als TWindow.Attr, von denen erwartet werden kann, daß sie für mehrere Fenster gelten. Wird von TWindow.Init mittels GetWindowClass initialisiert.
PWndClass = ^TWndClass; TWndClass = record Style : word; hCursor : HCursor; hbrBackground: HBrush; MenuTree, (nur lesen) ToolbarTree : PTree; (nur lesen) lpszClassName: PString (nur lesen) end;
Style enthält eine der cs_XXXX-Konstanten (bzw. eine Kombination davon) und wird mit cs_DblClks+cs_CreateOnAccOpen+cs_AutoOpen+cs_QuitOnClose (bei TWindow) bzw. mit cs_DblClks+cs_WorkBackground+cs_SaveBits (bei TDialog) initialisiert. Mit hCursor wird die Mausform festgelegt, die verwendet wird, sobald die Maus den TWindow.Work-Bereich des Fensters betritt. Standardmäßig wird ARROW eingetragen. Ist der Wert größer als $7fff, wird er als Pointer auf eine selbstdefinierte MFORM- Struktur aufgefaßt. Soll der Mauscursor nicht verändert werden, muß id_No eingetragen werden. hbrBackground gibt die Farbe an, mit der der Arbeitsbereich des Fensters vor dem Aufruf der TWindow.Paint-Methode gelöscht wird. Dabei muß der VDI-Farbindex+1 eingetragen werden, da eine Null signalisiert, daß der Hintergrund nicht gelöscht werden soll. Wird auf White+1 gesetzt.
In MenuTree befindet sich der Zeiger auf den Menübaum des Fensters, wenn ein solches mit TWindow.LoadMenu installiert wurde. Ansonsten steht nil darin.
ToolbarTree wird mit nil initialisiert. Wenn dem Fenster mit LoadToolbar eine Toolbar zugewiesen wurde, steht in diesem Feld dann der Zeiger auf den Objektbaum.
lpszClassName gibt den Namen der Fensterklasse an, der mit GetClassName ermittelt wird. Dieser Name braucht bei "einfachen" Fenstern nicht geändert zu werden, wenn allerdings ein erheblicher Unterschied besteht (z.B. "Window" und "Dialog", "EditWindow", "HelpWindow", "FontDialog" etc.), sollte die Methode überschrieben werden.
Deklaration
Clipboard: PClipboard; (nur lesen)
Beschreibung
Zeigt auf das mit dem Fenster-Objekt verknüpfte TClipboard-Objekt (oder ist nil, wenn ein solches nicht existiert).
Wird mit TWindow.GetClipboard gesetzt.
Deklaration
Curr: GRECT; (nur lesen)
Beschreibung
Enthält den aktuellen Außenmaße des Fensters. Kann mit TWindow.GetCurr neu berechnet werden; das sollte allerdings nicht notwendig sein, wenn zur Größenmanipulation des Fensters nur ObjectGEM-Methoden verwendet werden.
Deklaration
DlgTree: PTree; (nur lesen)
Beschreibung
Zeigt auf das im Fenster anzuzeigende Dialogformular. Wird von TWindow.Init mit nil belegt. Wenn DlgTree geändert werden soll, muß die Methode LoadDialog aufgerufen werden, die intern ihrerseits SetDlgTree aufruft.
Wenn in DlgTree ein Dialog angegeben ist, wird dieser von TWindow.Paint automatisch gezeichnet.
Deklaration
Full: GRECT; (nur lesen)
Beschreibung
Enthält die Maximalgröße dieses Fensters. Wird von TWindow.SetupSize zunächst auf die Größe des Desktop-Arbeitsbereichs initialisiert. Wenn das Fenster später evtl. auf volle Größe gebracht wird, wird intern GetFull aufgerufen, wodurch dann Full unter Beachtung von GetWorkMax neu gesetzt wird.
Deklaration
Scroller: PScroller;
Beschreibung
Scroller enthält einen Zeiger auf ein TScroller-Objekt, wenn ein solches vorhanden ist. Soll einem Fenster ein Scroll-Objekt zugewiesen werden, sollte dies im TWindow.Init-Konstruktor geschehen.
Deklaration
Icon: PIcon; (nur lesen)
Beschreibung
Enthält einen Zeiger auf ein TIcon-Objekt, wenn dem Fenster ein solches mit TWindow.LoadIcon zugewiesen wurde.
Wird von TWindow.Init auf nil gesetzt.
Deklaration
workIn: workin_ARRAY;
Beschreibung
Dieses Array wird von TWindow.Init zum Öffnen der VDI-Workstation benötigt. Danach kann es für eigene Zwecke verwendet werden.
Deklaration
workOut: workout_ARRAY;
Beschreibung
Dieses Array wird von TWindow.Init für die Rückgabewerte von v_opnvwk() benötigt. Danach kann es für eigene Zwecke verwendet werden, da alle wichtigen Werte anderweitig gespeichert werden.
Deklaration
constructor Init(AParent: PWindow; ATitle: string);
Beschreibung
Ruft TEventObject.Init auf, setzt TWindow.Parent auf AParent und initialisiert TWindow.vdiHandle mit GetVDIHandle sowie Attr.
Wenn GetVDIHandle signalisiert, daß eine neue VDI-Workstation geöffnet werden soll, geschieht dies dann mit v_opnvwk().
ChildList, Scroller und DlgTree werden auf nil gesetzt und das Fensterobjekt in die ChildList des übergeordneten Fensters eingehängt.
Dann werden Class mittels GetWindowClass und IconClass mit GetIconWindowClass initialisiert, ATitle wird zum Fenstertitel, und die Infozeile wird gelöscht.
Wenn eine neue VDI-Workstation angelegt wurde, wird dann TWindow.SetupVDI aufgerufen.
Danach wird das Feld Scroller mit TWindow.GetScroller und TWindow.Clipboard mit TWindow.GetClipboard ermittelt.
Zum Schluß wird SetupWindow aufgerufen.
Deklaration
destructor Done; virtual;
Beschreibung
Gibt alle untergeordneten Fenster frei, ruft die Methoden ShutdownWindow, TWindow.FreeIcon, FreeDialog, FreeToolbar und TWindow.FreeMenu auf, schließt das Fenster, gibt die Kennung frei (sofern dies noch nicht geschehen ist) und entfernt das Fensterobjekt aus der ChildList des übergeordneten Fensters.
Danach werden Scroller und TWindow.Clipboard freigegeben (letzteres nur, wenn ein neues Klemmbrett-Objekt installiert wurde).
Wenn TWindow.Init eine neue VDI-Workstation angefordert hat, wird diese hier mit v_clsvwk() wieder freigegeben.
Zum Schluß wird TEventObject.Done aufgerufen.
Deklaration
function GetVDIHandle: integer; virtual;
Beschreibung
Wird von TWindow.Init aufgerufen, um TWindow.vdiHandle zu ermitteln.
Standardmäßig wird id_NewHandle geliefert, d.h. für jedes Fenster wird eine eigene VDI-Workstation geöffnet.
Wird ein Wert größer gleich Null übergeben, wird dieser als gültiges VDI-Handle interpretiert, es wird dann keine neue Workstation angefordert!
Deklaration
procedure SetupVDI; virtual;
Beschreibung
Wird von TWindow.Init aufgerufen, wenn mit der Methode GetVDIHandle dem Fenster eine eigene VDI-Workstation zugewiesen wurde, damit hier die passenden Attribute eingestellt werden. Zunächst werden jedoch - wenn GDOSActive true und ws_ex_LoadFonts gesetzt ist - alle verfügbaren GEM-Fonts nachgeladen. Daraus folgt, daß - wenn das Fenster auf GEM-Zeichensätze zurückgreifen will - SetupVDI überschrieben werden muß und die geerbte Methode erst dann aufgerufen werden darf, wenn man ws_ex_LoadFonts gesetzt hat!
Danach werden folgende Werte gesetzt (Schreibweise abgekürzt): vswr_mode(MD_REPLACE), vsl_udsty($5555), vsl_type(LT_SOLID), vsf_perimeter(PER_ON), vsl_color(Black), vsl_ends(LE_SQUARED,LE_SQUARED), vsm_type(MT_DOT), vsm_height(1), vsm_color(Black), vst_rotation(0), vsf_style(4), vsf_color(Black), vst_alignment(TA_LEFT,TA_BASELINE), vsl_width(1), vst_color(Black), vsf_interior(FIS_HOLLOW), vst_effects(TF_NORMAL).
Außerdem werden das Clipping auf die Größe des gesamten Desktops, vst_font() auf den ersten verfügbaren Font (das ist normalerweise der Systemzeichensatz) und dieser Font auf die "normale" Höhe (d.h. die des "großen" Fonts auf dem Desktop) gesetzt.
Deklaration
function At(Index: integer): PWindow;
Beschreibung
Liefert einen Zeiger auf das Child-Fenster mit der fortlaufenden Nummer Index in der ChildList (begonnen wird bei Null).
Wenn Index negativ oder ChildList leer ist, wird nil zurückgegeben. Bei zu großen Werten wird die Liste zyklisch durchlaufen.
Deklaration
function IndexOf(Item: PWindow): integer;
Beschreibung
Liefert die fortlaufende Nummer des Fensterobjekts, auf das Item zeigt, wenn dieses in der ChildList vorkommt. Ansonsten wird -1 zurückgegeben.
Deklaration
procedure Calc(ctype: integer; ri: GRECT; var ro: GRECT); virtual;
Beschreibung
Berechnet aus den Außenabmessungen des Fensters die Größe des Arbeitsbereichs und umgekehrt. Die Parameter entsprechen denen von wind_calc(), allerdings sollte immer nur Calc verwendet werden, um zu späteren Erweiterungen (Toolbars, Menüleisten) kompatibel zu bleiben!
Deklaration
function CanClose: boolean; virtual;
Beschreibung
Gibt true zurück, wenn das Fenster geschlossen werden darf. Das ist standardmäßig dann der Fall, wenn alle offenen untergeordneten Fenster bei dieser Methode ebenfalls true liefern.
Durch Überschreiben kann man mit dieser Methode leicht Sicherheitsabfragen etc. in eigene Programme einbauen.
Deklaration
procedure ChkAlign(var r: GRECT); virtual;
Beschreibung
Korrigiert die Position des Fensters, wenn eine der Konstanten cs_ByteAlignClient, cs_ByteAlignWindow, cs_VerAlignClient oder cs_VerAlignWindow gesetzt ist. Außerdem wird evtl. versucht, das Fenster durch Verschieben komplett im sichtbaren Bereich darzustellen.
Wird intern verwendet und braucht nicht direkt aufgerufen zu werden.
Wichtig: Bei Icon-Fenstern wird grundsätzlich kein Align durchgeführt!
Deklaration
procedure ChkSize(var r: GRECT); virtual;
Beschreibung
Achtet darauf, daß der Work-Bereich nicht zu groß bzw. zu klein wird. Zur Ermittlung der zulässigen Werte werden GetWorkMin und GetWorkMax verwendet. Wird intern verwendet und braucht nicht direkt aufgerufen zu werden.
Deklaration
procedure CloseWindow; virtual;
Beschreibung
Schließt alle untergeordneten Fenster. Danach wird auch dieses Fenster - sofern es offen ist - geschlossen und Attr.Status auf ws_Created gesetzt, d.h. die GEM-Kennung wird nicht freigegeben (dies macht TWindow.Destroy).
Deklaration
procedure Create; virtual;
Beschreibung
Wenn Attr.Status gleich ws_NoWindow ist, wird das Fenster erzeugt (d.h. eine GEM-Kennung erfragt), ansonsten werden nur evtl. vorhandene untergeordnete Fenster erzeugt.
Zunächst wird versucht, mittels wind_create() eine GEM-Kennung zu belegen. Mißlingt dies, gibt ChkError em_InvalidWindow zurück. Ansonsten wird Attr.Status auf ws_Created gesetzt, und abhängig vom Wert in TWindow.Attr.Style werden Fenstertitel und Infozeile festgelegt. Danach werden die untergeordneten Fenster erzeugt.
Bei modalen Dialogen hat Create keine Wirkung.
Deklaration
procedure CreateChildren; virtual;
Beschreibung
Ruft für alle Fenster der ChildList, bei denen das Flag cs_AutoCreate gesetzt ist, Create auf.
Deklaration
function DDGetPath: string; virtual;
Beschreibung
Wird von TWindow.WMDragDrop aufgerufen, wenn der Sender den Datentyp 'PATH' gewählt hat, d.h. wenn er den evtl. zum Fenster gehörigen Pfad (z.B. bei Editor-Fenstern) wissen möchte.
Im Moment wird hier ein Leerstring zurückgegeben, d.h. die Anfrage wird abgewiesen. Durch Überschreiben dieser Methode kann aber ein beliebiger Pfad zurückgegeben werden.
Deklaration
function DDGetPreferredTypes: string; virtual;
Beschreibung
Liefert die Extensions der "bevorzugten" Dateien zurück. Es dürfen maximal 8 Extensions geliefert werden, bei weniger Zeichen wird mit Nullbytes aufgefüllt.
Standardmäßig wird TApplication.DDGetPreferredTypes zurückgegeben. Eine speziellere Rückgabe könnte z.B. '.IMG.PCX.GIF.TIF' lauten.
Deklaration
function DDHeaderReply(dType,dName,fName: string; dSize: longint; OrgID, mX,mY,KStat: integer): byte; virtual;
Beschreibung
Wird von TWindow.WMDragDrop aufgerufen, um dem Sender auf den vorgeschlagenen Dateityp zu antworten.
In dType erhält man die Extension des vorgeschlagenen Dateityps (z.B. '.TXT'), in fName den entsprechenden Dateinamen (ohne Pfadangabe). In dName kann noch optional ein Name für die Daten übergeben werden, der vom Empfänger z.B. zum Beschriften eines Icons benutzt werden kann. dSize gibt die Länge der zu übertragenden Datei an. OrgID bezeichnet die AES-Kennung des Senders, mX und mY die Position der Maus und KStat den Zustand der Umschalttasten beim Aufruf.
Standardmäßig wird DD_NAK zurückgegeben, folgende Werte sind z.Z. definiert:
DD_OK | alles OK; die Daten werden dann mit |
TWindow.DDReadData eingelesen | |
DD_NAK | Fehler, Abbruch der Kommunikation |
DD_EXT | der Sender soll einen anderen |
Dateityp vorschlagen | |
DD_LEN | der Empfänger kann nicht so viele |
Daten gleichzeitig verarbeiten | |
DD_TRASH | Datei wurde auf den Mülleimer ge- |
zogen; der Sender muß entsprechend | |
reagieren | |
DD_PRINTER | Datei wurde auf das Drucker-Icon |
gezogen; der Sender muß entsprechend | |
reagieren | |
DD_CLIPBOARD | Datei wurde auf das Klemmbrett-Icon |
gezogen; der Sender muß entsprechend | |
reagieren |
Deklaration
function DDReadData(dType,dName,fName: string; dSize: longint; PipeHnd, OrgID,mX,mY, KStat: integer): boolean; virtual;
Beschreibung
Wird von TWindow.WMDragDrop aufgerufen, wenn eine Drag&Drop-Anfrage positiv beantwortet werden konnte und nun die Daten eingelesen werden sollen.
In dType erhält man die Extension des vorgeschlagenen Dateityps (z.B. '.TXT'), in fName den entsprechenden Dateinamen (ohne Pfadangabe). In dName kann noch optional ein Name für die Daten übergeben werden, der vom Empfänger z.B. zum Beschriften eines Icons benutzt werden kann. dSize gibt die Länge der zu übertragenden Datei an. OrgID bezeichnet die AES-Kennung des Senders, mX und mY die Position der Maus und KStat den Zustand der Umschalttasten beim Aufruf. PipeHnd enthält das Dateihandle der geöffneten Pipe, auf die nun mit Fread() zugegriffen werden kann.
Wenn die Daten eingelesen werden konnten, sollte true zurückgegeben werden, damit die Methode DDFinished aufgerufen wird.
Deklaration
function DDReadArgs(dSize: longint; PipeHnd,OrgID, mX,mY,KStat: integer): boolean; virtual;
Beschreibung
Wird von TWindow.WMDragDrop aufgerufen, wenn der Sender den 'ARGS'-Datentyp, also eine Kommandozeile verschickt hat. In dieser Methode kann diese nun (per Fread()) eingelesen werden. Abschließend muß noch die geerbte Methode mit dem um die Anzahl gelesener Zeichen verminderten dSize aufgerufen werden, damit die Pipe vollständig geleert wird. Wenn in der Kommandozeile mehrere Parameter übergeben werden, sind die einzelnen Parameter durch ein Leerzeichen getrennt. Wenn in einem Parameter ein Leerzeichen vorkommt, wird dieser Parameter in einfache Anführungszeichen gesetzt. Anführungszeichen innerhalb des Parameters werden dann verdoppelt (z.B. "'Eric''s file'").
Wenn die Daten eingelesen werden konnten, sollte true zurückgegeben werden, damit die Methode DDFinished aufgerufen wird.
Deklaration
procedure DDFinished(OrgID,mX,mY,KStat: integer); virtual;
Beschreibung
Wird von TApplication.APDragDrop aufgerufen, wenn TWindow.DDReadData oder TWindow.DDReadArgs true zurückgegeben hat. Der Aufruf erfolgt nach dem Drag&Drop-Protokoll, man hat also wieder volle Kontrolle über den Bildschirm.
In dieser Methode sollten die Eingelesenen Daten ausgewertet werden (Anzeige etc.).
Deklaration
procedure EnableAutoCreate;
Beschreibung
Setzt für das Fenster das Flag cs_AutoCreate. Wird von TWindow.Init aufgerufen.
Deklaration
procedure DisableAutoCreate;
Beschreibung
Löscht das Flag cs_AutoCreate aus Class.Style. Wird von TDialog.Init aufgerufen.
Deklaration
procedure Destroy; virtual;
Beschreibung
Ruft zunächst die Destroy-Methode aller untergeordneten Fenster auf. Danach wird das Fenster geschlossen (sofern dies noch nicht geschehen ist) und die GEM-Kennung freigegeben. Schließlich wird Attr.Status auf ws_NoWindow und gemHandle auf -1 gesetzt.
Wenn beim Freigeben ein Fehler auftritt, gibt ChkError em_WDestroyFailure zurück.
Deklaration
function FirstWndThat (Test: PIterationFunc): PWindow;
Beschreibung
FirstWndThat ruft für jedes untergeordnete Fenster die durch Test bestimmte boolesche Funktion auf, bis Test true zurückgibt. FirstWndThat gibt dann den Zeiger auf das Fensterobjekt zurück, für den Test true zurückgegeben hat, oder nil, falls Test immer false geliefert hat. Der Pointer Test sollte eine globale (Unterschied zu ObjectWindows!) Funktion sein, der ein pointer-Parameter übergeben wird und die boolean zurückgibt.
Achtung: Im Gegensatz zu ObjectWindows kann bei einer lokalen Test-Funktion nicht auf die Variablen der übergeordneten Routine zugegriffen werden!
Beispiel
function IstOffen(p: pointer): boolean; { ... }
IstOffen sollte eine globale Funktion sein. Sei Fenster ein TWindow-Objekt:
p:=Fenster.FirstWndThat(@IstOffen);
Deklaration
procedure ForEachWnd(Action: PIterationProc);
Beschreibung
ForEachWnd ruft für jedes untergeordnete Fenster die durch Action bestimmte Prozedur auf. Der Pointer Action sollte eine globale (Unterschied zu ObjectWindows!) Prozedur sein, der ein pointer-Parameter übergeben wird.
Achtung: Im Gegensatz zu ObjectWindows kann bei einer lokalen Prozedur nicht auf die Variablen der übergeordneten Routine zugegriffen werden!
Beispiel
procedure MacheGross(p: pointer); { ... }
MacheGross sollte eine globale Prozedur sein. Sei Fenster ein TWindow-Objekt:
Fenster.ForEachWnd(@MacheGross);
Deklaration
procedure ForceRedraw; virtual;
Beschreibung
Zeichnet das komplette Fenster neu. Dazu schickt das Fensterobjekt eine WM_REDRAW-Message an sich selbst. Soll das Zeichnen nicht über die GEM-Message-Queue abgewickelt werden (d.h. wenn sofort gezeichnet werden muß, der Zeitpunkt also nicht vom GEM bestimmt werden soll), muß TWindow.WMRedraw direkt aufgerufen werden.
Deklaration
function FirstWorkRect(var Rect: GRECT): boolean; virtual;
Beschreibung
Diese Funktion liefert das erste Rechteck der Rechteckliste. Im Gegensatz zu wind_get(WF_FIRSTXYWH...) werden dabei auch evtl. vorhandene Toolbars, Menüleisten etc. berücksichtigt. Außerdem erhält man nur wirklich sichtbare Teile des Arbeitsbereichs (das Rechteck muß also nicht mehr mit dem Desktopbereich geschnitten werden).
Wenn der Arbeitsbereich des Fensters komplett verdeckt ist, ist die Rückgabe false, und Rect.W wird auf Null gesetzt.
Deklaration
function NextWorkRect(var Rect: GRECT): boolean; virtual;
Beschreibung
Diese Funktion liefert das jeweils nächste Rechteck der Rechteckliste des Fensters. Im Gegensatz zu wind_get(WF_NEXTXYWH...) werden dabei auch evtl. vorhandene Toolbars, Menüleisten etc. berücksichtigt. Außerdem erhält man nur wirklich sichtbare Teile des Arbeitsbereichs (das Rechteck muß also nicht mehr mit dem Desktopbereich geschnitten werden).
Wenn kein weiteres Rechteck existiert, ist die Rückgabe false, und Rect.W wird auf Null gesetzt.
Deklaration
procedure FreeDialog; virtual;
Beschreibung
Entfernt einen evtl. zuvor mit LoadDialog dem Fenster zugewiesenen Dialogbaum, d.h. dieser wird nun nicht mehr gezeichnet.
Wird von TWindow.Done aufgerufen.
Deklaration
procedure FullSize; virtual;
Beschreibung
Bringt das Fenster auf volle Größe, oder - wenn es diese bereits hat - auf die ursprüngliche Größe. Wenn cs_FullRedraw gesetzt ist, wird anschließend noch TWindow.ForceRedraw aufgerufen.
Deklaration
function GetClassName: string; virtual;
Beschreibung
Gibt den Namen der Fensterklasse zurück. Abgeleitete Fensterobjekte, die wesentliche Veränderungen bzw. Erweiterungen gegenüber TWindow besitzen, sollten diese Methode überschreiben, um einen anderen Namen zu liefern. TWindow gibt 'Window' zurück.
Deklaration
function GetClipboard: PClipboard; virtual;
Beschreibung
Liefert das TClipboard-Objekt, das mit dem Fenster-Objekt verknüpft wird.
Standardmäßig wird Application^.Clipboard zurückgegeben. Will man ein spezialisiertes Klemmbrett-Objekt installieren, muß man diese Methode überschreiben. Wichtig: Ein solches Objekt wird dann von TWindow.Done freigegeben!
Deklaration
procedure GetCurr; virtual;
Beschreibung
Füllt das Feld Curr mit den aktuellen Außenmaßen des Fensters aus. Wird intern verwendet und braucht nicht direkt aufgerufen zu werden, wenn zur Größenänderung des Fensters nur die ObjectGEM-Methoden verwendet werden.
Deklaration
function GetDC: integer; virtual;
Beschreibung
Dies ist eine an Windows angelehnte "Quick-and-dirty"-Funktion, mit der sehr einfach in dem Fenster gezeichnet werden kann. Die Funktion reserviert das erste Rechteck der Rechteckliste des Fensters für die Ausgabe, was unter günstigen Umständen (die man auch schaffen kann, z.B. mit Top) der gesamte Arbeitsbereich ist. Im schlimmsten Fall sieht man allerdings gar nichts... Es findet eine Schachtelung mit wind_update() statt, die Maus wird unsichtbar gemacht und das Clipping gesetzt. Die Rückgabe entspricht TWindow.vdiHandle. Nun kann direkt (mit den VDI-Funktionen) gezeichnet werden, und am Schluß muß TWindow.ReleaseDC aufgerufen werden, um alle Blockierungen aufzuheben. Wichtig: Wird -1 zurückgegeben, ist die Funktion fehlgeschlagen; es darf weder gezeichnet noch ReleaseDC aufgerufen werden!
Deklaration
procedure GetFull; virtual;
Beschreibung
Füllt das Feld Full mit der maximal möglichen Größe des Fensters aus, wobei GetWorkMax beachtet wird. Wird intern verwendet und braucht nicht direkt aufgerufen zu werden.
Deklaration
function GetScroller: PScroller; virtual;
Beschreibung
Wird von TWindow.Init aufgerufen, um das Scroller-Feld zu setzen. Wenn einem Fenster ein TScroller-Objekt zugewiesen werden soll, muß diese Methode überschrieben werden, damit das Objekt korrekt initialisiert werden kann.
Standardmäßig wird nil zurückgegeben.
Deklaration
function GetStyle: integer; virtual;
Beschreibung
Gibt eine Bitmap der GEM-Fensterkomponenten zurück, die für TWindow.Create benötigt wird. TWindow.GetStyle liefert NAME or INFO or CLOSER or MOVER or FULLER or SIZER. Sollen andere Fensterelemente benutzt werden, muß man diese Methode überschreiben.
Ab AES 4.10 wird zusätzlich SMALLER für die Iconification geliefert und, wenn der Backdrop-Mechanismus unterstützt wird, BACKDROP (z.Z. nur unter Mag!C).
Soll dem Fenster ein TScroller-Objekt zugeordnet werden, stehen als Rückgabewerte auch die Konstanten HSLIDER, VSLIDER und SLIDER zur Verfügung, die wie folgt definiert sind:
type HSLIDER = LFARROW or RTARROW or HSLIDE; VSLIDER = UPARROW or DNARROW or VSLIDE; SLIDER = HSLIDER or VSLIDER;
Deklaration
procedure GetIconWindowClass (var AWndClass: TIconWndClass); virtual;
Beschreibung
Füllt das Feld IconClass aus, das die Icon-Fensterklasse beschreibt. Soll das Icon-Fenster andere Eigenschaften besitzen, muß diese Methode überschrieben werden. In diesem Fall sollte in der neuen Methode zuerst die ursprüngliche Methode aufgerufen werdem.
Beispiel
procedure TW.GetIconWindowClass(var AWndClass: TIconWndClass); begin inherited GetIconWindowClass(AWndClass); { ... } end;
Deklaration
procedure GetWindowClass(var AWndClass: TWndClass); virtual;
Beschreibung
Füllt das Feld Class aus, das die Fensterklasse beschreibt. Soll das Fenster andere grundlegende Eigenschaften besitzen, muß diese Methode überschrieben werden.
Wichtig: In diesem Fall muß in der neuen Methode zuerst die ursprüngliche Methode aufgerufen werden, da es sonst mit einiger Sicherheit einen Programmabsturz gibt...
Beispiel
procedure TW.GetWindowClass(var AWndClass: TWndClass); begin inherited GetWindowClass(AWndClass); { ... } end;
Deklaration
procedure GetWork; virtual;
Beschreibung
Füllt das Feld TWindow.Work mit den aktuellen Außenmaßen des Fensters aus. Wird intern verwendet und braucht nicht direkt aufgerufen zu werden, wenn zur Größenänderung des Fensters nur die ObjectGEM-Methoden verwendet werden.
Deklaration
procedure GetWorkMax(var maxX,maxY: integer); virtual;
Beschreibung
Gibt an, wie groß das Fenster maximal werden darf. Beide Werte werden mit maxint besetzt, d.h. die Größe wird nur durch den Arbeitsbereich des Desktops beschränkt.
Wird von TDialog.GetWorkMax sinnvoll eingesetzt.
Deklaration
procedure GetWorkMin(var minX,minY: integer); virtual;
Beschreibung
Gibt an, wie klein der Arbeitsbereich des Fensters minimal werden darf. Wird z.Z. mit 21 (minX) und 1 (minY) besetzt (experimentell ermittelt), da sich bei älteren GEM-Versionen sonst die Fensterelemente überschneiden können.
Deklaration
function GetTitle: string;
Beschreibung
GetTitle liefert die Zeichenkette aus Attr.Title, wobei allerdings Leerzeichen und ASCII #0 abgeschnitten werden.
Deklaration
function GetIconTitle: string; virtual;
Beschreibung
Wird von TWindow.WMIconify aufgerufen, wenn das Fenster ikonifiziert werden soll. Die Rückgabe dient als Fenstertitel des Icon-Fensters; standardmäßig wird TWindow.GetTitle geliefert.
Von der Rückgabe werden z.Z. allerdings nur die ersten 10 (bzw. mit ICFS nur 8) Zeichen beachtet!
Deklaration
procedure IconPaint(var PaintInfo: TPaintStruct); virtual;
Beschreibung
Wird von TWindow.WMRedraw aufgerufen, wenn das Icon-Fenster neu gezeichnet werden soll. Standardmäßig wird der Arbeitsbereich einfach nur weiß gefüllt. Die Verfahrensweise ist analog zu TWindow.Paint.
Deklaration
procedure InitPaint; virtual;
Beschreibung
Wird von TWindow.WMRedraw aufgerufen, bevor mit der TWindow.Paint-Methode gezeichnet wird. Hier können also für das Redraw nötige Initialisierungen vorgenommen werden.
Deklaration
procedure ExitPaint; virtual;
Beschreibung
Wird von TWindow.WMRedraw aufgerufen, nachdem alle Rechtecke der Rechteckliste mit TWindow.Paint gezeichnet wurden. Hier können evtl. in TWindow.InitPaint vorgenommene Initialisierungen rückgängig gemacht werden.
Deklaration
function IsIconified: boolean;
Beschreibung
Gibt true zurück, wenn das Fenster ikonifiziert ist, d.h. wenn das Fenster zum "Icon" verkleinert wurde (erst ab AES 4.10 bzw. mit einem ICFS-Server möglich).
Deklaration
procedure WMIconify(iX,iY,iW,iH: integer); virtual;
Beschreibung
Wird von TApplication.MUMesag aufgerufen, wenn das Fenster ikonifiziert werden soll.
In iX,iY,iW,iH steht die Größe des Icon-Fensters, mit TWindow.GetIconTitle wird der neue Fenstertitel ermittelt.
Deklaration
procedure WMUniconify(oX,oY,oW,oH: integer); virtual;
Beschreibung
Bringt ein ikonifiziertes Fenster auf seine ursprüngliche Größe, die in oX,oY,oW,oH übergeben wird. Außerdem wird wieder der alte Fenstertitel gesetzt.
Wird von TApplication.MUMesag aufgerufen.
Deklaration
function IsDialog: boolean; virtual;
Beschreibung
Gibt false zurück, d.h. das Fenster ist kein Dialogfenster. TDialog überschreibt diese Methode.
Wird intern benötigt, da TWindow- und TDialog-Objekte in den gleichen Listen (MainWindow bzw. ChildList) verwaltet werden.
Deklaration
function IsModeless: boolean;
Beschreibung
Gibt true zurück, wenn das Fenster eine GEM-Kennung besitzt, wenn es also bereits mit TWindow.Create erzeugt wurde.
Zur Unterscheidung von modalen und nicht-modalen Dialogen sollte allerdings TDialog.IsModal verwendet werden.
Deklaration
function IsTop: boolean; virtual;
Beschreibung
Gibt true zurück, wenn das Fenster das oberste ist und wenn ansonsten auch keine modaler Dialog aktiv ist.
Deklaration
procedure LoadDialog(Indx: integer); virtual;
Beschreibung
Setzt DlgTree mittels SetDlgTree auf den zum Index Indx gehörigen Objektbaum, wenn dieser existiert und dem Fenster bisher noch kein Dialog zugewiesen wurde.
Andernfalls gibt ChkError em_InvalidDialog zurück.
Deklaration
procedure LoadIcon(Icn: PIcon); virtual;
Beschreibung
Setzt TWindow.Icon auf Icn. Das Fenster zeichnet dann ab sofort das übergebene Icon im ikonifizierten Fenster.
Deklaration
procedure FreeIcon; virtual;
Beschreibung
Gibt das Feld TWindow.Icon frei, d.h. das Fenster zeichnet in ikonifiziertem Zustand kein Icon mehr.
Deklaration
procedure LoadToolbar(Indx: integer; Opposite: boolean); virtual;
Beschreibung
Setzt Class.ToolbarTree auf den zum Index Indx gehörigen Objektbaum. Je nachdem, ob die Breite oder Höhe des Toolbar-ROOT-Objekts größer ist, wird die Toolbar horizontal oder vertikal gezeichnet. Normalerweise befindet sich die Toolbar am linken oder oberen Rand des Fensters. Wird allerdings in Opposite true übergeben, wird die Toolbar rechts bzw. unten gezeichnet. Dann werden außerdem die Flags cs_ToolbarOpposite und cs_FullRedraw gesetzt.
Anschließend wird noch der Arbeitsbereich neu gezeichnet.
Wenn Indx keinen gültigen Objektbaum bezeichnet oder das Fenster schon eine Toolbar besitzt, gibt ChkError em_InvalidToolbar zurück.
Deklaration
procedure FreeToolbar; virtual;
Beschreibung
Entfernt eine mit TWindow.LoadToolbar dem Fenster zugewiesene Toolbar. Der Arbeitsbereich wird anschließend neu gezeichnet, und cs_ToolbarOpposite wird gelöscht.
Wird von TWindow.Done aufgerufen.
Deklaration
procedure MakeWindow; virtual;
Beschreibung
Ruft erst TWindow.Create und dann TWindow.OpenWindow auf, d.h. das Fenster wird erzeugt und geöffnet. Diese Methode kann immer dann aufgerufen werden, wenn das Fenster geöffnet und an oberste Position gebracht werden soll, da automatisch darauf geachtet wird, ob es bereits erzeugt wurde.
Deklaration
procedure Move(r: GRECT); virtual;
Beschreibung
Bewegt das Fenster an die neue Position, die in den Feldern X,Y,W,H der GRECT-Struktur angegeben ist.
Deklaration
function Next: PWindow;
Beschreibung
Gibt einen Pointer auf das nächste Fenster in der Liste des übergeordneten Fensters zurück bzw. nil, wenn das Fenster das letzte in der Liste ist.
Deklaration
procedure OpenWindow; virtual;
Beschreibung
Wenn Attr.Status ws_Created enthält, wird das Fenster mit wind_open() geöffnet und ein evtl. vorhandenes TScroller-Objekt angepaßt. Wenn ws_ex_Disabled gesetzt und MultiTOS installiert ist, wird das Fenster anschließend in den Hintergrund gebracht. Danach werden alle vorhandenen untergeordneten Fenster geöffnet.
Tritt während des Öffnens ein Fehler auf, gibt ChkError em_WOpenFailure zurück.
Enthält Attr.Status allerdings bereits den Wert ws_Open, wird das Fenster nur an oberste Position gebracht (sofern ws_ex_Disabled nicht gesetzt ist), und die untergeordneten Fenster werden geöffnet.
Deklaration
procedure Paint(var PaintInfo: TPaintStruct); virtual;
Beschreibung
In dieser Methode sollten normalerweise alle Zeichenroutinen des Fensters zusammengefaßt sein, weshalb sie in eigentlich jedem ObjectGEM-Programm überschrieben wird. Man sollte nach Möglichkeit wirklich keine Zeichnungen im Fenster außerhalb dieser Methode vornehmen...
Standardmäßig macht Paint nichts, es sei denn, dem Fenster wurde mit TWindow.LoadDialog ein Dialogbaum zugewiesen. Dann wird der entsprechende Dialog gezeichnet.
Die Methode sollte nie direkt aufgerufen werden, sondern immer nur mittels ForceRedraw, WMRedraw oder TApplication.InvalidateRect. Wer meint, dies dennoch tun zu müssen, muß darauf achten, vor dem Aufruf von Paint die Methoden TWindow.UpdateDialog und InitPaint sowie nach dem Aufruf ExitPaint aufzurufen.
Deklaration
function Previous: PWindow;
Beschreibung
Gibt einen Pointer auf das vorhergehende Fenster in der Liste des übergeordneten Fensters zurück bzw. nil, wenn das Fenster das erste in der Liste ist.
Deklaration
procedure RawDestroy; virtual;
Beschreibung
Ruft zunächst für alle untergeordneten Fenster RawDestroy auf. Dann wird Attr.Status auf ws_NoWindow und Attr.gemHandle auf -1 gesetzt, ohne irgendwelche GEM-Funktionen zum Schließen bzw. Freigeben des Fensters zu verwenden.
Wird z.B. benötigt, wenn ein Accessory geschlossen wird; in diesem Fall werden nämlich alle Fenster automatisch vom Betriebssystem freigegeben. RawDestroy braucht normalerweise nicht direkt aufgerufen zu werden, stattdessen sollte (bzw. muß) man TWindow.Destroy verwenden.
Deklaration
procedure ReleaseDC; virtual;
Beschreibung
Gibt einen zuvor mit TWindow.GetDC angeforderten "device context" frei, d.h. das Zeichnen ist beendet und die Bildschirm-Blockierung wird aufgehoben. Darf nur aufgerufen werden, wenn GetDC erfolgreich war!
Deklaration
procedure SetCurr(r: GRECT); virtual;
Beschreibung
Setzt die neuen Außenmaße des Fensters. Intern wird TWindow.WMSized(r.X,r.Y,r.W,r.H) aufgerufen.
Deklaration
procedure SetCursor(Crs: HCursor); virtual;
Beschreibung
Ändert das Feld Class.hCursor auf Crs. Wenn das Fenster gerade top ist, wird der Mauszeiger entsprechend neu gesetzt.
Wichtig: Das Feld IconClass.hCursor wird nicht verändert, dieses kann nur einmal beim Programmstart mit GetIconWindowClass gesetzt werden!
Deklaration
procedure SetDlgTree(tree: \#PTree\#); virtual;
Beschreibung
Setzt DlgTree auf den in tree übergebenen Objektbaum. Es findet keine Überprüfung statt, ob überhaupt ein neuer Dialog zugewiesen werden darf! Deshalb sollte man diese Methode nie direkt aufrufen, sondern stattdessen TWindow.LoadDialog verwenden.
Deklaration
procedure SetGadgets(Style: integer); virtual;
Beschreibung
Weist dem Fenster andere Fensterelemente zu (CLOSER, MOVER, FULLER etc.). Wenn Style ungleich TWindow.Attr.Style ist, wird das Fenster dazu geschlossen und freigegeben und dann wieder komplett neu erzeugt und geöffnet.
Deklaration
procedure SetSubTitle(AnInfo: string); virtual;
Beschreibung
Gibt dem Fenster eine neue Infozeile und zeigt sie an, wenn in Attr.Style das Bit INFO gesetzt ist. Der String AnInfo darf max. 80 Zeichen lang sein.
Deklaration
procedure SetTitle(ATitle: string); virtual;
Beschreibung
Gibt dem Fenster einen neuen Titel und zeigt diesen an, wenn in Attr.Style das Bit NAME gesetzt ist. Der String ATitle darf max. 78 Zeichen lang sein, da vorne und hinten automatisch je ein Leerzeichen angefügt wird.
Deklaration
procedure SetupSize; virtual;
Beschreibung
In dieser Methode wird die Anfangsgröße des Fensters festgelegt. Full und Curr werden auf die Größe des Desktops gesetzt und daraus TWindow.Work berechnet. Wird von TWindow.SetupWindow aufgerufen.
Deklaration
procedure SetupWindow; virtual;
Beschreibung
In dieser Methode sollten alle Einstellungen, die das Fenster (d.h. nicht nur das Fensterobjekt an sich) betreffen, vorgenommen werden.
Standardmäßig wird zunächst TWindow.SetupSize aufgerufen. Dann werden dem Fenster drei von TKey abgeleitete Objekte zugewiesen, die für das Schließen des Fensters (<Control>+<U>), das Ändern der Größe (<Control>+<*>) und das Wechseln des Fensters (<Control>+<W>) zuständig sind. Wurde das Programm nicht als Accessory gestartet und ist cs_AutoOpen gesetzt, wird zum Schluß noch TWindow.MakeWindow aufgerufen.
Wird diese Methode überschrieben, sollte die ursprüngliche Methode irgendwo am Ende der neuen Methode aufgerufen werden.
Deklaration
procedure SetWork(r: GRECT); virtual;
Beschreibung
Bringt den Arbeitsbereich auf die neue Größe, die in den Feldern X,Y,W,H der GRECT-Struktur angegeben ist. Intern werden die Werte mit TWindow.Calc auf die Außenmaße umgerechnet und dann TWindow.WMSized aufgerufen.
Deklaration
procedure ShutdownWindow; virtual;
Beschreibung
Wird von TWindow.Done aufgerufen, nachdem alle Child-Fenster geschlossen wurden. In dieser Methode kann also das Fenster "ausgewertet" werden, bevor es geschlossen wird.
ShutdownWindow ist damit das Gegenstück zu TWindow.SetupWindow.
Deklaration
procedure Size(r: GRECT); virtual;
Beschreibung
Bringt die Außenmaße des Fensters auf die neue Größe, die in den Feldern X,Y,W,H der GRECT-Struktur angegeben ist.
Ist cs_FullRedraw gesetzt, wird anschließend TWindow.ForceRedraw aufgerufen.
Deklaration
procedure Top; virtual;
Beschreibung
Wenn das Fenster offen ist, wird es an die oberste Position gebracht.
Deklaration
procedure UpdateDialog; virtual;
Beschreibung
Wenn dem Fenster mit TWindow.LoadDialog ein Dialogbaum zugewiesen wurde, wird in dieser Methode das ROOT-Objekt auf die neue X- und Y- Position des Fenster-Arbeitsbereichs gebracht. Außerdem wird hier eine evtl. verwendete Toolbar positioniert.
Die Methode wird intern verwendet und braucht nicht direkt aufgerufen zu werden.
Deklaration
procedure WMArrowed(waA,SpeedA,waB,SpeedB: integer); virtual;
Beschreibung
Wird aufgerufen, wenn der Benutzer in den Sliderbereich klickt (Pfeile, grauer Bereich). Normalerweise enthält waA eine der WA_-Konstanten und SpeedA ist 1 (normale Scrollgeschwindigkeit), waB und SpeedB sind Null.
Wird allerdings unter WINX eine Scrollbox verwendet, kann in waB und SpeedB eine zweite (analog aufgebaute) Scrollanweisung übergeben werden.
Wenn ein Scroller vorhanden ist, wird der Fensterinhalt mit ScrollBy um die errechneten Werte verschoben.
Deklaration
procedure WMBottomed; virtual;
Beschreibung
Wird ab AES 4.10 aufgerufen, wenn der Benutzer das Fenster "backdropped", d.h. per Klick auf den Titel in den Hintergrund bringt.
ObjectGEM reagiert darauf mit dem entsprechenden wind_set()-Befehl.
Deklaration
procedure WMClick(mX,mY,KStat: integer); virtual;
Beschreibung
Wird von TWindow.WMButton aufgerufen, wenn der Benutzer in den Arbeitsbereich des Fensters klickt (Einfachklick). In mX und mY wird die Klickposition übergeben, KStat gibt den Zustand der Umschalttasten zum Zeitpunkt des Klicks an.
Standardmäßig werden hier nur evtl. vorhandene Icons mit IconSelect deselektiert.
Deklaration
procedure WMButton(mX,mY,BStat,KStat, Clicks: integer); virtual;
Beschreibung
Wird von TApplication.MUButton aufgerufen, wenn der Benutzer in den Arbeitsbereich des Fensters klickt. mX und mY geben die Klickposition an, BStat den Mausknopf (1=links, 2=rechts), Clicks die Anzahl der Klicks und KStat den Zustand der Umschalttasten.
Ist cs_DblClks gesetzt und Clicks=2, ruft WMButton TWindow.WMDblClick auf. Ist Clicks=1, wird zunächst überprüft, ob cs_Rubbox gesetzt ist. Ist dies der Fall und liegt die Klickposition im durch RBox angegebenen Bereich, wird TApplication.Rubbox aufgerufen und das Ergebnis an TWindow.WMRubbox weitergeleitet. Ansonsten wird TWindow.WMClick aufgerufen, oder - wenn mit der rechten Maustaste geklickt wurde - TWindow.WMRButton. Diese Methode wird normalerweise nicht überschrieben.
Wichtig: Ein Doppelklick rechts wird nicht weitergeleitet. Stattdessen wird das Fenster getoppt!
Deklaration
procedure WMClosed; virtual;
Beschreibung
Wenn TWindow.CanClose true zurückgibt, wird das Fenster mit TWindow.Destroy freigegeben. Ist dabei kein Fehler aufgetreten und cs_QuitOnClose gesetzt, wird das Programm mit TApplication.Quit beendet.
Wenn das Schließen eines Fensters also nicht zum Beenden der Applikation führen soll, muß diese Methode überschrieben werden.
Deklaration
procedure WMDblClick(mX,mY,KStat: integer); virtual;
Beschreibung
Wird von TWindow.WMButton aufgerufen, wenn der Benutzer doppelt in den Arbeitsbereich des Fensters klickt. In mX und mY wird die Klickposition übergeben, KStat gibt den Zustand der Umschalttasten zum Zeitpunkt des Klicks an.
Standardmäßig werden hier nur evtl. vorhandene Icons mit IconSelect deselektiert.
Deklaration
procedure WMDragDrop(PipeHnd,OrgID,mX,mY, KStat: integer); virtual;
Beschreibung
Wird von TApplication.APDragDrop aufgerufen, wenn der Benutzer unter MultiTOS ein Icon auf dieses Fenster gezogen hat.
Zunächst wird die Anfrage positiv beantwortet. Dann werden die von TWindow.DDGetPreferredTypes gelieferten Dateitypen übermittelt. Nachdem sich der Sender auf einen Dateityp festgelegt hat, wird darauf mit dem von TWindow.DDHeaderReply ermittelten Wert reagiert. Wenn sich Sender und Empfänger einigen konnten, werden dann mit TWindow.DDReadData die Daten gelesen, ansonsten wird die Drag&Drop-Anfrage abgewiesen oder ein neuer Dateityp verlangt.
Verschickt der Sender den 'ARGS'-Datentyp, wird automatisch die Methode TWindow.DDReadArgs aufgerufen. Wenn der Sender allerdings den Applikationspfad wissen möchte, wird dieser mit TWindow.DDGetPath zurückgeliefert.
PipeHnd ist das Dateihandle der geöffneten Pipe, auf die mit Fwrite(), Fread() etc. zugegriffen werden kann. OrgID ist die AES-Applikations-Kennung des Senders; mX, mY und KStat geben die Position der Maus und den Zustand der Umschalttasten beim Aufruf an.
Deklaration
procedure WMFulled; virtual;
Beschreibung
Ruft TWindow.FullSize auf. Wenn das Fenster ein TScroller-Objekt besitzt, wird dieses mit SetPageSize und SetSBarRange angepaßt.
Deklaration
procedure WMHSlid(Value: integer); virtual;
Beschreibung
Wird aufgerufen, wenn der Benutzer den horizontalen Slider verschoben hat. In Value befindet sich die neue Sliderposition in Promille.
Wenn ein TScroller-Objekt existiert, wird dieses an die neue Position angepaßt.
Deklaration
function WMKeyDown(Stat,Key: integer): boolean; virtual;
Beschreibung
Wird von TApplication.HandleKeybd aufgerufen, wenn das Fenster an oberster Position ist und das Applikations-Objekt das aufgetretene Tastaturereignis nicht verarbeiten konnte.
In Stat steht der Zustand der Umschalttasten, in Key der Tastaturcode. Wenn das Fenster die Taste verarbeiten konnte, muß true zurückgegeben werden. Standardmäßig ist die Rückgabe false.
Deklaration
procedure WMMoved(X,Y,W,H: integer); virtual;
Beschreibung
Das Fenster wird mit TWindow.Move an die übergebene Position gebracht. Wenn ein TScroller-Objekt existiert, wird dieses mit SetPageSize und SetSBarRange evtl. angepaßt.
Deklaration
procedure WMNewTop; virtual;
Beschreibung
Ruft TWindow.WMUntopped auf.
Deklaration
procedure WMOnTop; virtual;
Beschreibung
Wird aufgerufen, wenn das Fenster vom AES (Screen-Manager) an oberste Position gebracht wurde. Intern wird die Cursorsteuerung angepaßt.
Deklaration
procedure WMRBoxChanged(r: GRECT); virtual;
Beschreibung
Wird von TApplication.Rubbox jedesmal dann aufgerufen, wenn sich die Größe der vom Benutzer im Fenster aufgezogenenen Rubbox ändert. Dies kann z.B. dazu verwendet werden, um die aktuelle Größe, die in r übergeben wird, anzuzeigen etc.
Während des Aufrufs ist die Maus unsichtbar, und es liegt eine wind_update()-Schachtelung sowohl mit BEG_UPDATE als auch mit BEG_MCTRL vor. Veränderte VDI-Attribute müssen zurückgesetzt werden.
Deklaration
procedure WMRBoxCheck(x,y,xmin,ymin,xmax, ymax: integer; var mx,my: integer); virtual;
Beschreibung
Wird von TApplication.Rubbox jedesmal dann aufgerufen, wenn sich die Größe der vom Benutzer im Fenster aufgezogenenen Rubbox ändert. Im Gegensatz zu TWindow.WMRBoxChanged erfolgt der Aufruf noch vor dem Zeichnen. In x und y wird der feste Eckpunkt der Rubbox übergeben, in mx und my der variable. Letzterer kann mit dieser Methode an eigene Bedürfnisse angepaßt werden, aber Achtung: Der Aufruf erfolgt erst, nachdem der Punkt schon an die Werte von RBox angepaßt wurde. Wenn man also Änderungen vornimmt, sollte man danach mx und my mit Hilfe von xmin..ymax clippen.
Deklaration
procedure WMRButton(mX,mY,KStat,Clicks: integer); virtual;
Beschreibung
Wird von TWindow.WMButton aufgerufen, wenn mit der rechten Maustaste geklickt wurde. In mX und mY wird die Position übergeben, in Clicks die Anzahl der Klicks und in KStat der Status der Umschalttasten.
Wichtig: Bei einem Doppelklick rechts erfolgt kein Aufruf!
Deklaration
procedure WMRedraw(X,Y,W,H: integer); virtual;
Beschreibung
Zeichnet die Teile des Arbeitsbereichs neu, die sich mit dem übergebenen Bereich überschneiden. Dazu wird für alle betroffenen Rechtecke der Fenster-Rechteckliste TWindow.Paint bzw. - wenn das Fenster ikonifiziert ist - TWindow.IconPaint aufgerufen.
Vorher wird jeweils der zu übergebende TPaintStruct-Record ausgefüllt und der Hintergrund mit der gewünschten Farbe gelöscht, wenn Class.hbrBackground einen Wert größer Null enthält.
Das Clipping wird jeweils korrekt gesetzt und die Maus ist unsichtbar. Wichtig: WMRedraw nimmt keine Blockierung des Bildschirms mit wind_update() vor, dies muß man - wenn die Methode "von Hand" aufgerufen wird - selbst durchführen. Bei allen internen Aufrufen (z.B. von TApplication.MUMesag) kümmert sich ObjectGEM allerdings automatisch darum.
Nach dem Abarbeiten der Rechteckliste werden alle vorhandenen Icons mit TIcon.Paint dargestellt. Bevor gezeichnet wird, ruft WMRedraw die Methoden UpdateDialog und InitPaint auf, nach dem Zeichnen dann ExitPaint.
Deklaration
procedure WMRubbox(r: GRECT); virtual;
Beschreibung
Wird von TWindow.WMButton aufgerufen, wenn der Benutzer im Fenster eine Rubbox aufgezogen hat. In r wird der ausgewählte Bereich übergeben, der z.Z. nicht größer als der sichtbare Arbeitsbereich sein kann.
Der Bereich kann allerdings noch mit den Feldern X1,Y1,X2,Y2 von RBox eingeschränkt werden. Ist dort ein Wert ungleich Null eingetragen, wird dieser auf der entsprechenden Achse vom sichtbaren Arbeitsbereich abgezogen. Wenn also z.B. X2 den Wert 16 hat, kann die Rubbox bis maximal 16 Pixel vor dem rechten Rand des Arbeitsbereichs aufgezogen werden.
Wichtig: Die Veränderung von RBox sollte z.B. in TWindow.SetupWindow erfolgen. Außerdem dürfen die gewünschten Werte nicht direkt eingetragen werden, sondern müssen zum vorhandenen Wert addiert werden ("inc(RBox.X2,16);").
Deklaration
procedure WMSized(X,Y,W,H: integer); virtual;
Beschreibung
Das Fenster wird mit TWindow.Size auf die übergebene Größe gebracht. Wenn ein TScroller-Objekt existiert, wird dieses mit SetPageSize und SetSBarRange angepaßt.
Deklaration
procedure WMShaded; virtual;
Beschreibung
Wird unter WINX ab Version 2.3 aufgerufen, wenn das Fenster mit einem Mausklick rechts eingeklappt wird.
Dient nur zur Information, hier passiert sonst nichts weiter.
Deklaration
procedure WMUnshaded; virtual;
Beschreibung
Wird unter WINX ab Version 2.3 aufgerufen, wenn das Fenster wieder aufgeklappt wird.
Dient nur zur Information, hier passiert sonst weiter nichts.
Deklaration
procedure WMToolbar(Indx,BStat,KStat, Clicks: integer); virtual;
Beschreibung
Wird von TApplication.MUButton aufgerufen, wenn auf ein Element der Toolbar geklickt wurde. WMToolbar versucht, mit TToolbar.TestMessage ein passendes TToolbar-Objekt zu finden. Ist die Suche erfolgreich, wird die zugehörige TEvent.Work-Methode aufgerufen bzw. - wenn die Anwahl mit der rechten Maustaste erfolgte - ein evtl. vorhandener BubbleHelp-Hilfstext angezeigt.
Wichtig: Bei einem Doppelklick rechts erfolgt kein Aufruf, stattdessen wird das Fenster getoppt!
Deklaration
procedure WMTopped; virtual;
Beschreibung
Ruft TWindow.Top auf und bringt das Fenster damit an oberste Position.
Deklaration
procedure WMUntopped; virtual;
Beschreibung
Sollte vom GEM aufgerufen werden, wenn ein anderes Fenster an die oberste Position kommt. Intern wird dann die Mauscursor-Verwaltung angepaßt.
Deklaration
procedure WMVSlid(Value: integer); virtual;
Beschreibung
Wird aufgerufen, wenn der Benutzer den vertikalen Slider verschoben hat. In Value befindet sich die neue Sliderposition in Promille.
Wenn ein TScroller-Objekt existiert, wird dieses an die neue Position angepaßt.
Deklaration
procedure Print; virtual;
Beschreibung
Wird aufgerufen, wenn der Benutzer <Control>+<P> drückt. Standardmäßig passiert hier nichts.
Deklaration
procedure Cut; virtual;
Beschreibung
Wird aufgerufen, wenn der Benutzer <Control>+<X> drückt. Standardmäßig wird dann TApplication.Cut aufgerufen.
Deklaration
procedure Delete; virtual;
Beschreibung
Wird aufgerufen, wenn der Benutzer <Delete> drückt. Standardmäßig wird dann TApplication.Delete aufgerufen.
Deklaration
procedure Copy; virtual;
Beschreibung
Wird aufgerufen, wenn der Benutzer <Control>+<C> drückt. Standardmäßig wird dann TApplication.Copy aufgerufen.
Deklaration
procedure Paste; virtual;
Beschreibung
Wird aufgerufen, wenn der Benutzer <Control>+<V> drückt. Standardmäig wird dann TApplication.Paste aufgerufen.
Deklaration
procedure SelectAll; virtual;
Beschreibung
Wird aufgerufen, wenn der Benutzer <Control>+<A> drückt. Im Moment werden dann alle Icons des Fensters mit TWindow.IconSelect(true,id_No) angewählt.
Deklaration
procedure IconSelect(OnOff: boolean; OffExc: integer); virtual;
Beschreibung
Wenn OnOff true ist, werden alle Icons des Fensters selektiert. Andernfalls werden die Icons deselektiert (auch die der Fenster in der ChildList) - mit Ausnahme des Fensters mit dem GEM-Handle OffExc.
Sollen alle Icons deselektiert werden, muß für OffExc id_No übergeben werden.
Deklaration
function FirstIcon(OnAll: boolean): PIcon; virtual;
Beschreibung
Ist OnAll true, wird ein Pointer auf das erste selektierte Icon geliefert. Ansonsten wird das erste von allen Icons zurückgegeben.
Existiert kein entsprechendes Icon, erhält man nil.
Deklaration
procedure LoadMenu(Indx: integer); virtual;
Beschreibung
Installiert die Pulldown-Menüleiste im Objektbaum Indx. Zunächst wird geprüft, ob das Menü auf dem Bildschirm komplett dargestellt werden kann. Ist dies der Fall, wird das Menü gezeichnet, ansonsten gibt ChkError em_InvalidMenu zurück. Diese Methode sollte - falls ein Pulldown-Menü verwendet wird - in TWindow.SetupWindow aufgerufen werden.
Wenn das Menü korrekt installiert werden konnte, wird danach das "DESK"-Menü an Stelle der nicht benutzbaren Acessory-Einträge mit diversen Funktionen versehen.
Deklaration
procedure FreeMenu; virtual;
Beschreibung
Entfernt ein mit TWindow.LoadMenu installiertes Pulldown-Menü. Wird von TWindow.Done automatisch aufgerufen.
Deklaration
procedure HandleMenu(meNum: integer); virtual;
Beschreibung
Wird von TWindow.MNSelected aufgerufen, wenn für den Menüeintrag mit dem Index meNum kein zugehöriges TEvent-Objekt vorhanden ist. Innerhalb dieser Methode kann dann eine case-Abfrage durchgeführt werden. Nach Möglichkeit sollten allerdings TEvent-Objekte zum Einsatz kommen.
HandleMenu leitet die Anwahl des "Über..."-Menüeintrags an TApplication.MNSelected weiter, ansonsten passiert hier nichts.
Deklaration
procedure MNSelected(meNum,mtNum: integer; Tree: PTree; PrIndx: integer); virtual;
Beschreibung
Wird von TApplication.MUButton aufgerufen, wenn der Benutzer einen Menüeintrag angewählt hat. In meNum wird der Index dieses Eintrags, in mtNum der Index des entsprechenden Menütitels übergeben.
In Tree wird der Zeiger auf den zugehörigen Objektbaum und in PrIndex der Index des dem Eintrag übergeordneten Objekts übergeben; wenn diese Werte nicht ermittelt werden können, wird stattdessen nil bzw. 0 übergeben.
Die Methode versucht, den Menüeintrag mit einem TKeyMenu-Objekt zu verknüpfen; ist für den Eintrag kein derartiges Objekt vorhanden, wird die Methode TWindow.HandleMenu aufgerufen.
Deklaration
function NextIcon: PIcon; virtual;
Beschreibung
Gibt das nächste selektiert Icon bzw. Icon überhaupt zurück, je nachdem, welche Parameter an TWindow.FirstIcon übergeben wurden.