(******************************************************************************) (* This MODULE is Public Domain. Copy me like a beast! *) (* Christian Ledermann *) (* W”lfelkofen 2 *) (* 84166 Adlkofen *) (******************************************************************************) (* *) (* Started: 20.12.92 03:54:30 *) (* Version: 20.01.94 04:12:54 *) (* *) (******************************************************************************) (* *) (* Diese Software ist ohne jede Garantie. Ich verspreche *) (* keinerlei Wartung und bernehme keine Verantwortung fr Sch„den die *) (* durch die Benutzung dieses Programmes entstehen. *) (* Jegliche Ersatzansprche lehne ich ab. *) (* *) (******************************************************************************) DEFINITION MODULE WindowDialogue; FROM SYSTEM IMPORT ADDRESS; (*********************************************************************) (* Ein Artikel in ST-Computer 5/93 war die Anregeung fr dieses MODUL*) (* Im Gegensatz zum Vorbild ist es allerdings flexibler und kann so *) (* einfacher in eigene Programme eingebunden werden. *) (*********************************************************************) PROCEDURE OpenWindowDial(TreePtr : ADDRESS; Title : ARRAY OF CHAR):INTEGER; (********* Erzeugen, ™ffnen und Zeichnen eines Fensterdialogs ********) (* TreePtr : Adresse des Dialoges, zu ermitteln mit *) (* AES.ResourceGetAddr(0,NummerDerBox,DialogAdresse) *) (* Titel : Titelzeile des Fensters unter MultiTOS etc. am besten der *) (* Name des Programmes zu dem der Dialog geh”rt. *) (* Rckgabe : Nummer (AES-Handle) des Fensters. *) (* Greift intern auf CreateDialWindow,openDialWindow zurck *) (*********************************************************************) PROCEDURE DoWindowDial(ID, Window : INTEGER;TreePtr : ADDRESS; FirstObject :INTEGER):INTEGER; (********** nicht modale Dialog Box ausfhren*************************) (* ID : ID des aufrufenden Programmes, dies ist der Rckgabewert von *) (* AppInitialize. *) (* Window : Nummer des Fensters, wird von OpenWindowDial bzw Create- *) (* DialWindow zurckgegeben. *) (* Wenn hier -1 bergeben wird d.h. es konnte kein Fenster erzeugt *) (* werden wir ein "normaler" modaler Move-Dialog ausgefhrt. *) (* TreePtr : Adresse des Dialoges, zu ermitteln mit *) (* AES.ResourceGetAddr(0,NummerDerBox,DialogAdresse) *) (* NummerDerBox ist Vom RCS erzeugt worden und Steht in der .I -Datei*) (* FirstObject : Erstes Editierbares Object, dort steht dann der *) (* Cursor im Edit Feld, wenn kein EditObject vorhanden ist dann muž *) (* hier 0 bergeben werden. *) (* Rckgabe : Das Feld das zum Verlassen der Box angeklickt wurde. *) (* Wenn der Dialog aus anderen Grnden verlassen wurde zB. weil ein *) (* WindowEvent auftrat o.„. wird 0 zurckgegeben. *) (* Achtung!!! Wenn das Dialog-Fenster verschoben wird muss ein Redraw*) (* erzwungen werden bevor die Dialogbox wieder aktiviert wird sonst *) (* erkennt das GEM nicht die ge„nderten Koordinaten d.h. es vermutet *) (* die Buttons und EditFelder an der Stelle an der sich der Dialog *) (* vorher befand -> Bildschirmmll durch die Editfelder und *) (* Blindflug zum bedienen der Buttons. *) (* Der Dialog kann wie gew”hnlich im RCS erzeugt werden !!! *) (* Als Schmankerln sind hier noch ein paar Erweiterungen eingebaut *) (* 1.) Tastatursteuerung: wird Alt+Taste gedrckt so wird der Button *) (* im Dialogbaum ausgefhrt der als letztes(!) diese Taste in Grož- *) (* buchstaben enth„lt. Dabei ist es gleichgltig ob der Buttontext *) (* noch andere Grožbuchstaben enth„lt. OK reagiert also auf Alt-O *) (* und(!) auf Alt-K. *) (* 2.) Checkboxes: Ein Object vom Typ GBox das die Hintergrundfarbe *) (* schwarz hat und den Status crossed besitzt wird a) beim Aufruf *) (* von DoMoveDialog invertiert so das es nun eine weiže Box mit *) (* schwarzem Kreuz ist und b) wenn es im Dialog angeklickt wird mit *) (* dem Status Checked+Selected belegt -> weiže Box *) (* 3.) Wenn es kein DEFAULT-Object gibt wird mit ENTER bzw. RETURN *) (* der n„chste editierbare Eintrag angesprungen. *) (*********************************************************************) PROCEDURE CloseWindowDial(VAR Window : INTEGER); (****** Fenster-Dialog schliežen und Fenster freigeben (l”schen)******) (* Window : AES-Fenster-Handle, wird als Rckgabe auf -1 gesetzt *) (* Greift intern auf CloseDialWindow,DeleteDialWindow zurck *) (*********************************************************************) PROCEDURE CreateDialWindow(TreePtr : ADDRESS; Title : ARRAY OF CHAR):INTEGER; (***********Erzeugt ein Dialog Fenster *******************************) (* TreePtr : Adresse des Dialoges, zu ermitteln mit *) (* AES.ResourceGetAddr(0,NummerDerBox,DialogAdresse) *) (* Titel : Titelzeile des Fensters unter MultiTOS etc. am besten der *) (* Name des Programmes zu dem der Dialog geh”rt. *) (* Rckgabe : Nummer (AES-Handle) des Fensters. *) (* Alle n”tigen Strukturen fr die verwaltung des Fensters werden *) (* erzeugt: Fenster, Redraw-PROCEDURE... *) (* Der Dialog wir mittels ObjectCenter in der Bildschirmmitte *) (* angeordnet. *) (*********************************************************************) PROCEDURE OpenDialWindow(Window : INTEGER):BOOLEAN; (****************** ™ffnen des Dialog-Fensters.***********************) (* Window : AES-Fenster-Handle *) (* Rckgabe TRUE falls es erfolgreich ge”ffnet worden ist *) (* Das Fenster ”ffnet sich an der Stelle, wo es zuletzt war. *) (* Um den Dialog zu zeichnen muss hier noch ein Redraw erzwungen *) (* werden *) (*********************************************************************) PROCEDURE CloseDialWindow(Window : INTEGER); (*********** Schliessen des Dialog-Fensters***************************) (* Window : AES-Fenster-Handle *) (*********************************************************************) PROCEDURE DeleteDialWindow(VAR Window : INTEGER); (*************** Dialog-Fenster freigeben (l”schen)*******************) (* Window : AES-Fenster-Handle, wird als Rckgabe auf -1 gesetzt *) (*********************************************************************) END WindowDialogue.