home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / delite / ver1 / delite.doc < prev    next >
Encoding:
Text File  |  1991-03-01  |  264.1 KB  |  5,969 lines

  1.          deLite-Programmierhandbuch                               Seite 1
  2.  
  3.          __________________________________________________________________ 
  4.          Version 1.0 Februar 1991 
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 2
  69.  
  70.          Inhalt 
  71.  
  72.          1 Einführung.....................................................4
  73.              Eigenschaften von deLite.....................................4
  74.              Voraussetzungen..............................................4
  75.              Über dieses Handbuch.........................................4
  76.              Der Aufbau von deLite........................................5
  77.  
  78.          2 Das deLite-Programmiermodell...................................7
  79.              Botschaften und Ereignisse...................................7
  80.              Callback-Prozeduren..........................................7
  81.              Die Anmeldung der Empfangsprozedur...........................8
  82.              Der Botschaftenfluss.........................................8
  83.              Interaktive Hilfsfunktionen..................................9
  84.                Die allgemeine Hilfe......................................10
  85.                Die kontextabhängige Hilfe................................10
  86.              Menüs und Dialoge...........................................10
  87.              Die Maus-Schnittstelle......................................11
  88.              Die Tastatur-Schnittstelle..................................11
  89.              Konventionen der Datei-Benennung............................12
  90.              Die Initialisierungs-Datei..................................12
  91.              Konventionen der Maus-und Tastaturbedienung.................13
  92.  
  93.          3 Die Verwendung von Menüs......................................14
  94.              Die Definition von Menüs mit dem Menü-Compiler..............14
  95.              Die Behandlung von Menü-Meldungen...........................15
  96.              Die Modifikation von Menüpunkten............................15
  97.                Menüpunkte mit einer Überprüfungsmarke versehen...........15
  98.                Menüpunkte sperren........................................16
  99.                Ermitteln des Zustandes des Menüpunktes...................16
  100.                Ermitteln des Menütextes..................................16
  101.                Austauschen eines Menüpunktes.............................16
  102.  
  103.          4 Die Benutzung der Dialoge.....................................17
  104.              Der boolesche Dialog........................................18
  105.              Der kleine Dialog...........................................18
  106.              Der doppelte Dialog.........................................19
  107.              Der Listendialog............................................20
  108.              Meldungsfenster.............................................23
  109.                Eine Meldung ausgeben.....................................23
  110.                Eine Fehlermeldung ausgeben...............................23
  111.  
  112.          5 Die Verwendung von Fenstern...................................24
  113.              Von Fenstern, Viewports und Klienten........................24
  114.                Viewports.................................................24
  115.                Fenster...................................................24
  116.                Klienten..................................................24
  117.                Der Dispatcher............................................26
  118.              Die Benutzung von Fenstern..................................26
  119.              Die Anmeldung weiterer Klienten.............................27
  120.              Klienten mit Fenstern.......................................28
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 3
  136.  
  137.          6 Die graphischen Operationen...................................29
  138.              Elementare Zeichenoperationen...............................29
  139.                Setzen eines Pixels.......................................29
  140.                Zeichnen einer Linie......................................29
  141.                Zeichnen eines Rechtecks..................................29
  142.                Zeichnen einer rechteckigen Fläche........................29
  143.                Zeichnen eines Kreises....................................29
  144.                Zeichnen eines Kreissegmentes.............................30
  145.              Der Standard-Zeichensatz....................................30
  146.                Ausgabe eines Textes im Standardzeichensatz...............30
  147.                Ermitteln der Größe eines Zeichens........................30
  148.              Der skalierbare Zeichensatz.................................30
  149.              Weitere Funktionen..........................................31
  150.                Manipulieren von Bitmaps..................................31
  151.                Zeichnen von Ikonen.......................................31
  152.  
  153.          7 Die Initialisierungsdatei.....................................33
  154.              Aufbau der Initialisierungsdatei............................33
  155.              Systemabschnitte............................................34
  156.              Datentypen der Initialisierungsdatei........................34
  157.                Der Name..................................................35
  158.                Der geschützte String.....................................35
  159.                Der Longint...............................................35
  160.              Listen in der Initialisierungsdatei.........................35
  161.              Benutzung der Initialisierungsdatei.........................35
  162.                Zugriff auf Namen.........................................36
  163.                Zugriff auf geschützte Strings............................36
  164.                Zugriff auf Longints......................................37
  165.              Benutzung von Listen........................................38
  166.  
  167.          8 Referenz......................................................40
  168.              Anhang A Konfigurationsmöglichkeiten........................83
  169.                Der Abschnitt Paths.......................................83
  170.                Der Abschnitt Hardware....................................83
  171.                Der Abschnitt memory......................................83
  172.                Der Abschnitt colors......................................84
  173.              Anhang B Fehlermeldungen....................................86
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 4
  203.  
  204.          1 Einführung
  205.          
  206.          
  207.          Eigenschaften von deLite
  208.          
  209.               Mit dem deLite Toolkit für Turbo-Pascal  verleihen  Sie Ihren 
  210.               Programmen  ein  ansprechendes  Äußeres,  ohne  das  Rad  ein 
  211.               zweites  Mal  erfinden  zu  müssen.  Unter  deLite  erstellte 
  212.               Programme  profitieren  von  einer  Vielzahl  von  nützlichen 
  213.               Eigenschaften: 
  214.               
  215.               - Pulldown-Menüs, die zur Laufzeit modifiziert werden können 
  216.  
  217.               - Mausbedienung mit Ereignissteuerung 
  218.  
  219.               - kontextsensitive Hilfsfunktionen 
  220.  
  221.               - Treiber  für eine Vielzahl  von Grafikkarten,  auch mit 256 
  222.                 Farben 
  223.  
  224.               - Dialoge mit überlappenden Fenstern 
  225.  
  226.               - Komfortabler Zugriff auf eine Initialisierungsdatei
  227.               
  228.               Der Preis, den Sie für diese Vorteile bezahlen, ist gering: 
  229.               deLite  macht  Ihre  Programme  nur um etwa 50k länger;  eine 
  230.               intelligente  Speicherverwaltung  sorgt dafür, daß Ihnen auch 
  231.               bei einem  Dutzend  sich überlappender  Fenster  der Arbeits- 
  232.               speicher nicht knapp wird.  Das deLite-Programmiermodell  ist 
  233.               leicht  zu verstehen  und orientiert  sich  an den Paradigmen 
  234.               moderner   Oberflächen   wie  Microsoft   Windows  oder  OS/2 
  235.               Presentation  Manager.   Eine  Reihe  von  Beispielprogrammen 
  236.               erleichtert Ihnen den Einstieg in den Umgang mit deLite.
  237.               
  238.          Voraussetzungen 
  239.  
  240.               DeLite ist in Turbo-Pascal  5.5 geschrieben  und besteht  aus 
  241.               zwei Units, die von Ihrem Programm importiert  werden müssen. 
  242.               Eine  Maus  ist nicht  unbedingt  notwendig,  aber doch  sehr 
  243.               empfehlenswert.   Da die Speicherverwaltung  von deLite unter 
  244.               Umständen  auf Ihre Festplatte  zurückgreifen  muß,  um Bild- 
  245.               schirmausschnitte  auszulagern,  ist  etwa  ein MByte  freier 
  246.               Speicherplatz   notwendig.   Natürlich  benötigen  Sie  einen 
  247.               grafikfähigen  Bildschirmadapter,   um  deLite  verwenden  zu 
  248.               können. 
  249.  
  250.          Über dieses Handbuch
  251.  
  252.               Dieses Handbuch  informiert  Sie über die Programmierung  mit 
  253.               deLite.   Das zweite Kapitel  erläutert  in groben  Zügen die 
  254.               Konzeption von deLite und macht Sie mit dem zugrundeliegenden 
  255.               Programmiermodell  vertraut.  Das Kapitel enthält ein kleines 
  256.               Beispielprogramm. 
  257.  
  258.               Im dritten  Kapitel  wird  die Erstellung  und Benutzung  von 
  259.               Menüs  erläutert.   Hier erfahren  Sie, wie Sie mit dem Menü- 
  260.               compiler  arbeiten  und wie Sie das Aussehen  von Menüpunkten 
  261.               ändern können. 
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  
  269.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 5
  270.  
  271.               Das vierte Kapitel  erläutert  die Dialoge,  die unter deLite 
  272.               zur Verfügung  stehen.  Dialoge  sind parametrisierbare  Ein- 
  273.               gabemasken,  über die Sie mit dem Anwender  Ihres  Programmes 
  274.               kommunizieren. 
  275.  
  276.               Das fünfte Kapitel behandelt  die Aufteilung  des Bildschirms 
  277.               in mehrere Teile, die getrennt  verwaltet  werden.   Ein Bei- 
  278.               spielprogramm   zeigt,   wie  die  Bildschirmaufteilung   zur 
  279.               Laufzeit  geändert  werden  kann.  Außerdem  wird  in  diesem 
  280.               Kapitel der Mechanismus der Botschaftenverteilung erläutert. 
  281.  
  282.               Im  sechsten   Kapitel   erfahren   Sie,  welche  graphischen 
  283.               Primitive  Ihnen unter deLite zur Verfügung stehen.  Das sind 
  284.               elementare  graphische Funktionen wie etwa das Zeichnen einer 
  285.               Linie oder das Setzen eines Punktes. 
  286.  
  287.               Im  siebten  Kapitel  wird  der  Zugriff  auf  die  Initiali- 
  288.               sierungsdatei  behandelt.  Die Initialisierungsdatei  enthält 
  289.               die  zur  Konfiguration   Ihres  Programmes  benötigten  Ein- 
  290.               stellungen  und wird von deLite  benutzt,  um den verwendeten 
  291.               Grafiktreiber und einiges mehr zu spezifizieren. 
  292.  
  293.               Das achte Kapitel  enthält eine vollständige  Referenz  aller 
  294.               Funktionen  und  Prozeduren  von  deLite.   Dieser  Teil  ist 
  295.               alphabetisch  geordnet  und dient als Nachschlagewerk.   Alle 
  296.               Funktionen  und Prozeduren  von deLite werden mit ihrer voll- 
  297.               ständigen Deklaration erläutert. 
  298.  
  299.               Im  Anhang  finden   Sie  neben  einem  Index  Hinweise   zur 
  300.               Konfiguration und Installation von deLite. 
  301.  
  302.          Der Aufbau von deLite 
  303.  
  304.               Das deLite-Toolkit  besteht  aus zwei Units,  vielen  Grafik- 
  305.               treibern und einigen Hilfsprogrammen.
  306.               
  307.               Das Unit Kernel  enthält  die Schnittstelle  zu den dynamisch 
  308.               nachgeladenen  Grafiktreibern  und  stellt  alle  elementaren 
  309.               Grafikbefehle,  die sogenannten  graphischen  Primitive,  zur 
  310.               Verfügung.  Ausserdem enthält es die Routinen für den Zugriff 
  311.               auf  die  Initialisierungsdatei.   Kernel  und  Grafiktreiber 
  312.               können als Ersatz für das Unit Graph und die BGI-Treiber  von 
  313.               Borland's  Turbo-Pascal  verstanden  werden,  auch  wenn  der 
  314.               Funktionsumfang   nicht   identisch   ist.    Gegenüber   den 
  315.               BGI-Treibern bietet der deLite-Kernel  den Vorteil, in vielen 
  316.               Belangen  schneller  zu sein  und den Zugriff  auf wesentlich 
  317.               mehr Grafiktreiber  zu bieten.   Andere,  seltener  benötigte 
  318.               Funktionen des Unit Graph werden Sie bei deLite nicht finden; 
  319.               dazu  zählen  zum Beispiel  alle Operationen  zum Füllen  von 
  320.               Flächen. 
  321.  
  322.               Das  Unit  API  setzt  auf  dem  Kernel  auf und stellt  eine 
  323.               Fensterverwaltung,  einen  Menümanager  und Dialoge  zur Ver- 
  324.               fügung.   Das API verwendet  als weitere Units eine Speicher- 
  325.               verwaltung und eine Liste der sprachabhängigen Zeichenketten.
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 6
  337.  
  338.               Das API stellt komplexe, bequem anzuwendende  Mechanismen für 
  339.               die  Maussteuerung   und  die  Verwaltung   der  Fenster  zur 
  340.               Verfügung,  die sich  der elementaren  Prozeduren  des Kernel 
  341.               bedienen.  So werden Sie, wenn Sie das API verwenden,  nie in 
  342.               die Verlegenheit  kommen, eine Prozedur zum Umschalten in den 
  343.               Grafikmodus verwenden zu müssen. 
  344.  
  345.               Im Referenzteil im Kapitel 8 ist zu jeder Prozedur angegeben, 
  346.               zu welchem  Unit  sie  gehört  und ob sie  zu der Klasse  von 
  347.               Funktionen zählt, die eigentlich nur vom API benötigt werden.
  348.  
  349.  
  350.  
  351.  
  352.  
  353.  
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360.  
  361.  
  362.  
  363.  
  364.  
  365.  
  366.  
  367.  
  368.  
  369.  
  370.  
  371.  
  372.  
  373.  
  374.  
  375.  
  376.  
  377.  
  378.  
  379.  
  380.  
  381.  
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401.  
  402.  
  403.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 7
  404.  
  405.          2 Das deLite-Programmiermodell
  406.  
  407.  
  408.               Die Programmierung unter deLite unterscheidet sich in einigen 
  409.               Belangen  deutlich von der gewohnten  sequentiellen  Program- 
  410.               mierung.  Unter einer graphischen Oberfläche hat der Program- 
  411.               mierer  keinen  direkten  Zugang mehr zu den Systemressourcen 
  412.               wie der Maus,  der Tastatur  oder dem Bildschirm.   Besonders 
  413.               drastisch  wird dieser  Unterschied  bei der Bearbeitung  von 
  414.               Eingaben. 
  415.  
  416.          Botschaften und Ereignisse
  417.  
  418.               Anstatt  die Eingabegeräte  periodisch  abzufragen,  wird  in 
  419.               einem  ereignisgesteuerten   System  eine  Nachricht  an  die 
  420.               Empfangsprozedur  des Hauptprogramms  gesendet,  sobald  eine 
  421.               entsprechende Aktion des Benutzers geschehen ist. Botschaften 
  422.               sind  elementar  für  das  Verständnis  des  deLite  Program- 
  423.               miermodells.  Eine Botschaft enthält die Information über ein 
  424.               Ereignis, das stattgefunden  hat.  Ereignisse in diesem Sinne 
  425.               sind vor allem Eingaben über die Tastatur oder die Maus, aber 
  426.               auch   abstraktere   Ereignisse   wie  das  Auswählen   eines 
  427.               Menüpunktes oder die Aufforderung,  den Bildschirminhalt  neu 
  428.               zu zeichnen.  Eine Botschaft wird durch den Verbundtyp  Event 
  429.               repräsentiert. 
  430.  
  431.                    TYPE Event = RECORD
  432.                                   Class:  EventTypes;
  433.                                   Attrib: char;
  434.                                   x,y:    Integer;
  435.                                 END;
  436.  
  437.               Der Aufzählungstyp  Class gibt an, um welche Art von Ereignis 
  438.               es sich handelt.  Hier wird grob unterschieden zwischen Maus, 
  439.               Tastatur  und einer Reihe von anderen Klassen,  die im Anhang 
  440.               genauer aufgelistet  sind.  Attrib spezifiziert  das Ereignis 
  441.               genauer; seine Bedeutung hängt von der Klasse des Ereignisses 
  442.               ab.  Bei einem  Tastaturereignis  wird  man hier  das Zeichen 
  443.               finden, bei Mausereignissen  wird hier angegeben, ob eine der 
  444.               Maustasten  betätigt  worden  ist oder die Maus bewegt wurde. 
  445.               Die Werte X und Y geben  bei Mausereignissen  die Koordinaten 
  446.               an,  an denen  das Ereignis  stattgefunden  hat.   Bei  Menü- 
  447.               ereignissen  wird  man  in  X die  Identifikationsnummer  des 
  448.               ausgewählten Menüeintrages vorfinden. 
  449.  
  450.          Callback-Prozeduren
  451.          
  452.               Um  das  Hauptprogramm  von  einem  Ereignis  in Kenntnis  zu 
  453.               setzen, wird dessen Hauptempfangsprozedur aufgerufen. Das ist 
  454.               eine Prozedur  vom vordefinierten  Typ EventReceiveProc,  der 
  455.               das  Ereignis  in Form  einer  Variable  vom Typ  Event,  der 
  456.               sogenannten  Botschaft, übergeben wird.  Diese Art von Proze- 
  457.               duren  bezeichnet  man auch als Callback-Prozeduren,  da eine 
  458.               übergeordnete  Instanz sie bei Bedarf aufruft.  Vorher aller- 
  459.               dings ist es notwendig,  dieser  übergeordneten  Instanz,  in 
  460.               unserem  Fall  dem  deLite-Toolkit,  den Namen  der Callback- 
  461.               Prozedur  mitzuteilen.  Diesen  Vorgang  bezeichnet  man  als 
  462.               Anmeldung. 
  463.  
  464.  
  465.  
  466.  
  467.  
  468.  
  469.  
  470.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 8
  471.  
  472.               Die Anmeldung der Empfangsprozedur 
  473.  
  474.               Der komplette  Initialisierungsvorgang  von deLite  wird nach 
  475.               Aufruf   der   Prozedur   OpenMainApplication   durchgeführt. 
  476.               DieserProzedur  werden  drei Variablen  übergeben,  von denen 
  477.               eine die Empfangsprozedur selbst ist. 
  478.  
  479.                    TYPE EventReceiveProc = Procedure(MyMessage:EventTyp);
  480.                    
  481.                    Function OpenMainApplication(EventHandler: EventReceiveProc;
  482.                                                 modus: integer;
  483.                                                 Name: NameString): integer;
  484.  
  485.               Daneben wird der Name des Programms und in modus ein Flag für 
  486.               einige optionale Eigenschaften übergeben.  Der Name dient als 
  487.               Dateiname  zum Einlesen der Resourcen  wie der Menüs oder der 
  488.               Hilfetexte. 
  489.  
  490.               Üblicherweise  besteht  die Empfangsprozedur  aus einem Case- 
  491.               Konstrukt,  innerhalb dessen auf die verschiedenen  Ereignis- 
  492.               typen reagiert  wird.  Allerdings  ist es nicht erforderlich, 
  493.               auf alle Ereignisse  wirklich zu reagieren;  viele Ereignisse 
  494.               wie z.B.  Menüereignisse  können zunächst durchaus  ignoriert 
  495.               werden  und erst zu einem  späteren  Zeitpunkt  implementiert 
  496.               werden.   Auf diese  Weise  unterstützt  deLite  den Top-Down 
  497.               Entwurf Ihres Programms. 
  498.  
  499.          Der Botschaftenfluss
  500.  
  501.               Prinzipiell wäre es möglich, nach der Anmeldung der Empfangs- 
  502.               prozedur die Kontrolle  vollständig  an deLite abzugeben  und 
  503.               erst  nach  der Beendigung  des Programms  wieder  zum Haupt- 
  504.               programm  zurückzukehren.   DeLite geht einen anderen Weg, um 
  505.               Ihnen die Möglichkeit offenzuhalten,  in den Botschaftenfluss 
  506.               einzugreifen.   Das wäre z.B.  dann notwendig,  wenn  Sie den 
  507.               Wunsch hätten, weitere Ereignisse zu generieren,  um etwa auf 
  508.               den Systemtimer  zu reagieren  oder  ein rudimentäres  Multi- 
  509.               tasking zu realisieren. 
  510.  
  511.               Nach    der    erfolgreichen    Ausführung    der    Prozedur 
  512.               OpenMainApplication  wird das Hauptprogramm  in eine Schleife 
  513.               einsteigen,  die erst nach  Beendigung  des Programms  wieder 
  514.               verlassen wird.  In dieser Schleife wird jeweils mit GetEvent 
  515.               ein   Ereignis   aus   der  Warteschlange   geholt   und  mit 
  516.               DispatchMessage dem System zur Weiterverarbeitung  übergeben. 
  517.               Das kleine Beispiel "hello" illustriert diesen Vorgang: 
  518.  
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.  
  533.  
  534.  
  535.  
  536.  
  537.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 9
  538.  
  539.                    PROGRAM hello;
  540.                    USES Kernel, API;
  541.                    VAR  MyEvent           : EventTyp;      
  542.                         StillRunning      : boolean;
  543.                         
  544.                    {$F+ } 
  545.                    Procedure HandleMsg(MyMessage: EventTyp); 
  546.                      Begin  
  547.                        With MyMessage Do    
  548.                          Case Class Of      
  549.                            Menu    : Case x of
  550.                                         0  : StillRunning := false;
  551.                                        10  : ErrWindow(30,30,'Hello world');
  552.                                      End;
  553.                          End;
  554.                      End;
  555.                    {$F- }
  556.  
  557.                    Begin  
  558.                      StillRunning := true;  
  559.                      If OpenMainApplication(HandleMsg,APP_NOFONT,'hello') = 0
  560.                        then
  561.                          while StillRunning Do      
  562.                            begin        
  563.                              GetEvent(MyEvent);        
  564.                              DispatchMessage(MyEvent);      
  565.                            end;    
  566.                      CloseMainApplication;
  567.                    End.
  568.  
  569.               In  diesem  Beispiel  wird  die  Empfangsprozedur   HandleMsg 
  570.               angemeldet.   Der Parameter APP_NOFONT zeigt an, daß es nicht 
  571.               notwendig ist, einen skalierbaren  Zeichensatz  zur Verfügung 
  572.               zu stellen. Die Menübeschreibung zu diesem Programm definiert 
  573.               zwei Menüpunkte mit den Identifikationsnummern  0 und 10, von 
  574.               denen die erste zum Beenden des Programms dient. 
  575.  
  576.               Die  Prozedur  DispatchMessage  steuert  den  Fluss  der Bot- 
  577.               schaften durch das System.  Sie entscheidet, ob die Nachricht 
  578.               unmittelbar  an die Empfangsprozedur  des  Hauptprogramms  zu 
  579.               senden ist oder zunächst vom Menümanager zu verarbeiten  ist. 
  580.               Der  Menümanager  ist  eine  Empfangsprozedur  innerhalb  von 
  581.               deLite,  die  für  die  Menüsteuerung   zuständig  ist.   Sie 
  582.               generiert   Meldungen   der  Klasse   Menu,   die  dann  über 
  583.               DispatchMessage  wieder  an die Empfangsschleife  des  Haupt- 
  584.               programms geschickt werden. 
  585.  
  586.          Interaktive Hilfsfunktionen
  587.          
  588.               Unter deLite  stehen  Ihnen automatisch  zwei leistungsfähige 
  589.               Mechanismen  zur Hilfestellung  zur Verfügung.   Neben  einer 
  590.               allgemeinen  Hilfsfunktion  mit einem Index bietet deLite die 
  591.               Möglichkeit,   in  Abhängigkeit   vom  Programmzustand   eine 
  592.               kontextabhängige Hilfe anzuzeigen. 
  593.  
  594.  
  595.  
  596.  
  597.  
  598.  
  599.  
  600.  
  601.  
  602.  
  603.  
  604.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 10
  605.  
  606.               Die allgemeine Hilfe 
  607.  
  608.               DeLite  fügt  automatisch  ganz  rechts  am Menübalken  einen 
  609.               Eintrag  "F1=Hilfe"  ein.  Wird dieser Menüpunkt  ausgewählt, 
  610.               oder  wird  die  Funktionstaste  F1 betätigt,  ohne  daß  ein 
  611.               Kontext für die interaktive Hilfe erkannt wird, erscheint ein 
  612.               Index, aus dem einzelne Stichworte  ausgewählt werden können. 
  613.               Diese Hilfsfunktion  sollte ganz allgemein die Bedienung  des 
  614.               Programms erläutern. 
  615.  
  616.               Die kontextabhängige Hilfe 
  617.  
  618.               Wird die Taste F1 betätigt,  wenn ein Menü offen ist oder ein 
  619.               Dialog aktiv ist, wird der Name des Menüpunktes  bzw.  ein im 
  620.               Dialog  definiertes   Stichwort  dazu  verwendet,  aus  einer 
  621.               zweiten Hilfsdatei  einen Text zu suchen und in einem Fenster 
  622.               anzuzeigen.  Der Hilfetext sollte konkrete Informationen  zum 
  623.               jeweils ausgewählten Menüpunkt bzw. zum gerade aktiven Dialog 
  624.               geben.   Es ist möglich,  für die Dialoge  auf  diese  Hilfs- 
  625.               funktion zu verzichten. 
  626.  
  627.               Die Hilfetexte  sind vom Programm  getrennt  in ASCII-Dateien 
  628.               abgelegt und können deshalb leicht ausgetauscht  werden, ohne 
  629.               das Programm  neu übersetzen  zu müssen.   Sie nehmen  keinen 
  630.               Platz im Arbeitsspeicher  in Anspruch, da sie immer nur kurz- 
  631.               zeitig eingeladen werden. 
  632.  
  633.          Menüs und Dialoge
  634.  
  635.               DeLite verfügt über einen leistungsfähigen  Menümanager,  der 
  636.               Ihnen die Verwaltung der Menüsteuerung  vollständig  abnimmt. 
  637.               Menüs werden  in einer ASCII-Datei  definiert,  mit dem Menü- 
  638.               compiler  in ein binäres Format konvertiert  und zur Laufzeit 
  639.               dynamisch  eingeladen.   Menüs können sowohl mit der Maus als 
  640.               auch mit der Tastatur  bedient werden; für jeden Eintrag kann 
  641.               ein Hotkey  definiert  werden,  mit dessen  Hilfe die Auswahl 
  642.               auch ohne Maus besonders schnell erfolgt. 
  643.  
  644.               Das  Erscheinungsbild  der  Menüs  kann  jederzeit  verändert 
  645.               werden.  Menüeinträge  können gesperrt  werden oder mit einer 
  646.               Überprüfungsmarke  versehen  werden.  Der Name eines Eintrags 
  647.               kann vom Programm geändert werden. 
  648.  
  649.               Jeder   Menüeintrag   wird  bei  der  Definition   mit  einer 
  650.               Identifikationsnummer   versehen.    Diese  Nummer  wird  der 
  651.               Empfangsprozedur  mitgeteilt, wenn ein Menü ausgewählt wurde, 
  652.               und muß bei jeder  Modifikation  des zugehörigen  Menüpunktes 
  653.               angegeben werden. 
  654.  
  655.               DeLite  verwendet  Pulldown-Menüs,  wie  sie heute  in vielen 
  656.               Programmen   verwendet  werden.   Ein  Menübalken  ist  stets 
  657.               sichtbar  und erlaubt die Auswahl  eines Untermenüs,  aus dem 
  658.               dann der eigentliche  Menüpunkt ausgewählt  wird.  Die Anzahl 
  659.               der Einträge  im Menübalken  oder in einem Untermenü  ist nur 
  660.               durch die Grösse des Bildschirms begrenzt. 
  661.  
  662.               Eine weitere Möglichkeit  der Kommunikation  mit dem Anwender 
  663.               bieten  die  von  deLite  zur Verfügung  gestellten  Dialoge. 
  664.               Hierkönnen  Texte eingegeben  werden, einfache Ja/Nein-Fragen 
  665.               beantwortet   werden,  und  Auswahlen  aus  Listen  getroffen 
  666.               werden.  Zur Zeit gibt es keine Möglichkeit,  mit Hilfe eines 
  667.               Dialogeditors   eigene,  komplexere  Dialoge  zu  entwickeln. 
  668.  
  669.  
  670.  
  671.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 11
  672.  
  673.               Allerdings  kann durch die Kombination  mehrerer Dialoge, die 
  674.               dann in übereinanderliegenden  Fenstern  dargestellt  werden, 
  675.               eine vergleichbare  Interaktion mit dem Anwender durchgeführt 
  676.               werden. 
  677.  
  678.          Die Maus-Schnittstelle
  679.          
  680.               Da die Maus als asynchrones  Gerät jederzeit  bedient  werden 
  681.               kann,  werden  Mausereignisse  in  einer  Warteschlange,  der 
  682.               Eventqueue, zwischengespeichert, um dann bei Bedarf abgerufen 
  683.               und verarbeitet zu werden. In dieser Warteschlange werden die 
  684.               Mausereignisse  in ihrer ursprünglichen Form gespeichert, das 
  685.               heisst, daß die Mauskoordinaten sich auf die linke obere Ecke 
  686.               des Bildschirms beziehen.  Später, nachdem die Mausereignisse 
  687.               von  DispatchMessage  verarbeitet  worden  sind,  werden  die 
  688.               Mauskoordinaten  normalisiert,  bevor  sie  an den  Empfänger 
  689.               weitergeleitet werden. Das bedeutet, daß sich Mausereignisse, 
  690.               wenn sie der Empfangsprozedur übergeben werden, auf die linke 
  691.               obere  Ecke des aktuellen  Viewports  beziehen.   Unter einem 
  692.               Viewport   versteht   man  einen   rechteckigen   Bildschirm- 
  693.               ausschnitt,   auf  den  sich  alle  graphischen   Operationen 
  694.               beziehen.   Beachten  Sie,  daß  es  immer  mindestens   zwei 
  695.               Viewports gibt: Der Menübalken nimmt am oberen Bildschirmrand 
  696.               einen   schmalen   Streifen   in   Anspruch,    während   dem 
  697.               Hauptprogramm in der Regel der restliche Teil des Bildschirms 
  698.               gehört. Die Normalisierung der Mauskoordinaten ist notwendig, 
  699.               damit  sich  Ihr Programm  nicht  um die Bildschirmaufteilung 
  700.               kümmern muß. 
  701.  
  702.          Die Tastatur-Schnittstelle
  703.  
  704.               Tastaturereignisse  werden  wie Mausereignisse  in der Warte- 
  705.               schlange  zwischengespeichert.   Da die PC-Tastaturen  in der 
  706.               Lage  sind,   mehr  als  256  verschiedene   Tastencodes   zu 
  707.               generieren,  werden mehrere  Klassen  von Tastaturereignissen 
  708.               unterschieden.   Der Eintrag Attrib eines Events enthält  die 
  709.               Taste selbst, während Class die Werte ALTKEY,  CTRLKEY,  FKEY 
  710.               oder NORMKEY  annehmen  kann.   Auf diese  Weise  wird unter- 
  711.               schieden,  ob eine  Taste  in Verbindung  mit  ALT oder  CTRL 
  712.               betätigt wurde oder ob eine Funktionstaste gedrückt wurde. Zu 
  713.               beachten  ist,  daß  die  ENTER-Taste  in die Klasse  CTRLKEY 
  714.               fällt. 
  715.  
  716.               In vielen  Fällen  wird es nicht  nötig  sein,  auf Tastatur- 
  717.               ereignisse zu reagieren. Tastaturereignisse, die sich auf die 
  718.               Menüs  oder  aktive  Dialoge  beziehen,   werden  vom  System 
  719.               automatisch selbst verarbeitet. 
  720.  
  721.  
  722.  
  723.  
  724.  
  725.  
  726.  
  727.  
  728.  
  729.  
  730.  
  731.  
  732.  
  733.  
  734.  
  735.  
  736.  
  737.  
  738.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 12
  739.  
  740.          Konventionen der Datei-Benennung
  741.          
  742.               Unter  deLite  gelten  eine  Reihe  von Konventionen  für die 
  743.               Benennung  der Dateien,  an die Sie sich halten müssen,  wenn 
  744.               Ihr Programm funktionieren  soll.  Eine lauffähige  Anwendung 
  745.               besteht neben der ausführbaren  EXE-Datei noch aus mindestens 
  746.               fünf weiteren Dateien: 
  747.  
  748.               - Die Initialisierungsdatei  enthält  Informationen  über die 
  749.                 verwendete  Grafikkarte  und einiges  mehr und hat die Endung
  750.                 ".ini"
  751.  
  752.               - Die Menübeschreibung  in kompilierter Form befindet sich in 
  753.                 einer Datei mit der Endung ".rsc" 
  754.  
  755.               - Die allgemeine  Hilfetexte befinden sich in einer Datei mit 
  756.                 der Endung ".hlp" 
  757.  
  758.               - Die kontextabhängigen  Hilfetexte  befindet  sich  in einer 
  759.                 Datei mit dem Namen "online.hlp" 
  760.  
  761.               - Der Grafiktreiber  trägt die Endung  ".vdi".   Er muss sich 
  762.                 allerdings  nicht  im gleichen  Verzeichnis  wie  das  aus- 
  763.                 führbare Programm befinden. 
  764.  
  765.               Daneben können noch skalierbare Zeichensätze  vorhanden sein, 
  766.               die die Dateiendung  ".fnt"  tragen.   Sollten  Sie über  die 
  767.               Bedeutung  einer  Datei  im unklaren  sein,  können  Sie  sie 
  768.               einfach mit dem DOS-Befehl TYPE ansehen. Alle vom System ver- 
  769.               wendeten  binären  Dateien tragen einen druckbaren  Vorspann, 
  770.               der weitere Informationen gibt. 
  771.  
  772.          Die Initialisierungs-Datei
  773.          
  774.               Die  Initialisierungsdatei   enthält  die  Informationen  zur 
  775.               Konfiguration Ihres Programms. Sie ist in einzelne Abschnitte 
  776.               unterteilt,   deren   Titel  jeweils   in  eckigen   Klammern 
  777.               geschrieben  ist.  Einige Abschnitte  sind bereits vom System 
  778.               belegt und dienen der Konfiguration  des Grafiktreibers,  der 
  779.               skalierbaren  Zeichensätze,  der  Farben  und  der  Speicher- 
  780.               verwaltung.  Darüber  hinaus  können  Sie  eigene  Abschnitte 
  781.               hinzufügen  und in Ihrem Programm  verwenden;  deLite  stellt 
  782.               einen Satz von Prozeduren zur Verfügung,  die den Zugriff auf 
  783.               die Informationen in der Initialisierungsdatei ermöglichen. 
  784.  
  785.               Beachten  Sie, daß das Vorhandensein  einiger  Einträge  not- 
  786.               wendig ist, um Ihr Programm  zu starten.  Ohne die Angabe des 
  787.               Videotreibers  wird  die Prozedur  OpenMainApplication  einen 
  788.               Fehler  zurückliefern.   Andere Einträge,  wie etwa die Farb- 
  789.               zuordnung,  sind  fakultativ  und  werden  vom  System  durch 
  790.               Standardwerte   ersetzt,   falls   keine   Angaben   in   der 
  791.               Initialisierungsdatei gemacht werden. 
  792.  
  793.               Da die Initialisierungsdatei  im ASCII-Format  abgelegt  ist, 
  794.               kann   sie   leicht   mit  einem   herkömmlichen   Texteditor 
  795.               modifiziert werden. Wir empfehlen, von dieser Möglichkeit der 
  796.               Konfiguration   in  Ihrem   Programm   Gebrauch   zu  machen. 
  797.  
  798.  
  799.  
  800.  
  801.  
  802.  
  803.  
  804.  
  805.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 13
  806.  
  807.          Konventionen der Maus- und Tastaturbedienung
  808.               
  809.               Bei der Definition  der Bedienung  der Menüs  und der Dialoge 
  810.               haben wir eine Reihe von Konventionen  aufgestellt,  die sich 
  811.               an gängige Standards anlehnen. 
  812.  
  813.               - Die linke Maustaste wählt Elemente aus 
  814.  
  815.               - Die rechte Maustaste schliesst  das gerade offene Menü oder 
  816.                 den aktiven Dialog 
  817.  
  818.               - Die ESCAPE-Taste entspricht der rechten Maustaste 
  819.  
  820.               - Die ENTER-Taste entspricht der linken Maustaste 
  821.  
  822.               - Die  Einträge  im  Menübalken   können  über  die  Tastatur 
  823.                 erreicht  werden, indem die ALT-Taste in Verbindung mit dem 
  824.                 jeweiligen Hotkey betätigt wird 
  825.  
  826.               - Innerhalb  der  Menüs  kann   die  Menümarkierung  mit  den 
  827.                 Cursortasten verschoben werden 
  828.  
  829.               - Die Funktionstaste F1 aktiviert die Hilfefunktion 
  830.  
  831.               Wir empfehlen, diese Konventionen auch bei der Programmierung 
  832.               Ihrer eigenen Programmteile  zu beachten.   Insbesondere  die 
  833.               Belegung der Maustasten  und die alternative  Verwendung  der 
  834.               ESCAPE/ENTER-Taste  sollte  auch  von  Ihnen  in dieser  Form 
  835.               eingehalten werden. 
  836.  
  837.  
  838.  
  839.  
  840.  
  841.  
  842.  
  843.  
  844.  
  845.  
  846.  
  847.  
  848.  
  849.  
  850.  
  851.  
  852.  
  853.  
  854.  
  855.  
  856.  
  857.  
  858.  
  859.  
  860.  
  861.  
  862.  
  863.  
  864.  
  865.  
  866.  
  867.  
  868.  
  869.  
  870.  
  871.  
  872.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 14
  873.  
  874.          3 Die Verwendung von Menüs
  875.  
  876.  
  877.          Die Definition von Menüs mit dem Menü-Compiler
  878.          
  879.               Der erste  Schritt  bei der Definition  eines  Menüs  ist die 
  880.               Erstellung  einer  Menübeschreibung  mit  Hilfe  eines  Text- 
  881.               editors.   Sie können dafür den Editor von Turbo-Pascal  ver- 
  882.               wenden. 
  883.  
  884.               Diese  Menübeschreibung  wird  anschliessend  mit  dem  Menü- 
  885.               compiler in eine binäre Form übersetzt. Die dabei entstehende 
  886.               Datei trägt die Endung ".rsc". 
  887.  
  888.               Die Syntax  der Menübeschreibungssprache  lehnt  sich  an den 
  889.               Resource-Compiler  für  Microsoft  Windows  an.   Eine  Menü- 
  890.               beschreibung beginnt mit dem Schlüsselwort MENU, dem der Name 
  891.               der zu erzeugenden  Datei folgt.  Dieser Name entspricht  dem 
  892.               Projektnamen, der OpenMainApplication übergeben wird. 
  893.  
  894.               Anschließend  folgt eine Anzahl  von Untermenübeschreibungen, 
  895.               die  jeweils  mit  dem Schlüsselwort  POPUP  beginnen  und in 
  896.               BEGIN/END-Konstrukten  eine Aufzählung  der Menüeinträge  mit 
  897.               MENUEITEM  enthalten.    Jeder  Menübeschreibung   und  jedem 
  898.               Menüeintrag  müssen drei Argumente  folgen:  Der in doppelten 
  899.               Anführungszeichen  geklammerte  Text  enthält  das Stichwort; 
  900.               danach  folgt der Hotkey  und die Identifikationsnummer.   Im 
  901.               Stichwort  sollte  dem  Hotkey  ein  Ampersand-Symbol  (kauf- 
  902.               männisches  Und)  vorausgehen,  um zu kennzeichnen,  daß  der 
  903.               folgende Buchstabe unterstrichen dargestellt werden soll. 
  904.  
  905.               Optional  kann  den  MENUEITEM-Einträgen   nach  der  Identi- 
  906.               fikationsnummer   das  Schlüsselwort  INACTIVE  oder  CHECKED 
  907.               folgen,  um  anzuzeigen,  daß  der  entsprechende   Menüpunkt 
  908.               inaktiv oder mit einer Überprüfungsmarke versehen ist.  Beide 
  909.               Schlüsselworte können auch kombiniert werden. 
  910.  
  911.               Beachten Sie, daß MENUEITEM-Zeilen  mit einem Semikolon enden 
  912.               müssen.  Nach dem letzten POPUP-Block muß ein abschliessendes 
  913.               END stehen.  Ein Beispiel zeigt die Menübeschreibung  für das 
  914.               "hello, world"-Programm aus dem zweiten Kapitel. 
  915.  
  916.                    MENU hello
  917.                      POPUP "&Hello" H 100 
  918.                        BEGIN  
  919.                          MENUEITEM "&Hi there!" H 101;  
  920.                          MENUEITEM "&Goodbye" G 0; 
  921.                        END 
  922.                    END
  923.  
  924.               Übersetzt  wird die Menübeschreibung  unter Angabe des Datei- 
  925.               namens als Kommandozeilenparameter. In den Beispielprogrammen 
  926.               enden alle Menübeschreibungen mit ".rc", hier wäre also mit 
  927.  
  928.                    compile hello.rc
  929.  
  930.               die Übersetzung vorzunehmen. 
  931.  
  932.               Der  Menücompiler  wird  bei  erfolgreicher  Übersetzung  die 
  933.               Meldung OK ausgeben,  anderenfalls  weist er unter Angabe der 
  934.               Zeilennummer auf den Fehler hin. 
  935.  
  936.  
  937.  
  938.  
  939.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 15
  940.  
  941.          Die Behandlung von Menü-Meldungen 
  942.  
  943.               Die Behandlung  von Menümeldungen  geschieht in der Empfangs- 
  944.               prozedur  des  Hauptprogramms.   Menümeldungen  besitzen  die 
  945.               Klasse Menu und enthalten im Element X der Botschaft  vom Typ 
  946.               Event  die  Identifikationsnummer   des  dazugehörigen  Menü- 
  947.               eintrages.   Eine  Meldung  wird erst dann abgeschickt,  wenn 
  948.               wirklich  ein Menüpunkt  ausgewählt  worden  ist,  das Öffnen 
  949.               eines Menüs und anschliessende  Verlassen  oder die Benutzung 
  950.               der  interaktiven   Hilfe   zieht   keine   Meldung   an  das 
  951.               Hauptprogramm nach sich. 
  952.  
  953.               Üblicherweise  wird  die  Empfangsprozedur  aus  einem  Case- 
  954.               Konstrukt bestehen, dessen Selektoren  wieder Case-Konstrukte 
  955.               sind.    Es  ist  empfehlenswert,   die   einzelnen   Identi- 
  956.               fikationsnummern  der Menüpunkte  nicht direkt als Selektoren 
  957.               zu verwenden, sondern zu Beginn als Konstante zu deklarieren, 
  958.               um  symbolisch  auf  die  Menüpunkte   zugreifen  zu  können. 
  959.               Anderenfalls   leidet   bei  umfangreichen   Menübäumen   die 
  960.               Lesbarkeit des Quelltextes. 
  961.  
  962.          Die Modifikation von Menüpunkten
  963.          
  964.               Zur Modifikation  des Aussehens von Menüpunkten existiert ein 
  965.               Satz  von  Prozeduren   und  eine  vordefinierte   Liste  von 
  966.               Konstanten.   Der Zugriff auf die Menüpunkte  geschieht nicht 
  967.               über   ihren   Namen,   sondern   grundsätzlich    über   die 
  968.               Identifikationsnummer.  DeLite besitzt die Fähigkeit, mehrere 
  969.               Menübäume  verwalten  zu können,  daher  muß  zusätzlich  ein 
  970.               Handle auf das betroffene  Menü übergeben werden.  Das Handle 
  971.               auf das Menü ist nichts anderes als ein Zeiger auf die Wurzel 
  972.               des  Menübaums,  für  den ein spezieller  Datentyp  definiert 
  973.               wurde. 
  974.  
  975.               Das Handle auf das Hauptmenü  ist dem Hauptprogramm  zunächst 
  976.               nicht bekannt,  es muß erst mit der Funktion  GetMenu erzeugt 
  977.               werden. 
  978.  
  979.               Menüpunkte mit einer Überprüfungsmarke versehen
  980.  
  981.               Die  Prozedur   CheckMenuItem   setzt   oder   entfernt   die 
  982.               Überprüfungsmarke vor dem Menüeintrag.  Die Überprüfungsmarke 
  983.               ist als Häkchen links neben dem Menüeintrag sichtbar. 
  984.  
  985.                    Procedure CheckMenuItem(Menu:   hmenu;
  986.                                            ID:     MenuID;
  987.                                            wCheck: MenuFlags);
  988.  
  989.               Die Variable wCheck kann einen der folgenden Werte annehmen: 
  990.  
  991.  
  992.                    MF_CHECKED          setzt die Überprüfungsmarke
  993.  
  994.                    MF_UNCHECKED        entfernt die Überprüfungsmarke
  995.  
  996.  
  997.  
  998.  
  999.  
  1000.  
  1001.  
  1002.  
  1003.  
  1004.  
  1005.  
  1006.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 16
  1007.  
  1008.               Menüpunkte sperren
  1009.  
  1010.               Die Prozedur EnableMenuItem  sperrt einen Menüpunkt oder gibt 
  1011.               ihn frei.  Gesperrte Menüpunkte  werden grau dargestellt  und 
  1012.               können  nicht ausgewählt  werden.   Die Hilfsfunktion  bleibt 
  1013.               allerdings weiterhin funktionsfähig. 
  1014.  
  1015.                    Procedure EnableMenuItem(Menu:    hmenu;
  1016.                                             ID:      MenuID;
  1017.                                             wEnable: MenuFlags);
  1018.                    
  1019.               Die Variable wEnable kann einen der folgenden Werte annehmen: 
  1020.  
  1021.                    MF_ENABLED          erlaubt  die Auswahl des Menüpunktes  
  1022.                    
  1023.                    MF_DISABLED         sperrt den Menüpunkt
  1024.               
  1025.               Ermitteln  des Zustandes des Menüpunktes 
  1026.               
  1027.               Mit Hilfe der Funktion  GetMenuFlags  kann der Zustand  eines 
  1028.               Menüpunktes  erfragt werden.  Der Zustand ist bitkodiert  und 
  1029.               muß  deshalb  durch  UND-Verknüpfung  mit den zu ermittelnden 
  1030.               Zustandsflags ermittelt werden. 
  1031.  
  1032.                    Function GetMenuFlags(Menu: hMenu;           
  1033.                                          ID  : MenuID):MenuFlags;
  1034.                       
  1035.                    If GetMenuFlags(GetMenu,101) and MF_CHECKED = MF_CHECKED
  1036.                       then ...
  1037.  
  1038.               Ermitteln des Menütextes
  1039.               
  1040.               Die Prozedur GetMenuString belegt eine Stringvariable mit dem 
  1041.               Text eines Menüpunktes.   Diese Prozedur ist nützlich, um vor 
  1042.               dem Ersetzen eines Menüpunktes den alten Eintrag zu retten. 
  1043.  
  1044.                    Procedure GetMenuString(Menu: hmenu;
  1045.                                            ID:   MenuID;
  1046.                                            Var   StrPtr: String);
  1047.               
  1048.               Austauschen eines Menüpunktes
  1049.               
  1050.               Die Prozedur  ReplaceMenuItem  ersetzt einen Menüpunkt  durch 
  1051.               einen  anderen.    Dazu  sind  neben  dem  Text  die  Identi- 
  1052.               fikationsnummer  und der Hotkey  des neuen Menüpunktes  anzu- 
  1053.               geben. 
  1054.  
  1055.                    Procedure ReplaceMenuItem(Menu     :hMenu;
  1056.                                              ID       :MenuID;
  1057.                                              NewItem  : String;
  1058.                                              IDNewItem:MenuID;
  1059.                                              NewHotKey:char);
  1060.  
  1061.  
  1062.  
  1063.  
  1064.  
  1065.  
  1066.  
  1067.  
  1068.  
  1069.  
  1070.  
  1071.  
  1072.  
  1073.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 17
  1074.  
  1075.          4 Die Benutzung der Dialoge
  1076.  
  1077.  
  1078.               Dialoge  sind  wie Menüs  eine Möglichkeit,  mit dem Anwender 
  1079.               eines Programmes zu kommunizieren.   Unter deLite reichen die 
  1080.               vorgefertigten  Dialoge  von der Beantwortung  einer Ja/Nein- 
  1081.               Frage  über die Möglichkeit  der Texteingabe  bis zur Auswahl 
  1082.               eines Elementes aus einer Liste. Durch die Kombination dieser 
  1083.               elementaren Dialoge lassen sich leistungsfähige Interaktionen 
  1084.               aufbauen, wie wir anhand einiger Beispiele zeigen werden. 
  1085.  
  1086.               Dialoge sind parametrisierbar.   Ihr Aussehen  kann mit Hilfe 
  1087.               sogenannter  Ressourcen  verändert  werden.  Ressourcen  sind 
  1088.               Verbund-Datentypen   (RECORDS),  deren  Elemente  die  Infor- 
  1089.               mationen über das Erscheinungsbild eines Dialoges tragen. Die 
  1090.               Elemente  der  Ressource   müssen  vor  der  Benutzung  eines 
  1091.               Dialoges belegt werden. 
  1092.  
  1093.               Alle Dialogressourcen bieten die Möglichkeit, die Koordinaten 
  1094.               des  Dialoges   auf  dem  Bildschirm   festzulegen   und  mit 
  1095.               mindestens  einem  Text auf die Bedeutung  des Dialoges  auf- 
  1096.               merksam  zu machen.  Ausserdem  besitzt  jede Dialogressource 
  1097.               einen Eintrag mit dem Namen topic, der das Stichwort  für die 
  1098.               kontextabhängige  Hilfe enthält.   Wird dieses Stichwort  mit 
  1099.               einem leeren String belegt, wird die F1-Taste ignoriert. 
  1100.  
  1101.               Mit Ausnahme  des booleschen  Dialoges  besitzen alle Dialoge 
  1102.               getrennte Prozeduren  zum Öffnen, Ausführen und Schließen und 
  1103.               liefern als unmittelbares  Ergebnis eine Information über den 
  1104.               Erfolg des Dialoges.   Der zurückgelieferte  Wert ist vom Typ 
  1105.               DlgSet und ist als ein Aufzählungstyp definiert: 
  1106.  
  1107.                    Type DlgSet = (escaped, success, empty);
  1108.                          
  1109.               Die Bedeutung der Werte: 
  1110.  
  1111.                    escaped            Der Dialog wurde mit ESCAPE verlassen
  1112.                    success            Der  Dialog wurde erfolgreich beendet
  1113.                    empty              Der Dialog wurde mit einer leeren
  1114.                                       Eingabe beendet
  1115.  
  1116.               So kann bereits vorab ohne eine Analyse des zurückgelieferten 
  1117.               Textes entschieden  werden,  ob die Eingabe  ggf.  wiederholt 
  1118.               werden muß. 
  1119.  
  1120.  
  1121.  
  1122.  
  1123.  
  1124.  
  1125.  
  1126.  
  1127.  
  1128.  
  1129.  
  1130.  
  1131.  
  1132.  
  1133.  
  1134.  
  1135.  
  1136.  
  1137.  
  1138.  
  1139.  
  1140.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 18
  1141.  
  1142.          Der boolesche Dialog
  1143.  
  1144.               Der boolesche  Dialog liefert  eine Antwort  auf eine Ja/Nein 
  1145.               -Frage. 
  1146.  
  1147.                    YesNoDialog = record
  1148.                                    text:    DlgStr;
  1149.                                    xorg:    integer;
  1150.                                    yorg:    integer;
  1151.                                    topic:   namestring;
  1152.                                    NoSpot:  HotSpot;
  1153.                                    YesSpot: HotSpot;
  1154.                                  end;
  1155.  
  1156.                    function DoYesNoDialog(rsc:YesNoDialog):boolean;
  1157.  
  1158.               Die Elemente NoSpot und YesSpot werden vom System belegt. Der 
  1159.               Dialog zeigt zwei Schaltflächen,  die mit der Maus ausgewählt 
  1160.               werden können. 
  1161.  
  1162.          Der kleine Dialog
  1163.  
  1164.               Der kleine Dialog  dient dem Einlesen  einer Textzeile.   Die 
  1165.               Prozedur  InitSmallDlg  öffnet  den  Dialog  an  der  in  der 
  1166.               Dialogressource  bezeichneten Position.  Es können zwei Texte 
  1167.               angegeben  werden,  von denen  der erste  über und der zweite 
  1168.               unterhalb  des  Eingabefeldes   erscheint.    Die  Länge  des 
  1169.               Eingabefeldes  kann  mit  der Variablen  len in der Ressource 
  1170.               vorgegeben  werden.  Es ist nicht möglich,  Texte einzugeben, 
  1171.               die  länger  sind  als das in der Dialogressource  angegebene 
  1172.               Maximum. 
  1173.  
  1174.                    SmallDialog = record
  1175.                                    text1:  Dlgstr;
  1176.                                    text2:  DlgStr;
  1177.                                    deflt:  DlgStr;
  1178.                                    xorg:   integer;
  1179.                                    yorg:   integer;
  1180.                                    len:    byte;
  1181.                                    topic: namestring;
  1182.                                  end;
  1183.  
  1184.                    procedure  InitSmallDlg(rsc: SmallDialog);
  1185.                    function   DoSmallDlg(var rsc: SmallDialog;
  1186.                                          var res:DlgStr): DlgSet;
  1187.                    procedure  CloseSmallDlg;
  1188.  
  1189.  
  1190.  
  1191.  
  1192.  
  1193.  
  1194.  
  1195.  
  1196.  
  1197.  
  1198.  
  1199.  
  1200.  
  1201.  
  1202.  
  1203.  
  1204.  
  1205.  
  1206.  
  1207.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 19
  1208.  
  1209.          Der doppelte Dialog
  1210.          
  1211.               Der doppelte  Dialog besteht aus zwei Texteingabefeldern  und 
  1212.               sollte verwendet werden, wenn logisch zusammengehörende  Ein- 
  1213.               gaben zu machen sind. 
  1214.  
  1215.                    TwinDialog  = record
  1216.                                    text1:  Dlgstr;
  1217.                                    text2:  DlgStr;
  1218.                                    text3:  DlgStr;
  1219.                                    deflt1: DlgStr;
  1220.                                    deflt2: DlgStr;
  1221.                                    xorg:   integer;
  1222.                                    yorg:   integer;
  1223.                                    len:    byte;
  1224.                                    topic1: NameString;
  1225.                                    topic2: NameString;
  1226.                                  end;
  1227.  
  1228.                    procedure InitTwinDlg(rsc: TwinDialog);
  1229.                    function  DoTwinDlg1(var rsc:TwinDialog;
  1230.                                         var res: DlgStr):DlgSet;
  1231.                    function  DoTwinDlg2(var rsc: TwinDialog;
  1232.                                         var res: DlgStr):DlgSet;
  1233.                    procedure CloseTwinDlg;
  1234.  
  1235.               Die mit deflt1  und deflt2 bezeichneten  Werte sind Vorgaben, 
  1236.               die in der Regel leer sind.  Anderenfalls erscheinen die hier 
  1237.               angegebenen  Texte  in  den  Texteingabefeldern   und  können 
  1238.               editiert werden. 
  1239.  
  1240.               Mit len wird die Länge der Texteingabefelder  auf ein Maximum 
  1241.               beschränkt.   Mit drei Texten wird der Dialog gekennzeichnet; 
  1242.               der  erste  Text  erscheint  als Titel,  während  die anderen 
  1243.               beiden  unter den Texteingabefeldern  erscheinen.   Für jedes 
  1244.               Texteingabefeld  kann  ein eigenes  Hilfestichwort  angegeben 
  1245.               werden. 
  1246.  
  1247.               Da der doppelte  Dialog  im Grunde genommen  aus zwei kleinen 
  1248.               Dialogen  besteht,  muß  das den Dialog  benutzende  Programm 
  1249.               selbst  sicherstellen,  daß  die  beiden  Dialogteile  in der 
  1250.               richtigen Reihenfolge abgearbeitet werden.  Es sollte gewähr- 
  1251.               leistet  werden,  daß man mit ESCAPE vom zweiten  Eingabefeld 
  1252.               wieder  in das erste kommt, bevor der Dialog ganz geschlossen 
  1253.               wird. 
  1254.  
  1255.  
  1256.  
  1257.  
  1258.  
  1259.  
  1260.  
  1261.  
  1262.  
  1263.  
  1264.  
  1265.  
  1266.  
  1267.  
  1268.  
  1269.  
  1270.  
  1271.  
  1272.  
  1273.  
  1274.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 20
  1275.  
  1276.               Ein Beispiel zeigt die Anwendung  dieses Dialoges.  In diesem 
  1277.               Fall geht es darum,  Anfangs-  und Endwert  eines  Intervalls 
  1278.               einzulesen. Nachdem die Dialogressource initialisiert ist und 
  1279.               der Dialog mit InitTwinDlg  geöffnet  wurde,  werden in einer 
  1280.               repeat-Schleife  solange die Dialoge ausgeführt, bis entweder 
  1281.               der erste Dialog  mit ESCAPE verlassen  wurde oder der zweite 
  1282.               erfolgreich abgeschlossen wurde.  Die Zustandsvariable  level 
  1283.               gewährleistet,  daß man vom zweiten  Dialog mit ESCAPE in den 
  1284.               ersten zurückgelangt.   Beachten  Sie, daß in diesem Beispiel 
  1285.               die  Vorbelegungen  deflt1  und deflt2  mit '0' initialisiert 
  1286.               wurden. 
  1287.  
  1288.                    MyRsc.text1   := 'Wertebereich eingeben:';
  1289.                    MyRsc.text2   := 'Anfangswert [Volt]';
  1290.                    MyRsc.text3   := 'Endwert [Volt]';
  1291.                    MyRsc.deflt1  := '0';
  1292.                    MyRsc.deflt2  := '0';
  1293.                    MyRsc.topic1  := 'Spannung A';
  1294.                    MyRsc.topic2  := 'Spannung E';
  1295.                    MyRsc.xorg    := 220;
  1296.                    MyRsc.yorg    :=  80;
  1297.                    MyRsc.len     :=  18;
  1298.                    InitTwinDlg(MyRsc);
  1299.                    level := 0;
  1300.                    repeat
  1301.                      if level = 0 then
  1302.                            If DoTwinDialog1(MyRsc,v1a)=success then level := 1
  1303.                                   else level := -1;
  1304.  
  1305.                      if Level = 1 then
  1306.                            If DoTwinDialog2(MyRsc,v1e)=success then level := 2
  1307.                                   else level := 0;
  1308.                    until (Level = 2) or (level = -1);
  1309.                    CloseTwinDlg;
  1310.                    if level = 2 then { ... Dialog erfolgreich durchgeführt }
  1311.                      
  1312.          Der Listendialog
  1313.          
  1314.               Der Listendialog  erlaubt  die Auswahl  eines  Elementes  aus 
  1315.               einer  Liste  von Elementen.   Da unter Umständen  nicht alle 
  1316.               Elemente  gleichzeitig  auf dem Bildschirm  sichtbar  gemacht 
  1317.               werden  können,  zeigt  das Fenster  nur jeweils  einen  Aus- 
  1318.               schnitt,  der  mit den Cursortasten  über  die gesamte  Liste 
  1319.               verschoben  werden kann.  Dieser Dialog eignet sich besonders 
  1320.               gut  zur  Auswahl  einer  Datei,  kann  aber  bei  geeigneter 
  1321.               Programmierung auch für andere Listen verwendet werden. 
  1322.  
  1323.               Für  den Aufbau  der Liste  werden  zwei  Callback-Prozeduren 
  1324.               verwendet,  deren  Typ  vordefiniert  ist.   Mit der Prozedur 
  1325.               GetFirst  fordert der Listendialog  das erste Element an, mit 
  1326.               der Prozedur GetNext alle weiteren.   Das geschieht  solange, 
  1327.               bis  die  Variable  eol  den  logischen  wert  TRUE  annimmt. 
  1328.               Ähnliche Funktionen  stellt Turbo-Pascal  für das Lesen eines 
  1329.               Diskettenverzeichnisses  zur  Verfügung,  und  wir werden  in 
  1330.               einem Beispiel  zeigen,  wie eine Datei aus einem Verzeichnis 
  1331.               ausgewählt werden kann. 
  1332.  
  1333.  
  1334.  
  1335.  
  1336.  
  1337.  
  1338.  
  1339.  
  1340.  
  1341.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 21
  1342.  
  1343.               Die eigentliche Liste wird, da sie sehr viel Speicherplatz in 
  1344.               Anspruch  nimmt,  auf  dem  Heap  gespeichert.  Es  ist  Ihre 
  1345.               Aufgabe,  den Speicher vor der Benutzung  zu alloziieren  und 
  1346.               hinterher wieder freizugeben.  Die Listeneinträge  sind immer 
  1347.               Zeichenketten; numerische Werte müssen also ggf. erst konver- 
  1348.               tiert werden. 
  1349.  
  1350.               Die Dialogressource  des Listendialoges ist umfangreicher als 
  1351.               die der anderen Dialoge. Der Ausschnitt aus der Liste, der am 
  1352.               Bildschirm   in  einem   Fenster   dargestellt   wird,   kann 
  1353.               vollständig  parametrisiert  werden; die Breite und die Länge 
  1354.               des Fensters kann frei gewählt werden. Es empfiehlt sich, die 
  1355.               Anzahl der gleichzeitig  sichtbaren Einträge nicht zu groß zu 
  1356.               wählen, da sonst bei langsamen  Rechnern das Verschieben  des 
  1357.               Ausschnitts unter Umständen nicht schnell genug verläuft. 
  1358.  
  1359.               Die Variable PoppedUp  wird vom System belegt und für interne 
  1360.               Zwecke verwendet. 
  1361.  
  1362.                    ListDialog  = record
  1363.                                    text:       DlgStr;
  1364.                                    Itemwidth:  integer;
  1365.                                    ListLength: integer;
  1366.                                    xorg,yorg:  integer;
  1367.                                    GetFirst:   ListProc;
  1368.                                    GetNext:    ListProc;
  1369.                                    PoppedUp:   boolean;
  1370.                                    topic:      NameString;
  1371.                                 end;
  1372.  
  1373.                    procedure InitListDialog(rsc: ListDialog;
  1374.                                             var ThisList: TheList);
  1375.                    function  DoListDialog(rsc: ListDialog;
  1376.                                           var res: NameString;
  1377.                                           var ThisList: TheList):DlgSet;
  1378.                    procedure UpdateListDialog(rsc: ListDialog;
  1379.                                               var ThisList: TheList;
  1380.                                               JustRedraw: boolean);
  1381.                    procedure CloseListDialog;
  1382.                     
  1383.               Die Variable  vom Typ TheList wird ausschließlich  vom System 
  1384.               verwendet.   Ein  Beispiel  zeigt  die Anwendung  des Listen- 
  1385.               dialoges  bei der Auswahl  eines Dateinamens.   Die Callback- 
  1386.               Prozeduren  GetFirstGIF  und GetNextGIF werden in die Dialog- 
  1387.               ressource   eingetragen   und   verwenden   die  Turbo-Pascal 
  1388.               Prozeduren  FindFirst  und FindNext zum Ermitteln  der Datei- 
  1389.               namen. 
  1390.  
  1391.                    {$F+ }
  1392.                    Procedure GetFirstGIF(Var Item: NameString;
  1393.                                          Var eol: boolean);
  1394.                    begin
  1395.                      MyRec.Name := '';
  1396.                      FindFirst(WorkDirectory+'\'+'*.gif',ReadOnly,MyRec);
  1397.                      If DosError = 0 then eol := false
  1398.                                      else eol := true;
  1399.                      Item := MyRec.Name;
  1400.                    end;
  1401.  
  1402.  
  1403.  
  1404.  
  1405.  
  1406.  
  1407.  
  1408.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 22
  1409.  
  1410.                    Procedure GetNextGIF(Var Item: NameString;
  1411.                                         Var eol: boolean);
  1412.                    begin
  1413.                      FindNext(MyRec);
  1414.                      If DosError = 0  then eol := false
  1415.                                       else eol := true;
  1416.                      Item := MyRec.Name;
  1417.                    end;
  1418.                    {$F- }       
  1419.   
  1420.                    procedure DisplayGIFPicture;
  1421.                    Var MyRsc  : ListDialog;
  1422.                        LaList : TheList;
  1423.                        LFNAme : DlgStr;
  1424.                        result : DlgSet;
  1425.                    begin
  1426.                      MyRsc.text       := 'GIF-Bild auswählen:';
  1427.                      MyRsc.ItemWidth  := 10;
  1428.                      MyRsc.ListLength := 12;
  1429.                      MyRsc.xorg       :=  70;
  1430.                      MyRsc.yorg       :=  30;
  1431.                      MyRsc.topic      := 'GIF auswählen';
  1432.                      MyRsc.GetFirst   := GetFirstGIF;
  1433.                      MyRsc.GetNext    := GetNextGIF;
  1434.                      result := empty;
  1435.                      new(LaList);
  1436.                      InitListDialog(MyRsc,LaList);
  1437.                      repeat
  1438.                        result := DoListDialog(MyRsc,LFname,LaList);
  1439.                        if result = success then
  1440.                                    { ... erfolgreich }                   
  1441.                      until (result = empty) or (result = escaped)
  1442.                      CloseListDialog;
  1443.                      dispose(LaList);
  1444.                    end;
  1445.                    
  1446.               Eine Besonderheit des Listendialoges ist die Möglichkeit, die 
  1447.               Liste bei bereits  geöffnetem  Dialog neu einzulesen  und die 
  1448.               Bildschirmanzeige  zu aktualisieren.  Das geschieht mit Hilfe 
  1449.               der  Prozedur  UpdateListDialog   und  wird  vorteilhaft  bei 
  1450.               Dialogen  eingesetzt,  mit denen ein Element  aus einer Liste 
  1451.               entfernt  werden  soll.  In diesem Fall wird nach der Auswahl 
  1452.               des   zu  löschenden   Elementes   durch   den   Aufruf   von 
  1453.               UpdateListDialog  die Liste erneut erzeugt.  In allen anderen 
  1454.               Fällen  wird  die  Liste  nur  ein  einziges  Mal eingelesen, 
  1455.               nämlich beim Aufruf von InitListDialog. 
  1456.  
  1457.               Beachten  Sie,  daß  die  Callback-Prozeduren  mit  der  Far- 
  1458.               Deklaration übersetzt werden müssen.  Anderenfalls meldet der 
  1459.               Compiler den Fehler illegal procedure or function reference. 
  1460.  
  1461.  
  1462.  
  1463.  
  1464.  
  1465.  
  1466.  
  1467.  
  1468.  
  1469.  
  1470.  
  1471.  
  1472.  
  1473.  
  1474.  
  1475.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 23
  1476.  
  1477.          Meldungsfenster
  1478.          
  1479.               Meldungsfenster  sind eine bequeme Möglichkeit, eine einzelne 
  1480.               Textausgabe   durchzuführen,   um  den  Anwender   auf  etwas 
  1481.               hinzuweisen, ohne selbst ein Fenster öffnen und danach wieder 
  1482.               schließen  zu müssen.   Unter deLite  stehen  zwei Typen  von 
  1483.               Meldungsfenstern  zur Verfügung,  die selbst  ein Fenster  an 
  1484.               einer  von  Ihnen  zu  bestimmenden   Position  öffnen,  eine 
  1485.               einzelne  Zeichenkette  ausgeben,  auf eine  Bestätigung  des 
  1486.               Benutzers   warten  und  anschließend   das  Fenster   wieder 
  1487.               entfernen.   Als Bestätigung  werden die Tasten  ESCAPE/ENTER 
  1488.               bzw. die beiden Maustasten akzeptiert. 
  1489.  
  1490.               Die beiden Meldungsfenster  unterscheiden  sich lediglich  in 
  1491.               der  Farbgebung.   Das  Systemfenster   sollte  für  Hinweise 
  1492.               verwendet  werden,  während  das  Fehlerfenster   auf  Fehler 
  1493.               aufmerksam machen sollte. 
  1494.  
  1495.               Eine Meldung ausgeben
  1496.                      
  1497.               Die  Prozedur  SysWindow  gibt  eine  Zeichenkette  in  einem 
  1498.               Fenster aus. Die Position wird in Pixeln angegeben, die Größe 
  1499.               des Fensters richtet sich nach der Länge der Zeichenkette. 
  1500.  
  1501.                    procedure SysWindow(x,y: integer; errtext: string);
  1502.  
  1503.               Eine Fehlermeldung ausgeben
  1504.               
  1505.               Die  Prozedur  ErrWindow  gibt  eine  Zeichenkette  in  einem 
  1506.               Fehlerfenster  aus.   Ein Fehlerfenster  hat in der Standard- 
  1507.               einstellung eine rote Hintergrundfarbe. 
  1508.  
  1509.                    procedure ErrWindow(x,y: integer; errtext: string);
  1510.  
  1511.               Die Farbe des Fehlerfensters  kann,  wie alle anderen  Farben 
  1512.               auch, in der Initialisierungsdatei spezifiziert werden. 
  1513.  
  1514.  
  1515.  
  1516.  
  1517.  
  1518.  
  1519.  
  1520.  
  1521.  
  1522.  
  1523.  
  1524.  
  1525.  
  1526.  
  1527.  
  1528.  
  1529.  
  1530.  
  1531.  
  1532.  
  1533.  
  1534.  
  1535.  
  1536.  
  1537.  
  1538.  
  1539.  
  1540.  
  1541.  
  1542.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 24
  1543.  
  1544.          5 Die Verwendung von Fenstern
  1545.  
  1546.  
  1547.          Von Fenstern, Viewports und Klienten
  1548.          
  1549.               Im zweiten Kapitel haben Sie bereits erfahren,  daß der Bild- 
  1550.               schirm  im  Normalfall   in  zwei  Bereiche  aufgeteilt  ist. 
  1551.               Amoberen  Bildschirmrand  wird  ein  Streifen  für  die Menüs 
  1552.               verwendet, der Rest des Bildschirms gehört Ihrem Programm. In 
  1553.               vielen Fällen wird diese Aufteilung ausreichend sein, aber es 
  1554.               gibt Situationen, in denen es wünschenswert ist, daß die ver- 
  1555.               fügbare Bildschirmfläche in weitere Segmente aufgeteilt wird. 
  1556.  
  1557.               Unter deLite  gibt es grundsätzlich  zwei Möglichkeiten,  den 
  1558.               Bildschirm aufzuteilen.   Für das Verständnis dieser Möglich- 
  1559.               keiten ist es notwendig, einige Begriffe zu klären. 
  1560.  
  1561.               Viewports 
  1562.  
  1563.               Unter einem Viewport versteht man eine beliebige  rechteckige 
  1564.               Fläche auf dem Bildschirm, die so angesteuert  wird, als wäre 
  1565.               sie ein eigenständiger Bildschirm.  Das heisst, daß die linke 
  1566.               obere  Ecke eines Viewports  stets die logischen  Koordinaten 
  1567.               (0,0)  hat,  unabhängig  von der tatsächlichen  Position  des 
  1568.               Viewports auf dem Bildschirm. Graphische Operationen, die die 
  1569.               logische  Fläche des Viewports  überschreiten  würden, werden 
  1570.               vom System an den Grenzen des Viewports abgeschnitten. Diesen 
  1571.               Vorgang bezeichnet man als Clipping. 
  1572.  
  1573.               Zu einem Zeitpunkt kann immer nur ein Viewport aktiv sein. Es 
  1574.               ist möglich, die Größe des Viewports  und seine tatsächlichen 
  1575.               Eckkoordinaten zu erfragen. 
  1576.  
  1577.               Fenster 
  1578.  
  1579.               Ein Fenster  ist eine rechteckige  Fläche auf dem Bildschirm, 
  1580.               die  mit  einem  Rahmen  versehen  ist  und  eine  definierte 
  1581.               Hintergrundfarbe besitzt. Beim Öffnen eines Fensters wird vom 
  1582.               System automatisch  ein Viewport  auf das Innere des Fensters 
  1583.               gesetzt.     Vorher   wird   der   vom   Fenster    verdeckte 
  1584.               Bildschirminhalt  gerettet,  um beim Schliessen  des Fensters 
  1585.               wieder rekonstruiert werden zu können. 
  1586.  
  1587.               Fenster  werden  in  einer  Stapelstruktur   verwaltet.   Das 
  1588.               bedeutet,  daß es möglich ist, über einem geöffneten  Fenster 
  1589.               weitere   Fenster  zu  öffnen,  ohne  das  erste  Fenster  zu 
  1590.               schliessen. Die Fenster werden in der umgekehrten Reihenfolge 
  1591.               geschlossen,  daher  der  Ausdruck  Stapel.   Nur das oberste 
  1592.               Fenster  ist jeweils  aktiv, die darunter  liegenden  Fenster 
  1593.               können  nicht  beschrieben  werden.   Beim  Schliessen  eines 
  1594.               Fensters wird das jeweils darunterliegende Fenster aktiviert. 
  1595.  
  1596.               Da immer  nur das oberste  Fenster  aktiv  ist,  eignen  sich 
  1597.               Fenster nur zur Darstellung von temporären Informationen. Für 
  1598.               die  permanente  Aufteilung  der  Bildschirmfläche  sind  sie 
  1599.               ungeeignet. 
  1600.  
  1601.               Klienten 
  1602.  
  1603.               Zur dauerhaften  Aufteilung des Bildschirms  dienen Klienten. 
  1604.               Ein Klient besteht aus einem Viewport  und einer Botschaften- 
  1605.               Empfangsprozedur. Im Normalfall existieren zwei Klienten: Der 
  1606.  
  1607.  
  1608.  
  1609.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 25
  1610.  
  1611.               Menümanager  ist ein systeminterner  Klient, dem als Viewport 
  1612.               der schmale Streifen am oberen Bildschirmrand zugeordnet ist, 
  1613.               und    die    Hauptapplikation,    die   mit   der   Prozedur 
  1614.               OpenMainApplication  angemeldet  wurde, besitzt die restliche 
  1615.               Bildschirmfläche.   Eine wichtige Einschränkung unterscheidet 
  1616.               Klienten  von  Fenstern:   Es  ist  nicht  möglich,  daß  die 
  1617.               Viewports der Klienten sich überlappen. 
  1618.  
  1619.               Jeder  Klient  besitzt   eine  eigene  Empfangsprozedur   für 
  1620.               Botschaften.  Die  Prozedur  DispatchMessage  verteilt  Maus- 
  1621.               ereignisse anhang der den Klienten zugeordneten Viewports. So 
  1622.               ist  gewährleistet,  daß  die  Empfangsprozedur   des  Haupt- 
  1623.               programms niemals ein Mausereignis erhält, das im Bereich des 
  1624.               Menübalkens stattgefunden hat. 
  1625.  
  1626.               Es ist möglich,  weitere Klienten anzumelden  und Ihnen Teile 
  1627.               des Viewports der Hauptapplikation zuzuteilen.  Das Beispiel- 
  1628.               programm  DXFView macht von dieser Möglichkeit  Gebrauch  und 
  1629.               teilt die Arbeitsfläche in vier kleine Bereiche ein, in denen 
  1630.               getrennt  voneinander  die Möglichkeit  besteht, Grafiken  zu 
  1631.               betrachten. 
  1632.  
  1633.               Diese Klienten bekommen nur die Mausereignisse zugesandt, die 
  1634.               sich  in ihren  Viewports  abgespielt  haben.   Das Beispiel- 
  1635.               programm DXFView nutzt diese Eigenschaft, um mit der Maus den 
  1636.               jeweils aktiven Klienten auswählen zu können. 
  1637.  
  1638.               Die zusätzlich angemeldeten Klienten können wieder abgemeldet 
  1639.               werden. Allerdings ist es nicht möglich, die Hauptapplikation 
  1640.               abzumelden, ohne das Programm zu beenden.  Das ist notwendig, 
  1641.               da  die  Empfangsprozedur   der  Hauptapplikation  stets  die 
  1642.               Menümeldungen zugesandt bekommt. Da die zusätzlichen Klienten 
  1643.               die Arbeitsfläche  der Hauptapplikation  überlagern,  gibt es 
  1644.               einen Konflikt  bei der Zuordnung  der Mausereignisse  zu den 
  1645.               Klienten:  Die immer noch aktive Hauptapplikation  würde alle 
  1646.               Ereignisse    bekommen,   da   ihr   Viewport   die   gesamte 
  1647.               Arbeitsfläche einnimmt. 
  1648.  
  1649.               Deshalb  muß in diesem Fall die Hauptapplikation  suspendiert 
  1650.               werden.  Suspendieren  bedeutet, daß der Dispatcher sie nicht 
  1651.               mehr  bei der Zuteilung  von Mausereignissen  berücksichtigt. 
  1652.               Ereignisse  anderer Klassen (Menüs, Tastatur) werden nach wie 
  1653.               vor an die Hauptapplikation gesendet.  Nach der Reaktivierung 
  1654.               empfängt   die  Hauptapplikation   wieder   alle  Arten   von 
  1655.               Ereignissen. 
  1656.  
  1657.               Um die Klienten  voneinander  zu unterscheiden,  trägt  jeder 
  1658.               Klient  eine  Identifikationsnummer,  die  ID.   Die  ID  der 
  1659.               Hauptapplikation  kann  mit  der Prozedur  GetMainID  erfragt 
  1660.               werden, die ID's der zusätzlich angemeldeten  Klienten werden 
  1661.               bei  der  Anmeldung   mit  der  Prozedur   OpenSubApplication 
  1662.               zurückgeliefert.   Die Prozeduren  zum An- oder Abmelden  von 
  1663.               Klienten  und zur Modifikation  ihrer Arbeitsweise  und ihres 
  1664.               Aussehens  erfordern  alle  die Angabe  der ID des jeweiligen 
  1665.               Klienten. 
  1666.  
  1667.               Im Gegensatz  zu Fenstern retten Klienten nicht den von ihrem 
  1668.               Viewport überlagerten  Bildschirmbereich.   Deshalb muß jeder 
  1669.               Klient  in der Lage sein,  seinen  Viewport  neu zu zeichnen, 
  1670.               wenn  er  die  Botschaft   DoRedraw  erhält.   Es  existieren 
  1671.               Prozeduren, mit denen einem Klienten eine Botschaft geschickt 
  1672.               werden kann. 
  1673.  
  1674.  
  1675.  
  1676.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 26
  1677.  
  1678.  
  1679.               In der nächsten  Version  von deLite  wird  es möglich  sein, 
  1680.               einem Klienten Streifen  an einem der Bildschirmränder  zuzu- 
  1681.               teilen  und  damit  die  Grösse  des  Viewports   der  Haupt- 
  1682.               applikation  dynamisch zu reduzieren.  Nach der Neuaufteilung 
  1683.               der  Viewports  unter  den Klienten  ist der Bildschirminhalt 
  1684.               ungültig,  er muß neu gezeichnet  werden.   DeLite würde dann 
  1685.               jedem der Klienten ein Redraw senden. 
  1686.  
  1687.               Der Dispatcher 
  1688.  
  1689.               Es wurde bereits erwähnt,  daß der Dispatcher  die Verteilung 
  1690.               der  Botschaften   anhand   der  den  Klienten   zugeordneten 
  1691.               Viewports vornimmt.  Allerdings gibt es Situationen, in denen 
  1692.               ein Klient alle Ereignisse zugesandt bekommen möchte. Das ist 
  1693.               z.B.   der  Fall,   wenn  ein  Menü  aufgeklappt   wurde  und 
  1694.               anschliessend   ein  Mausereignis   im  Viewport  der  Haupt- 
  1695.               applikation stattgefunden hat.  In diesem Fall hat der Benut- 
  1696.               zer  des  Programms   seine  Entscheidung,   einen  Menüpunkt 
  1697.               auszuwählen, geändert: Das Menü muß geschlossen werden, bevor 
  1698.               das Hauptprogramm seine Arbeit wieder aufnimmt. 
  1699.  
  1700.               Für solche Situationen besteht die Möglichkeit,  die Prozedur 
  1701.               DispatchMessage  vorübergehend  außer Kraft zu setzen und die 
  1702.               Zuteilung  aller  Ereignisse  zu  verlangen.  Die  Prozeduren 
  1703.               ReceiveExclusive  bzw.   ContinueToDispatch   steuern  diesen 
  1704.               Mechanismus. 
  1705.  
  1706.               Der Empfänger  einer Botschaft  kann davon ausgehen, daß sein 
  1707.               Viewport aktiv ist.  Seine Zeichenoperationen  würden also in 
  1708.               seinem  eigenen  Bildschirmsegment  stattfinden.  Es  besteht 
  1709.               allerdings  die  Möglichkeit,   den  Viewport  eines  anderen 
  1710.               Klienten  zu  erfragen  und  zu  setzen.   Die  dazugehörigen 
  1711.               Prozeduren  heissen  SetTheViewPort  und  GetTheViewPort  und 
  1712.               erfordern die Angabe der ID des betroffenen Viewports. 
  1713.  
  1714.               Die Benutzung von Fenstern 
  1715.  
  1716.               Fenster  können  geöffnet,  benutzt  und  wieder  geschlossen 
  1717.               werden   und  besitzen   einen   Rahmen   und  eine   in  der 
  1718.               Initialisierungsdatei  definierte  Farbe.  Sie  retten  selb- 
  1719.               ständig  den  von  ihnen  verdeckten   Bildschirminhalt   und 
  1720.               rekonstruieren  ihn nach dem Schliessen wieder.  Da dabei zum 
  1721.               Teil  recht  beachtliche  Mengen  an  Speicher  umgeschichtet 
  1722.               werden müssen, verwendet eine intelligente Speicherverwaltung 
  1723.               bei Bedarf EMS-Speicher und lagert Teile auf Festplatte aus. 
  1724.  
  1725.               Beim Öffnen eines Fensters  muß dessen Größe und Position  in 
  1726.               Pixeln angegeben  werden.  Möchte man ein Fenster zur Ausgabe 
  1727.               von  Text   verwenden   und  dabei   den  Standardzeichensatz 
  1728.               benutzen,  ist  es notwendig,  die Größe  eines  Fensters  in 
  1729.               Abhängigkeit  von  der  Grösse  der  Zeichen  des  jeweiligen 
  1730.               Zeichensatzes zu dimensionieren.  Da die deLite-Grafiktreiber 
  1731.               unterschiedliche Zeichensätze für jede Grafikkarte verwenden, 
  1732.               muß diese Information zur Laufzeit erfragt werden. 
  1733.  
  1734.  
  1735.  
  1736.  
  1737.  
  1738.  
  1739.  
  1740.  
  1741.  
  1742.  
  1743.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 27
  1744.  
  1745.               Zu diesem  Zweck existieren  eine Reihe  von Funktionen,  mit 
  1746.               denen man alle wichtigen Parameter  erfragen kann.  Mit Hilfe 
  1747.               der Funktionen  FontX und FontY kann die Größe eines Zeichens 
  1748.               in Pixeln  ermittelt  werden.   Die Funktionen  PortMaxX  und 
  1749.               PortMaxY  liefern  die  Größe  des zu dem Fenster  gehörenden 
  1750.               Viewports  und können benutzt werden, um graphische  Ausgaben 
  1751.               an die Grösse des Fensters anzupassen. 
  1752.  
  1753.               Ein Beispiel zeigt die Anwendung  dieser Möglichkeiten.   Das 
  1754.               Programmfragment   öffnet  ein  Fenster,  das  Platz  für  10 
  1755.               Textzeilen  mit 40 Spalten  bietet,  schreibt  mit Hilfe  der 
  1756.               Prozedur  WriteWin  einen  Text  in  die  oberste  Zeile  und 
  1757.               zeichnet Linien in die Diagonalen des Fensters. 
  1758.  
  1759.                    Procedure Demo;
  1760.                    Begin
  1761.                      OpenWindow(25,25,25+40*FontX,25+10*FontY);
  1762.                      WriteWin('Guten Tag',0,0,0);
  1763.                      Line(0,0,PortMaxX,PortMaxY,0);
  1764.                      Line(0,PortMaxY,PortMaxX,0,0);
  1765.                      WaitConfirm; { Warten auf eine Bestätigung }
  1766.                      CloseWindow;
  1767.                    End;
  1768.  
  1769.               Nach  dem  Schliessen  des Fensters  mit CloseWindow  ist der 
  1770.               zuvor verwendete Viewport wieder aktiv. 
  1771.  
  1772.               Es ist  wichtig,  daß  vor  dem  Befehl  zum  Schliessen  des 
  1773.               Fensters  ein WaitConfirm  steht.  Diese Prozedur  zieht alle 
  1774.               Ereignisse  an sich  und endet,  sobald  eine  der Maustasten 
  1775.               gedrückt  wurde oder ESCAPE  bzw.  ENTER betätigt  wurde.  So 
  1776.               werden alle Ereignisse geschluckt, und es ist sichergestellt, 
  1777.               daß kein Klient  zwischenzeitlich  aktiv  wird.  Während  ein 
  1778.               Fenster   offen  ist,  kann  auf  diese  Weise  kein  anderer 
  1779.               Programmteil tätig werden. 
  1780.  
  1781.          Die Anmeldung weiterer Klienten
  1782.          
  1783.               In einem Beispiel  werden wir zeigen,  wie der Bildschirm  in 
  1784.               vier  gleichgrosse  Segmente  aufgeteilt  wird.   Die  Haupt- 
  1785.               applikation wird zu diesem Zweck suspendiert. 
  1786.  
  1787.                    Procedure VierFenster;
  1788.                    Var ThePort: ViewPortType;
  1789.                        XSize  : integer;
  1790.                        YSize  : integer;
  1791.                        XOrg   : integer;
  1792.                        YOrg   : integer;
  1793.                        XEnd   : integer;
  1794.                        YEnd   : integer;
  1795.                        Msg    : EventTyp;
  1796.                    begin
  1797.                      ClearViewPort;                   { Fenster löschen }
  1798.                      GetViewSettings(ThePort);
  1799.                      With ThePort Do
  1800.                        begin
  1801.                          XSize := (x2-x1) div 2 - 2;  
  1802.                                           { Ausdehnung in x-Richtung }
  1803.                          YSize := (y2-y1) div 2 - 4;
  1804.                                           { dito in y-Richtung }
  1805.                          XOrg  := x1;
  1806.                          YOrg  := y1 + 3;
  1807.  
  1808.  
  1809.  
  1810.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 28
  1811.  
  1812.                          XEND  := x2;
  1813.                          YEnd  := y2;
  1814.                        end;
  1815.  
  1816.                      ID1 := OpenSubApplication(Fenster1,0,'Fenster 1',
  1817.                                                XOrg,YOrg,Xorg+XSize,
  1818.                                                YOrg+YSize);
  1819.                      ID2 := OpenSubApplication(Fenster2,0,'Fenster 2',
  1820.                                                XEND-XSize,YOrg,XEND,
  1821.                                                YOrg+YSize);
  1822.                      ID3 := OpenSubApplication(Fenster3,0,'Fenster 3',
  1823.                                                XOrg,YEnd-YSize,
  1824.                                                Xorg+XSize,YEnd);
  1825.                      ID4 := OpenSubApplication(Fenster4,0,'Fenster 4',
  1826.                                                XEnd-XSize,YEnd-YSize,
  1827.                                                XEnd,YEnd);
  1828.                      SuspendApplication(MyID); {Hauptfenster deaktivieren}
  1829.  
  1830.                      MSG.Class := DoRedraw;
  1831.                      PostMessage(MSG, ID1);       { alle Fenster neu
  1832.                                                     zeichnen }
  1833.                      PostMessage(MSG, ID2);
  1834.                      PostMessage(MSG, ID3);
  1835.                      PostMessage(MSG, ID4);
  1836.                    end;
  1837.  
  1838.               Beachten  Sie,  daß  die von der Prozedur  OpenSubApplication 
  1839.               zurückgelieferten ID's gespeichert werden, da sie später noch 
  1840.               benötigt  werden.  Die Prozedur  PostMessage  dient dazu, den 
  1841.               vier  neuen  Klienten  eine  Botschaft  vom  Typ DoRedraw  zu 
  1842.               senden.  Daraufhin  zeichnen  die Klienten  in ihren Viewport 
  1843.               eine Grafik. 
  1844.  
  1845.          Klienten mit Fenstern
  1846.          
  1847.               In manchen  Fällen  möchte  man  ein Fenster  mit den  Eigen- 
  1848.               schaften eines Klienten öffnen.  Das ist immer dann der Fall, 
  1849.               wenn  das Fenster  dazu  verwendet  werden  soll,  graphische 
  1850.               Operationen  in Abhängigkeit  von der Maus auszuführen,  bzw. 
  1851.               wenn ein Klient  nur temporär  benötigt  wird und der von ihm 
  1852.               überdeckte Bildschirminhalt gerettet werden soll. 
  1853.  
  1854.               Immer dann, wenn ein Fenster Mausereignisse  auswerten  soll, 
  1855.               ist es notwendig,  Fenster  und Klient  zu kombinieren.   Ein 
  1856.               kleines  Zeichenprogramm,  das in einem Fenster  laufen soll, 
  1857.               oder ein selbsterstellter  Dialog  mit Schaltflächen  für die 
  1858.               Maus würde zu dieser Kategorie  zählen.   In diesem  Fall ist 
  1859.               einfach  zunächst  ein Fenster  zu öffnen und dann ein Klient 
  1860.               auf den gleichen Koordinaten anzumelden.   Nachdem der Klient 
  1861.               mit ReceiveExclusive den Dispatcher deaktiviert hat, empfängt 
  1862.               er normalisierte Mausereignisse. 
  1863.  
  1864.  
  1865.  
  1866.  
  1867.  
  1868.  
  1869.  
  1870.  
  1871.  
  1872.  
  1873.  
  1874.  
  1875.  
  1876.  
  1877.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 29
  1878.  
  1879.          6 Die graphischen Operationen
  1880.  
  1881.  
  1882.               Die   von  deLite   zur  Verfügung   gestellten   graphischen 
  1883.               Operationen  umfassen  neben bitorientierten  Funktionen  zum 
  1884.               Zeichnen elementarer Symbole auch Funktionen zum Zeichnen und 
  1885.               Verschieben von Bitmaps. Neben einem Zeichensatz fester Größe 
  1886.               unterstützt  deLite auch skalierbare  Zeichensätze,  die ohne 
  1887.               Qualitätsverlust nahezu beliebig vergrößert werden können. 
  1888.  
  1889.               Für alle in diesem Abschnitt beschriebenen  Operationen gilt, 
  1890.               daß sie sich  auf den aktuell  gesetzten  Viewport  beziehen. 
  1891.               Alle Operationen  verwenden  einen Clipping-Algorithmus,  der 
  1892.               sicherstellt,  daß  keine  Bildschirmbereiche  außerhalb  des 
  1893.               aktiven Viewports beschrieben werden. 
  1894.  
  1895.          Elementare Zeichenoperationen
  1896.          
  1897.               Die  elementaren   Zeichenoperationen   dienen  dem  Zeichnen 
  1898.               sogenannter graphischer Primitive. Durch Kombination mehrerer 
  1899.               Primitive können komplexere Grafiken erstellt werden. 
  1900.  
  1901.               Setzen eines Pixels 
  1902.  
  1903.               Die Prozedur  SetPoint  setzt  ein einzelnes  Pixel  in einer 
  1904.               beliebigen Farbe. 
  1905.  
  1906.                    Procedure SetPoint(x,y: Integer; color: Byte) 
  1907.  
  1908.               Zeichnen einer Linie 
  1909.  
  1910.               Die Prozedur Line zeichnet eine Linie zwischen zwei Punkten. 
  1911.  
  1912.                    Procedure Line(x1,y1,x2,y2: Integer; color: Byte)
  1913.  
  1914.               Zeichnen eines Rechtecks 
  1915.  
  1916.               Die  Prozedur  Rectangle   zeichnet  ein  nicht  ausgefülltes 
  1917.               Rechteck. 
  1918.  
  1919.                    Procedure Rectangle(x1,y1,x2,y2: Integer; color: Byte)
  1920.  
  1921.               Zeichnen einer rechteckigen Fläche 
  1922.  
  1923.               Die  Prozedur  Bar  zeichnet  eine  ausgefüllte   rechteckige 
  1924.               Fläche. 
  1925.  
  1926.                    Procedure Bar(x1,y1,x2,y2: Integer; color: Byte)
  1927.  
  1928.               Zeichnen eines Kreises 
  1929.  
  1930.               Die Prozedur  Circle zeichnet  einen Kreis.   Anzugeben  sind 
  1931.               neben  der Farbe  die Koordinaten  des Mittelpunktes  und der 
  1932.               Radius. 
  1933.  
  1934.                    Procedure Circle(mx,my,radiud: Integer; color: Byte)
  1935.  
  1936.  
  1937.  
  1938.  
  1939.  
  1940.  
  1941.  
  1942.  
  1943.  
  1944.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 30
  1945.  
  1946.               Zeichnen eines Kreissegmentes 
  1947.  
  1948.               Die Prozedur Arc zeichnet ein Kreissegment.   Anzugeben  sind 
  1949.               neben  der Farbe  die Koordinaten  des Mittelpunktes  und der 
  1950.               Anfangs- und Endwinkel des Kreissegmentes. 
  1951.  
  1952.                    Procedure Arc(mx,my,phia,phib,radius:Integer;color:Byte)
  1953.  
  1954.          Der Standard-Zeichensatz
  1955.  
  1956.               Der  Standard-Zeichensatz  wird  von  deLite  für  Menüs  und 
  1957.               Dialoge  verwendet.   Seine Auflösung  richtet  sich nach dem 
  1958.               jeweils verwendeten Grafiktreiber  und beträgt für VGA-Karten 
  1959.               8x16   Pixel.    Die  Kopplung   des  Zeichensatzes   an  den 
  1960.               Grafiktreiber  bietet den Vorteil,  daß die Zeichen  auch bei 
  1961.               hochauflösenden  Grafikkarten lesbar bleiben.  Damit sich Ihr 
  1962.               Programm  unterschiedlichen   Zeichengrößen   anpassen  kann, 
  1963.               stehen Funktionen zur Verfügung, die Ihnen Informationen über 
  1964.               die Größe des verwendeten Zeichensatzes geben. 
  1965.  
  1966.               Ausgabe eines Textes im Standardzeichensatz 
  1967.  
  1968.               Zur  Ausgabe   eines  Textes   stehen  zwei  Prozeduren   zur 
  1969.               Verfügung.  Sie unterscheiden  sich in der Art der Angabe der 
  1970.               Position,  an  der  der  Text  auszugeben  ist.  Während  die 
  1971.               Prozedur  OutTextAPI  die  Koordinaten  in  Pixeln  erwartet, 
  1972.               müssen  bei der Prozedur  WriteWin  die gewünschte  Zeile und 
  1973.               Spalte angegeben werden. 
  1974.  
  1975.                    Procedure OutTextAPI(x,y: Integer; InString: String;
  1976.                                         color, attrib: Byte)
  1977.                    Procedure WriteWin(str: string; x,y: integer;
  1978.                                         color: Byte)
  1979.                                         
  1980.               Ermittlung der Größe eines Zeichens 
  1981.  
  1982.               Die Funktionen  GetFontX und GetFontY  liefern die Ausdehnung 
  1983.               eines Zeichens in Pixeln zurück.  In Verbindung mit der Länge 
  1984.               des  auszugebenden   Textes  können  diese  Funktionen   dazu 
  1985.               verwendet   werden,   die   von   einem   Text   eingenommene 
  1986.               Bildschirmfläche  zu berechnen.   Auf diese  Weise  kann  die 
  1987.               benötigte  Größe  eines  Fensters  zur Textausgabe  berechnet 
  1988.               werden  oder  ein Text  innerhalb  eines  Fensters  zentriert 
  1989.               werden. 
  1990.  
  1991.                    Function GetFontX: Byte
  1992.                    Function GetFontY: Byte
  1993.  
  1994.          Der skalierbare Zeichensatz
  1995.  
  1996.               Der skalierbare Zeichensatz wird beim Start Ihrer Applikation 
  1997.               eingeladen, kostet also zusätzlichen Speicherplatz. Sie haben 
  1998.               die Wahl zwischen zwei verschiedenen Zeichensätzen und müssen 
  1999.               in der Initialisierungsdatei angeben, welchen Zeichensatz Sie 
  2000.               verwenden möchten.  Zur Zeit stehen die Zeichensätze  SIMPLEX 
  2001.               und  GOTHIC  zur  Verfügung,  weitere  Zeichensätze  sind  in 
  2002.               Vorbereitung. 
  2003.  
  2004.               Falls Sie keinen skalierbaren  Zeichensatz benötigen, sollten 
  2005.               Sie  beim  Aufruf  von  OpenMainApplication   als  modus  die 
  2006.               Konstante  APP_NOFONT  übergeben.   In diesem  Fall wird kein 
  2007.               Zeichensatz eingeladen, und Sie sparen Speicherplatz. Sollten 
  2008.  
  2009.  
  2010.  
  2011.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 31
  2012.  
  2013.               Sie trotzdem versuchen, die Prozedur zur Ausgabe skalierbarer 
  2014.               Texte   zu   verwenden,   wird   Ihr   Programm   mit   einem 
  2015.               Laufzeitfehler abbrechen. 
  2016.  
  2017.               Die Prozedur  DrawText  zeichnet  einen Text unter Verwendung 
  2018.               des skalierbaren Zeichensatzes. 
  2019.  
  2020.                    Procedure DrawText(x0,y0,fakx,faky: Integer;
  2021.                                       var str: string; color: Byte)
  2022.                                       
  2023.               Die Parameter FakX und FakY erlauben die unabhängige  Skalie- 
  2024.               rung der Zeichen in beiden Koordinatenachsen. 
  2025.  
  2026.          Weitere Funktionen
  2027.  
  2028.               Neben diesen allgemein verwendbaren  graphischen  Operationen 
  2029.               stellt   der  deLite-Kernel   noch  einige   sehr   spezielle 
  2030.               Funktionen  zur Verfügung, die in erster Linie vom deLite-API 
  2031.               benötigt werden.  Diese meisten dieser Funktionen  werden Sie 
  2032.               nur benötigen, wenn Sie den Leistungsumfang des API erweitern 
  2033.               möchten. 
  2034.  
  2035.               Manipulieren von Bitmaps 
  2036.  
  2037.               Bitmaps  sind  rechteckige  Bildschirmausschnitte.   Mit  der 
  2038.               Prozedur  BitBlit  kann  eine  Kopie  einer  Bitmap  an  eine 
  2039.               beliebige Position auf dem Bildschirm gezeichnet werden.  Die 
  2040.               Ursprungs- und Zielfläche dürfen sich dabei auch überlappen. 
  2041.  
  2042.               Zeichnen von Ikonen
  2043.  
  2044.               Ikonen   sind   vordefinierte    Bitmaps,    die   graphische 
  2045.               Informationen  enthalten.  Dabei  unterscheidet  deLite  zwei 
  2046.               verschiedene Arten von Ikonen. 
  2047.  
  2048.               Systemikonen sind innerhalb des Grafiktreibers  definiert und 
  2049.               enthalten  die  vom  API  benötigten  Symbole.   Dazu  zählen 
  2050.               beispielsweise  die stilisierten  Pfeile, die innerhalb eines 
  2051.               Listendialoges die Schaltflächen zum Verschieben der Auswahl- 
  2052.               markierung kennzeichnen.   Mit Hilfe der Prozedur DrawSysIcon 
  2053.               können solche Ikonen zur Anzeige gebracht werden. 
  2054.  
  2055.                    Procedure DrawSysIcon(ScrX,ScrY: Integer;
  2056.                                          Nr, Attrib: Byte)
  2057.  
  2058.               Sie benötigen Systemikonen  nur, wenn Sie den Leistungsumfang 
  2059.               des API erweitern  möchten.  Es ist nicht möglich, von Pascal 
  2060.               aus weitere Systemikonen  zu definieren.   Im Gegensatz  dazu 
  2061.               stehen  die anwenderdefinierten  Ikonen  zu Ihrer  Verfügung. 
  2062.               Anwenderdefinierte  Ikonen  können  mit  Hilfe  der  Prozedur 
  2063.               DrawNormIcon zur Anzeige gebracht werden. 
  2064.  
  2065.                    Procedure DrawNormIcon(ScrX,ScrY: Integer;
  2066.                                           Dx,Dy:Integer; Typ, Color: Byte;
  2067.                                           Storage: Pointer)
  2068.  
  2069.               Ein  Beispiel  soll  zeigen,  wie  Sie eigene  Ikonen  in Ihr 
  2070.               Programm aufnehmen  können.  Die Beispielprozedur  öffnet ein 
  2071.               Fenster in der Mitte des Bildschirmes  und zeichnet darin das 
  2072.               Logo  der  Technischen   Universität   Berlin.   Das  Fenster 
  2073.               verschwindet  wieder,  nachdem es duch WaitConfirm  bestätigt 
  2074.               wurde. 
  2075.  
  2076.  
  2077.  
  2078.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 32
  2079.  
  2080.  
  2081.                    Type  IcoArray = Record
  2082.                                       DeltaX : Integer;
  2083.                                       DeltaY : Integer;
  2084.                                       IcoArr : Array[0..199] of Byte;
  2085.                                     End;
  2086.  
  2087.                    Const TuB : IcoArray = (DeltaX : 39; DeltaY : 39;
  2088.                                           { Das TU Berlin Logo }
  2089.                                IcoArr :
  2090.                    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  2091.                    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  2092.                    $1f,$ff,$ff,$e0,$00,$3f,$ff,$ff,$f1,$ff,
  2093.                    $7f,$ff,$ff,$f9,$f9,$7f,$ff,$ff,$f9,$f7,
  2094.                    $7f,$ff,$ff,$f9,$f1,$3f,$ff,$ff,$f9,$ff,
  2095.                    $1f,$ff,$ff,$f9,$d1,$00,$00,$0f,$f9,$ff,
  2096.                    $00,$7f,$8f,$f3,$82,$00,$7f,$8f,$f3,$fe,
  2097.                    $00,$7f,$8f,$f3,$ee,$00,$7f,$8f,$f3,$e2,
  2098.                    $00,$7f,$8f,$f3,$fe,$00,$7f,$8f,$f3,$ce,
  2099.                    $00,$7f,$8f,$f3,$d6,$00,$ff,$9f,$f3,$c6,
  2100.                    $00,$ff,$1f,$e7,$fc,$00,$ff,$1f,$e7,$e4,
  2101.                    $00,$ff,$1f,$e7,$d4,$00,$ff,$1f,$e7,$04,
  2102.                    $00,$ff,$1f,$e7,$fc,$00,$ff,$1f,$e7,$fc,
  2103.                    $00,$ff,$1f,$e7,$fc,$01,$ff,$1f,$e7,$fc,
  2104.                    $01,$fe,$3f,$e7,$fc,$01,$fe,$3f,$cf,$fc,
  2105.                    $01,$fe,$3f,$cf,$f8,$01,$fe,$3f,$cf,$f8,
  2106.                    $01,$fe,$3f,$cf,$f8,$01,$fe,$3f,$cf,$f0,
  2107.                    $01,$fe,$1f,$cf,$f0,$01,$fe,$0f,$cf,$e0,
  2108.                    $00,$00,$07,$cf,$c0,$00,$00,$03,$cf,$00,
  2109.                    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00));
  2110.  
  2111.                    Procedure ZeigeTuBLogo;
  2112.                      Begin
  2113.                        OpenWindow((GetMaxX+1) div 2,(GetMaxY+1) div 2,
  2114.                                   (GetMaxX+1) div 2 + 50,
  2115.                                   (GetMaxX+1) div 2 + 50);
  2116.                           
  2117.                        DrawNormIcon(5,5,TuB.DeltaX,TuB.DeltaY,
  2118.                                     1,0,@Tub40.IcoArr);
  2119.                        WaitConfirm;
  2120.                        CloseWindow;
  2121.                      End;
  2122.  
  2123.  
  2124.  
  2125.  
  2126.  
  2127.  
  2128.  
  2129.  
  2130.  
  2131.  
  2132.  
  2133.  
  2134.  
  2135.  
  2136.  
  2137.  
  2138.  
  2139.  
  2140.  
  2141.  
  2142.  
  2143.  
  2144.  
  2145.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 33
  2146.  
  2147.          7 Die Initialisierungsdatei
  2148.  
  2149.               Die Initialisierungsdatei  enthält  Informationen  zur Konfi- 
  2150.               guration Ihrer Applikation  und wird beim Start des Programms 
  2151.               interpretiert.   So kann Ihre Applikation bequem vom Anwender 
  2152.               an unterschiedliche  Umgebungen  angepasst  werden,  ohne neu 
  2153.               übersetzt werden zu müssen. 
  2154.  
  2155.               DeLite entnimmt  der Initialisierungsdatei  unter anderem die 
  2156.               Information, welcher Grafiktreiber zu verwenden ist und wo er 
  2157.               sich befindet.  Ein komfortabler  Satz von Zugriffsprozeduren 
  2158.               erlaubt  es Ihnen, der Initialisierungsdatei  weitere  Infor- 
  2159.               mationen hinzuzufügen  und von Ihrer Applikation  einlesen zu 
  2160.               lassen. 
  2161.  
  2162.               Die Initialisierungsdatei  trägt den Namen Ihrer Applikation, 
  2163.               gefolgt  von  der  Endung  '.INI'.   Sie  ist im ASCII-Format 
  2164.               abgelegt und kann daher leicht mit einem gewöhnlichen  Editor 
  2165.               modifiziert  werden.   Sie können den Editor von Turbo-Pascal 
  2166.               dafür verwenden. 
  2167.  
  2168.          Aufbau der Initialisierungsdatei
  2169.          
  2170.               Die Initialisierungsdatei  ist in Abschnitte gegliedert,  die 
  2171.               jeweils  durch  einen  Blockbezeichner  voneinander  getrennt 
  2172.               sind.  Der Blockbezeichner  muß in eckige Klammern eingefasst 
  2173.               sein. 
  2174.  
  2175.               Innerhalb  der Abschnitte  werden Schlüsselwörter  definiert, 
  2176.               denen ohne Leerschritte  ein Gleichheitszeichen  folgen  muß. 
  2177.               Dem  Gleichheitszeichen   folgt   der  diesem   Schlüsselwort 
  2178.               zugewiesene Parameter. 
  2179.  
  2180.               Ein Semikolon  kennzeichnet  einen  Kommentar.   Der Rest der 
  2181.               Zeile hinter  einem Semikolon  wird nicht mehr interpretiert. 
  2182.               Steht  das  Semikolon  am Beginn  einer  Zeile,  so wird  die 
  2183.               gesamte Zeile ignoriert. 
  2184.  
  2185.               Die  vom  Kernel   gestellten   Zugriffsprozeduren   auf  die 
  2186.               Initialisierungsdatei unterscheiden weder bei den Abschnitts- 
  2187.               bezeichnern, noch bei den Schlüsselwörtern zwischen Groß- und 
  2188.               Kleinschreibung. 
  2189.  
  2190.               Die   Erweiterung   der   Initialisierungsdatei   um   eigene 
  2191.               Abschnitte   und  Schlüsselwörter   unterliegt   keinen  Ein- 
  2192.               schränkungen.   Sie dürfen  auch  den vom System  verwendeten 
  2193.               Abschnitten weitere Schlüsselwörter hinzufügen.  Der folgende 
  2194.               Ausschnitt   einer   Initialisierungsdatei   soll   für   die 
  2195.               Beschreibung der weiteren Abschnitte als Beispiel dienen: 
  2196.  
  2197.                    ;Beispiel einer Initialisierungsdatei
  2198.                          
  2199.                    [paths]
  2200.                    VDIDir=C:\TURBO\DELITE\DRIVER   ;Verzeichnis der Treiber
  2201.                    FontDir=C:\TURBO\DELITE    ;Verzeichnis der Zeichensätze
  2202.                          
  2203.                    [hardware]
  2204.                    Video=VGA                   ;Wählt den Grafiktreiber aus
  2205.                    Font=Simplex                ;Der skalierbare Zeichensatz
  2206.  
  2207.  
  2208.  
  2209.  
  2210.  
  2211.  
  2212.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 34
  2213.  
  2214.                    [Farbtabelle]
  2215.                    ;    Name Farbe     Linientyp
  2216.                    LAYER=    0    15   CONTINUOUS
  2217.                    LAYER=    1    2    CONTINUOUS
  2218.                    LAYER=    2    3    CONTINUOUS
  2219.                    LAYER=    3    15   CONTINUOUS
  2220.                    LAYER=    4    5    CONTINUOUS
  2221.                    LAYER=    5    6    CONTINUOUS
  2222.                    LAYER=    6    14   CONTINUOUS
  2223.                    LAYER=    7    7    CONTINUOUS
  2224.                          
  2225.                    [User]
  2226.                    WelcomeText="Hallo Frank, schön dich zu sehen"
  2227.                                        ;ein String
  2228.                    MaxOpenFiles=10     ;ein LongInt
  2229.  
  2230.          Systemabschnitte
  2231.          
  2232.               Einige   Abschnitte   und   Schlüsselwörter   der   Initiali- 
  2233.               sierungsdatei  werden  vom  System  selbst  zur Konfiguration 
  2234.               verwendet.   Während  die meisten  der Einträge  auch  fehlen 
  2235.               dürfen  und in diesem  Fall durch sinnvolle  Voreinstellungen 
  2236.               ersetzt  werden,  ist  es zum Starten  der deLite-Applikation 
  2237.               zwingend erforderlich, daß der Abschnitt [hardware] vorhanden 
  2238.               ist.  In ihm muß das Schlüsselwort  Video enthalten sein, das 
  2239.               den zu verwendenden Grafiktreiber spezifiziert. Beachten Sie, 
  2240.               daß die Endung '.VDI' nicht mit angegeben werden darf. 
  2241.  
  2242.               Wird  im Abschnitt  [paths]  mit  Hilfe  des  Schlüsselwortes 
  2243.               VDIDir  kein  anderer   Pfad  definiert,   sucht  deLite  den 
  2244.               Grafiktreiber im aktuellen Verzeichnis. 
  2245.  
  2246.               Falls Ihre deLite-Applikation  einen skalierbaren Zeichensatz 
  2247.               benutzt,  so muß dieser  im Abschnitt  [hardware]  hinter dem 
  2248.               Schlüsselwort  Font  angegeben  werden.   Wie bei den Grafik- 
  2249.               treibern  ist  es  auch  für  die  Zeichensätze  möglich,  im 
  2250.               Abschnitt  [paths]  ein anderes als das aktuelle  Verzeichnis 
  2251.               anzugeben.  Der  Pfad  wird  dazu  hinter  dem  Schlüsselwort 
  2252.               FontDir eingetragen. 
  2253.  
  2254.               Das System sucht weiterhin  nach dem Abschnitt  [colors], der 
  2255.               die vom System  verwendeten  Farben definiert.   Fehlt dieser 
  2256.               Abschnitt,   werden  vom  System  geeignete  Voreinstellungen 
  2257.               verwendet. 
  2258.  
  2259.               Die  Speicherverwaltung  von deLite  ist ebenfalls  über  die 
  2260.               Initialisierungsdatei  konfigurierbar.  Im Abschnitt [memory] 
  2261.               kann definiert werden, unter welchen Randbedingungen anstelle 
  2262.               des Heap-Speichers  andere  Speichermedien  verwendet  werden 
  2263.               sollen. 
  2264.  
  2265.               Eine Auflistung aller vom System verwendeten  Abschnitte  und 
  2266.               Schlüsselwörter  sowie deren Voreinstellungen  findet sich im 
  2267.               Anhang A wieder. 
  2268.  
  2269.          Datentypen der Initialisierungsdatei
  2270.          
  2271.               Für die dem Schlüsselwort  folgenden Parameter  stellt deLite 
  2272.               drei Datentypen  zur Verfügung.   Zu jedem Datentyp existiert 
  2273.               eine eigene Zugriffsprozedur. 
  2274.  
  2275.  
  2276.  
  2277.  
  2278.  
  2279.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 35
  2280.  
  2281.               Der Name 
  2282.  
  2283.               Namen sind Zeichenketten,  die ein einzelnes Wort darstellen. 
  2284.               Der Name darf keine Leerzeichen  oder Tabulatoren  enthalten. 
  2285.               In  der  deLite   Terminologie   wird  der  Name   auch   als 
  2286.               ungeschützter  String bezeichnet.  Die Länge eines Namens ist 
  2287.               auf 255 Zeichen begrenzt.   In der Beispieldatei  findet sich 
  2288.               die folgende Namensdefinition: 
  2289.  
  2290.                    VDIDir=C:\DELITE\DRIVER 
  2291.   
  2292.               Der geschützte String 
  2293.  
  2294.               Strings  sind  Zeichenketten,   die  auch  Leerschritte   und 
  2295.               Tabulatoren enthalten dürfen. Sie sind in doppelte Hochkommas 
  2296.               eingerahmt   und  dürfen  selbst  kein  doppeltes   Hochkomma 
  2297.               enthalten.   Die  deLite  Terminologie  verwendet  dafür  den 
  2298.               Begriff  geschützter  String.  Die Beispieldatei  enthält die 
  2299.               Stringdefinition: 
  2300.  
  2301.                    WelcomeText="Hallo Frank, schön Dich zu sehen." 
  2302.  
  2303.               Der LongInt 
  2304.  
  2305.               Der LongInt ist ein ganzzahliger,  numerischer  Wert.  Er ist 
  2306.               identisch  zum  gleichnamigen  Turbo  Pascal  Typ und umfasst 
  2307.               damit den Wertebereich von -2147483648 bis 2147483647. Unsere 
  2308.               Beispieldatei verwendet die LongInt Definition: 
  2309.  
  2310.                    MaxFiles=10 
  2311.               
  2312.          Listen in der Initialisierungsdatei
  2313.          
  2314.               Die bisher behandelten  Einträge in der Initialisierungsdatei 
  2315.               dienten jeweils der Spezifikation eines einzelnen Parameters. 
  2316.               Darüber hinaus bietet deLite die Möglichkeit,  beliebig viele 
  2317.               Parameter gleichen Typs in Form einer Liste zu spezifizieren. 
  2318.  
  2319.               Zur  Definition  einer  Liste  ist das gleiche  Schlüsselwort 
  2320.               innerhalb eines Abschnittes  mehrmals hintereinander  zu ver- 
  2321.               wenden.  Jedes  Auftreten  dieses  Schlüsselwortes  definiert 
  2322.               jeweils einen Eintrag in der Liste. 
  2323.  
  2324.               Zudem  darf  jeder  Eintrag  in der Liste  mehrere  Parameter 
  2325.               enthalten, die auch unterschiedlichen  Datentyps sein dürfen. 
  2326.               Dementsprechend  stellt deLite Prozeduren  zur Verfügung, mit 
  2327.               denen  auf  die  einzelnen   Elemente  eines  Listeneintrages 
  2328.               zugegriffen werden kann. 
  2329.  
  2330.               Die Beispieldatei definiert unter dem Abschnitt [Farbtabelle] 
  2331.               eine  Liste  mit acht Einträgen,  die jeweils  drei Parameter 
  2332.               enthalten.    Die  Parameter   sind  duch  Leerzeichen   oder 
  2333.               Tabulatoren voneinander getrennt. 
  2334.  
  2335.          Benutzung der Initialisierungsdatei
  2336.  
  2337.               Zur Benutzung  der Initialisierungsdatei  stehen dem Anwender 
  2338.               insgesamt  drei  Funktionen   zur  Verfügung.   Zwei  weitere 
  2339.               Funktionen  erlauben  den  Umgang  mit Listen  und werden  im 
  2340.               nächsten Abschnitt beschrieben. 
  2341.  
  2342.               Die  Zugriffsprozeduren  für  die Initialisierungsdatei  sind 
  2343.  
  2344.  
  2345.  
  2346.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 36
  2347.  
  2348.               alle als boolsche Funktionen deklariert.   Ist das Funktions- 
  2349.               ergebnis TRUE, so war die Zugriffsaktion  erfolgreich und der 
  2350.               gesuchte  Parameter  befindet  sich  in  der  als  Variablen- 
  2351.               parameter übergebenen Variable. 
  2352.  
  2353.               Bei nicht erfolgreichem Zugriff auf die Initialisierungsdatei 
  2354.               ist das Funktionsergebnis  FALSE.   In diesem  Fall kann eine 
  2355.               genauere  Analyse  des Fehlers  mit der Funktion  KernelError 
  2356.               erfolgen.   Sie  liefert  ein  Byte,  das  eine  Fehlernummer 
  2357.               enthält.   Die Deklaration  kann  dem Referenzteil  entnommen 
  2358.               werden.   Im Anhang  B befindet  sich eine Liste aller deLite 
  2359.               Fehlernummern.   Die Fehlernummern  des Kernel reihen sich in 
  2360.               diese Liste ein. 
  2361.  
  2362.               Zugriff auf Namen 
  2363.  
  2364.               Für  den  Zugriff  auf  Namen  ist  im  Kernel  die  Funktion 
  2365.               GetInitFileName deklariert: 
  2366.  
  2367.                    Function GetInitFileName(Block: BlockIDString;
  2368.                                            KeyWord: KeyString;
  2369.                                            Var OutVal:ValueString):Boolean;
  2370.  
  2371.               Sie   sucht    in   der   Initialisierungsdatei    nach   dem 
  2372.               Abschnittsbezeicher  Block  und  dem  Schlüsselwort  KeyWord. 
  2373.               Warder   Zugriff   erfolgreich,   befindet   sich   der   dem 
  2374.               Schhlüsselwort  folgende  Name in der als OutVal  übergebenen 
  2375.               Variable.   Mit  der schon  bekannten  Beispieldatei  und dem 
  2376.               folgenden  Programmfragment  lässt  sich  der  zu verwendende 
  2377.               skalierbare Zeichensatz erfragen: 
  2378.  
  2379.                    Procedure WriteFontName;
  2380.                    Var TheFontName : String;
  2381.                       Begin
  2382.                         If GetInitFileName('hardware','Font',TheFontName)
  2383.                         Then
  2384.                           Begin
  2385.                             OpenWindow(0,0,GetFontX*50,GetFontY*4)
  2386.                             WriteWin('Der verwendete Font heißt:',0,1);
  2387.                             WriteWin(TheFontName,0,2);
  2388.                             WaitConfirm;
  2389.                             CloseWindow
  2390.                         Else
  2391.                           ErrWindow(0,0,
  2392.                           'Der Font wurde nicht spezifiziert');
  2393.                       End;
  2394.  
  2395.               Zugriff auf geschützte Strings 
  2396.  
  2397.               Die Funktion  für den Zugriff auf geschützte  Strings ist der 
  2398.               für  den  Zugriff  auf  Namen  sehr  ähnlich.   Beachten  Sie 
  2399.               allerdings,  daß  die  doppelten  Hochkommas  des geschützten 
  2400.               Strings   nicht   Bestandteil   der  in  Outval   übergebenen 
  2401.               Zeichenkette sind: 
  2402.  
  2403.  
  2404.  
  2405.  
  2406.  
  2407.  
  2408.  
  2409.  
  2410.  
  2411.  
  2412.  
  2413.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 37
  2414.  
  2415.                    Function GetInitFileString(Block: BlockIDString;
  2416.                                           KeyWord: KeyString;
  2417.                                           Var OutVal: ValueString):Boolean;
  2418.  
  2419.  
  2420.                    Procedure WriteWelcomeText;
  2421.                    Var WelcomeText : String;
  2422.                      Begin
  2423.                        If GetInitFileString('User',
  2424.                           'WelcomeText',WelcomeText) Then
  2425.                          Begin
  2426.                            OpenWindow(0,0,GetFontX*Length(WelcomeText),
  2427.                                       GetFontY*3);
  2428.                            WriteWin(WelcomeText,0,1);
  2429.                            WaitConfirm;
  2430.                            CloseWindow;
  2431.                          End
  2432.                        Else
  2433.                          ErrWindow(0,0,
  2434.                          'WelcomeText wurde nicht spezifiziert');
  2435.                      End;
  2436.  
  2437.               Zugriff auf LongInts 
  2438.  
  2439.               Die Funktion für den Zugriff auf LongInts  folgt in der Logik 
  2440.               den  beiden   vorangegangenen.    Auch  sie  sucht  nach  dem 
  2441.               Abschnittsbezeichner Block und dem Schlüsselwort KeyWord. Der 
  2442.               in OutVal übergebene  Parameter  allerdings  ist ein LongInt, 
  2443.               wie er in Turbo Pascal deklariert wird. Das folgende Beispiel 
  2444.               zeigt die Verwendung von GetInitFileInteger: 
  2445.  
  2446.                    Function GetInitFileName(Block: BlockIDString;
  2447.                                           KeyWord: KeyString;
  2448.                                           Var OutVal: ValueString):Boolean;
  2449.  
  2450.  
  2451.                    Procedure WriteMaxFiles;
  2452.                    Var MaxFiles : LongInt
  2453.                      Begin
  2454.                        If GetInitFileInteger('User','MaxFiles',MaxFiles)
  2455.                        Then
  2456.                          Begin
  2457.                            OpenWindow(0,0,GetFontX*50,GetFontY*5);
  2458.                            WriteWin('Es dürfen maximal',0,1);
  2459.                            WriteWin(MaxFiles,0,2);
  2460.                            WriteWin('Files geöffnet werden',0,3);
  2461.                            WaitConfirm;
  2462.                            CloseWindow
  2463.                          End  
  2464.                        Else
  2465.                          ErrWindow(0,0,
  2466.                          'MaxFiles wurde nicht spezifiziert');
  2467.                      End;
  2468.  
  2469.  
  2470.  
  2471.  
  2472.  
  2473.  
  2474.  
  2475.  
  2476.  
  2477.  
  2478.  
  2479.  
  2480.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 38
  2481.  
  2482.          Benutzung von Listen
  2483.          
  2484.               Die  Benutzung  von Listen  in der Initialisierungsdatei  ist 
  2485.               schwieriger,  da nicht  von  vornherein  feststeht,  wieviele 
  2486.               Einträge  die  Liste  besitzt.  Da  zudem  ein  Listeneintrag 
  2487.               mehrere Parameter unterschiedlichen Datentyps enthalten kann, 
  2488.               muß der Programmierer vereinbaren, in welcher Reihenfolge die 
  2489.               Parameter angeordnet sein müssen. 
  2490.  
  2491.               Der Zugriff auf die Elemente einer Liste geschieht deshalb in 
  2492.               zwei Schritten.   Im ersten Schritt wird die jeweils  nächste 
  2493.               Zeile der Liste vollständig  eingelesen.   Im zweiten Schritt 
  2494.               wird  die Zeile  in einzelnen  Parameter  zerlegt.   Da jeder 
  2495.               Parameter  von  einem  der drei  Grunddatentypen  sein  kann, 
  2496.               stehen hierfür drei Hilfsfunktionen zur Verfügung. 
  2497.  
  2498.                    Function GetParaName(Var Line,OutVal: String):Boolean;
  2499.                    Function GetParaString(Var Line,OutVal:String):Boolean;
  2500.                    Function GetParaInteger(Var Line: String;
  2501.                                            Var OutVal: LongInt):Boolean;
  2502.  
  2503.  
  2504.                    Function GetInitFileListFirst(Block: BlockIDString;
  2505.                                       KeyWord: KeyString;
  2506.                                       Var OutVal  : ValueString) : Boolean;
  2507.  
  2508.                    Function GetInitFileListNext(KeyWord: KeyString;
  2509.                                           Var OutVal: ValueString):Boolean;
  2510.  
  2511.               GetInitFileListFirst liest die erste Zeile im Abschnitt Block 
  2512.               mit dem Schlüsselwort  KeyWord.   Alle weiteren Zeilen können 
  2513.               durch  wiederholten  Aufruf  von GetInitFileListNext  gelesen 
  2514.               werden.  Das Ende der Liste ist erreicht, sobald die Funktion 
  2515.               den  Wert  FALSE  zurückliefert.   Beachten  Sie,  daß  beide 
  2516.               Funktionen im Variablenparameter OutVal den gesamten nach dem 
  2517.               Schlüsselwort verbleibenden Rest der Zeile zurückliefern. 
  2518.  
  2519.               Diese   Zeile  kann  mit  den  Hilfsfunktionen   GetParaName, 
  2520.               GetParaString  und GetParaInteger  in einzelne Parameter  der 
  2521.               drei Grunddatentypen  zerlegt  werden.   Der auf diese  Weise 
  2522.               gewonnene Parameter wird dabei verbraucht.  Durch mehrmaligen 
  2523.               Aufruf  der Hilfsfunktionen  lassen  sich so aus einer  Zeile 
  2524.               mehrere Parameter beliebigen Datentyps extrahieren. 
  2525.  
  2526.               Das  folgende  Programmbeispiel   zeigt,  wie  ein  Feld  von 
  2527.               Verbundtypen   mit   Werten   aus  der  Initialisierungsdatei 
  2528.               vorbelegt werden kann. Gleichzeitig soll demonstriert werden, 
  2529.               wie sich die Syntax  der vorher  vereinbarten  Listeneinträge 
  2530.               prüfen lässt.  Der diesem Programmfragment  zugrunde liegende 
  2531.               Abschnitt  einer Initialisierungsdatei  ist unserer Beispiel- 
  2532.               datei entnommen.   Der Abschnitt ist dort unter [Farbtabelle] 
  2533.               zu finden. 
  2534.  
  2535.  
  2536.  
  2537.  
  2538.  
  2539.  
  2540.  
  2541.  
  2542.  
  2543.  
  2544.  
  2545.  
  2546.  
  2547.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 39
  2548.  
  2549.                    Type FarbEintrag = Record
  2550.                                         LayerName  : String[15];
  2551.                                         LayerFarbe : Byte;
  2552.                                         LayerTyp   : String[15];
  2553.                                       End;
  2554.                    Type Farbtabelle = Array[0..7] of FarbEintrag;
  2555.                          
  2556.                    Var  DieFarbtabelle : Farbtabelle;
  2557.                         EingabeZeile   : String;
  2558.                         LayerName      : String;
  2559.                         LayerFarbe     : LongInt;
  2560.                         LayerTyp       : String;
  2561.                       
  2562.                    Procedure LiesFarbtabelle;
  2563.                    Var I : Integer;
  2564.                      Begin
  2565.                        I := 0;
  2566.                        If GetInitFileListFirst('Farbtabelle','Layer',
  2567.                        EingabeZeile)Then
  2568.                          Begin
  2569.                            Repeat
  2570.                              If GetParaName(EingabeZeile,LayerName) Then
  2571.                                Begin
  2572.                                  If GetParaInteger(EingabeZeile,LayerFarbe)
  2573.                                  Then
  2574.                                    Begin
  2575.                                      If GetParaName(EingabeZeile,LayerTyp)
  2576.                                      Then
  2577.                                        Begin
  2578.                                          DieFarbTabelle[i].LayerName  :=
  2579.                                             LayerName;
  2580.                                          DieFarbtabelle[i].LayerFarbe :=
  2581.                                             LayerFarbe;
  2582.                                          DieFarbtabelle[i].LayerTyp   :=
  2583.                                             LayerTyp;
  2584.                                        End
  2585.                                      Else ErrWindow(0,0,
  2586.                                   'LayerTyp falsch oder nicht angegeben.');
  2587.                                    End
  2588.                                  Else ErrWindow(0,0,
  2589.                                 'LayerFarbe falsch oder nicht angegeben.');
  2590.                                End
  2591.                              Else ErrWindow(0,0,
  2592.                              'LayerName falsch oder nicht angegeben');
  2593.                              I := I+1;
  2594.                            Until (Not GetInitFileListNext('Layer',
  2595.                                   EingabeZeile)) or (I > 7);
  2596.                          End
  2597.                        Else ErrWindow(0,0,
  2598.                        'Abschnitt oder Schlüsselwortnicht gefunden');
  2599.                      End;
  2600.  
  2601.  
  2602.  
  2603.  
  2604.  
  2605.  
  2606.  
  2607.  
  2608.  
  2609.  
  2610.  
  2611.  
  2612.  
  2613.  
  2614.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 40
  2615.  
  2616.          8 Referenz
  2617.  
  2618.  
  2619.               Dieses  Kapitel  enthält   eine  alphabetische   Liste  aller 
  2620.               Funktionen und Prozeduren des deLite-Toolkit.  Es ist jeweils 
  2621.               angegeben,  in welchem Unit die Prozedur deklariert  ist, wie 
  2622.               die vollständige  Deklaration lautet und welche Bedeutung die 
  2623.               übergebenen  Parameter haben.  In vielen Fällen erläutert ein 
  2624.               Beispiel die Anwendung der Prozedur. 
  2625.  
  2626.          __________________________________________________________________
  2627.          ActivateApplication                                            API
  2628.  
  2629.          Deklaration Procedure ActivateApplication(ID: Integer)
  2630.          
  2631.          Funktion    Reaktiviert den Viewport eines Klienten
  2632.          
  2633.          Parameter   ID           Identifikationsnummer des Klienten
  2634.          
  2635.          Hinweis     
  2636.                      Mausereignisse werden einem Klienten zugeschickt, wenn 
  2637.                      sie innerhalb  seiner Viewports  stattgefunden  haben. 
  2638.                      Mit  der  Prozedur  SuspendApplication  kann  der Dis- 
  2639.                      patcher angewiesen werden, den Viewport eines Klienten 
  2640.                      bei  der  Verteilung  von  Mausereignissen   nicht  zu 
  2641.                      berücksichtigen.  ActivateApplication hebt die Wirkung 
  2642.                      eines Aufrufs von SuspendApplication wieder auf. 
  2643.  
  2644.          Siehe auch  SuspendApplication, GetMainID
  2645.  
  2646.          __________________________________________________________________
  2647.          Arc                                                         Kernel
  2648.  
  2649.          Deklaration Procedure Arc(Mx,My: Integer; PhiA, PhiB,
  2650.                                    radius: Integer; Color: Byte)
  2651.          
  2652.          Funktion    Zeichnet ein Kreissegment
  2653.          
  2654.          Parameter   Mx,My        Koordinaten des Mittelpunktes
  2655.          
  2656.                      PhiA,PhiB    Anfangs- und Endwinkel
  2657.                      
  2658.                      radius       Radius
  2659.                      
  2660.                      Color        Farbe
  2661.                      
  2662.          Hinweis     Die Zeichnung erfolgt im mathematisch positiven Sinn. 
  2663.  
  2664.          Beispiel    Arc(100,100,180,0,100,15) 
  2665.  
  2666.                      zeichnet  die untere Hälfte eines weissen  Kreises  an 
  2667.                      der Position  (100,100)  mit dem Radius  100.   Um die 
  2668.                      obere  Hälfte  eines  Kreises  zu  zeichnen,   müssten 
  2669.                      Anfangs- und Endwinkel vertauscht werden. 
  2670.  
  2671.          Siehe auch  Circle
  2672.  
  2673.          __________________________________________________________________
  2674.          Bar                                                         Kernel 
  2675.  
  2676.          Deklaration Procedure Bar(x1,y1,x2,y2 : Integer; Color : Byte);
  2677.          
  2678.  
  2679.  
  2680.  
  2681.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 41
  2682.  
  2683.          Funktion    Zeichnet eine ausgefüllte rechteckige Fläche
  2684.          
  2685.          Parameter   x1,y1        Koordinaten der linken oberen Ecke
  2686.          
  2687.                      x2,y2        Koordinaten der rechten unteren Ecke
  2688.                      
  2689.                      Color        Farbe
  2690.                      
  2691.          Hinweis     Die Koordinaten der Ecken können vertauscht werden
  2692.  
  2693.  
  2694.          __________________________________________________________________
  2695.          BitBlit                                                     Kernel
  2696.  
  2697.          Deklaration Procedure BitBlit(x1,y1,x2,y2,
  2698.                                        DeltaX,DeltaY : Integer);
  2699.          
  2700.          Funktion    Kopiert  einen  rechteckigen  Bildschirmausschnitt  an 
  2701.                      eine neue Position 
  2702.  
  2703.          Parameter   x1,y1             linke obere Ecke der Ursprungsfläche
  2704.          
  2705.                      x2,y2             linke obere Ecke der Zielfläche
  2706.                      
  2707.                      DeltaX, DeltaY    Grösse der Fläche
  2708.                      
  2709.          Hinweis     Ursprungs- und Zielfläche dürfen sich überlappen.
  2710.         
  2711.          __________________________________________________________________
  2712.          CheckMenuItem                                                  API
  2713.  
  2714.          Deklaration Procedure CheckMenuItem(Menu: hmenu; ID: MenueID; 
  2715.                                              wCheck: MenueFlags)
  2716.                                              
  2717.          Funktion    Setzt oder entfernt  eine Überprüfungsmarke  vor einem 
  2718.                      Menüeintrag 
  2719.  
  2720.          Parameter   Menu         Zeiger auf den Menübaum
  2721.                      
  2722.                      ID           Identifikationsnummer des Menüeintrages
  2723.                      
  2724.                      wCheck       MF_CHECKED oder MF_UNCHECKED
  2725.                      
  2726.          Hinweis     Die Konstanten  MF_CHECKED  und MF_UNCHECKED  sind  im 
  2727.                      Unit API definiert.  Die Angabe von MF_CHECKED bewirkt 
  2728.                      das   Setzen    einer    Überprüfungsmarke,    während 
  2729.                      MF_UNCHECKED  die  Überprüfungsmarke   entfernt.   Die 
  2730.                      Überprüfungsmarke  ist  als Häkchen  links  neben  dem 
  2731.                      Menütext sichtbar. 
  2732.  
  2733.          Beispiel    CheckMenuItem(GetMenu,101,MF_CHECKED)
  2734.         
  2735.                      setzt eine Überprüfungsmarke  vor den Menüeintrag  101 
  2736.                      im Hauptmenü 
  2737.  
  2738.          Siehe auch  EnableMenuItem,      GetMenuFlags,      GetMenuString, 
  2739.                      GetSubMenu, GetMenu, ReplaceMenuItem 
  2740.  
  2741.          __________________________________________________________________
  2742.          Circle                                                      Kernel
  2743.  
  2744.          Deklaration Procedure Circle(Mx,My : Integer; radius : Integer; 
  2745.  
  2746.  
  2747.  
  2748.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 42
  2749.  
  2750.                                       Color : Byte)
  2751.                                       
  2752.          Funktion    Zeichnet einen Kreis
  2753.          
  2754.          Parameter   My,My        Koordinaten des Mittelpunktes
  2755.          
  2756.                      radius       Radius
  2757.          
  2758.                      Color        Farbe
  2759.                      
  2760.          Hinweis     Verzerrungen   durch   das  vom  Monitor   abweichende 
  2761.                      Höhen/Breitenverhältnis    der   Grafikkarte    werden 
  2762.                      korrigiert. 
  2763.  
  2764.          Siehe auch  Arc
  2765.         
  2766.          __________________________________________________________________
  2767.          ClearWindow                                                    API
  2768.  
  2769.          Deklaration Procedure ClearWindow
  2770.          
  2771.          Funktion    Löscht das aktuelle Fenster
  2772.          
  2773.          Hinweis     Einige Grafiktreiber  erlauben die Vereinbarung  einer 
  2774.                      anderen Hintergrundfarbe  als Schwarz.  In diesem Fall 
  2775.                      bewirkt  ein Löschen  des Viewports  die Belegung  des 
  2776.                      Viewports   mit   der   in  der  Initialisierungsdatei 
  2777.                      angegebenen Hintergrundfarbe. 
  2778.  
  2779.          Siehe auch  ClearViewPort
  2780.         
  2781.          __________________________________________________________________
  2782.          CloseListDialog                                                API
  2783.  
  2784.          Deklaration Procedure CloseListDialog
  2785.          
  2786.          Funktion    Schliesst den geöffneten Listendialog
  2787.          
  2788.          Hinweis     Die  Prozedur  überprüft  nicht,  ob  tatsächlich  ein 
  2789.                      Listendialog  geöffnet  war.  Jeder andere,  ebenfalls 
  2790.                      offene Dialog würde genauso geschlossen werden. 
  2791.  
  2792.          Siehe auch  InitListDialog, DoListDialog, UpdateListDialog
  2793.         
  2794.  
  2795.          __________________________________________________________________
  2796.          CloseMainApplication                                           API
  2797.  
  2798.          Deklaration Procedure CloseMainApplication
  2799.          
  2800.          Funktion    Beendet die laufende Anwendung  und schaltet zurück in 
  2801.                      den Textmodus. 
  2802.  
  2803.          Hinweis     Alle  erforderlichen  Deinstallationen  wie  die  Ent- 
  2804.                      fernung des Maus- und des Grafiktreibers und die Frei- 
  2805.                      gabe  allen  belegten  Speicherplatzes  werden  durch- 
  2806.                      geführt.   Ein  Aufruf  von  CloseMainApplication  ist 
  2807.                      üblicherweise   die  letzte  Anweisung  einer  deLite- 
  2808.                      Applikation. 
  2809.  
  2810.          Siehe auch  OpenMainApplication
  2811.         
  2812.  
  2813.  
  2814.  
  2815.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 43
  2816.  
  2817.          __________________________________________________________________
  2818.          CloseSmallDlg                                                  API
  2819.  
  2820.          Deklaration Procedure CloseSmallDlg
  2821.          
  2822.          Funktion    Schliesst einen offen kleinen Dialog
  2823.          
  2824.          Hinweis     Die Prozedur CloseSmallDlg prüft nicht, ob tatsächlich 
  2825.                      ein kleiner  Dialog  offen ist.  Jeder  andere  offene 
  2826.                      Dialog würde ebenfalls geschlossen werden. 
  2827.  
  2828.          Siehe auch  InitSmallDlg, DoSmallDlg
  2829.         
  2830.          __________________________________________________________________
  2831.          CloseSubApplication                                            API
  2832.  
  2833.          Deklaration Procedure CloseSubApplication(ID: Integer)
  2834.          
  2835.          Funktion    Schliesst  eine  Subapplikation.    Der  entsprechende 
  2836.                      Klient wird aus der Klientenliste entfernt. 
  2837.  
  2838.          Parameter   ID           Identifikationsnummer des Klienten
  2839.          
  2840.          Hinweis     Der  vom Viewport  des Klienten  zuvor  belegte  Bild- 
  2841.                      schirmbereich wird nicht wiederhergestellt. 
  2842.  
  2843.          Siehe auch  OpenSubApplication
  2844.         
  2845.          __________________________________________________________________
  2846.          CloseTwinDlg                                                   API
  2847.  
  2848.          Deklaration Procedure CloseTwinDlg
  2849.          
  2850.          Funktion    Schliesst einen geöffneten doppelten Dialog
  2851.          
  2852.          Hinweis     Die Prozedur  CloseTwinDlg  überprüft  nicht,  ob tat- 
  2853.                      sächlich  ein doppelter  Dialog  geöffnet  war.  Jeder 
  2854.                      andere  geöffnete  Dialog würde ebenfalls  geschlossen 
  2855.                      werden. 
  2856.  
  2857.          Siehe auch  InitTwinDlg, DoTwinDlg1, DoTwinDlg2
  2858.         
  2859.          __________________________________________________________________
  2860.          CloseWindow                                                    API
  2861.  
  2862.          Deklaration Procedure CloseWindow
  2863.          
  2864.          Funktion    Schliesst ein mit OpenWindow geöffnetes Fenster
  2865.          
  2866.          Hinweis     Da  auch  alle  Dialogfunktionen   ihre  Fenster   mit 
  2867.                      OpenWindow öffnen, würde CloseWindow auch einen gerade 
  2868.                      offenen Dialog schliessen.   Tatsächlich  bestehen die 
  2869.                      Prozeduren  zum Schliessen  von Dialogen lediglich aus 
  2870.                      einem  Aufruf  von  CloseWindow.  Es  wird  immer  das 
  2871.                      oberste  Fenster  geschlossen.   Dabei  wird der zuvor 
  2872.                      verdeckte Bildschirminhalt wiederhergestellt. 
  2873.  
  2874.          Siehe auch  OpenWindow
  2875.         
  2876.          __________________________________________________________________
  2877.          DisableMoveDetect                                           Kernel
  2878.  
  2879.  
  2880.  
  2881.  
  2882.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 44
  2883.  
  2884.          Deklaration Procedure DisableMoveDetect
  2885.          
  2886.          Funktion    Verbietet die Übermittlung von Mausbewegungen
  2887.          
  2888.          Hinweis     Normalerweise   führen  nicht  nur  Betätigungen   der 
  2889.                      Maustasten,  sondern  auch  die Bewegung  der Maus  zu 
  2890.                      Mausereignissen.  Die Detektion von Mausbewegungen ist 
  2891.                      nur dann notwendig,  wenn ein Programm die Möglichkeit 
  2892.                      bieten  soll,  Objekte  am Bildschirm  mit der Maus zu 
  2893.                      bewegen.  In Programmen,  die diese Eigenschaft  nicht 
  2894.                      ausnutzen,   kann  die  Übermittlung   von  Bewegungs- 
  2895.                      informationen  der Maus mit dieser  Prozedur  verboten 
  2896.                      werden.  Ob eine Mausbewegung  stattgefunden  hat oder 
  2897.                      eine  Taste  betätigt  wurde,  ist bitkodiert  im Feld 
  2898.                      Attrib einer Botschaft vermerkt. 
  2899.  
  2900.          Siehe auch  EnableMoveDetect
  2901.         
  2902.          __________________________________________________________________
  2903.          DispatchMessage                                                API
  2904.  
  2905.          Deklaration Procedure DispatchMessage(TheMessage: EventTyp)
  2906.          
  2907.          Funktion    Schickt eine zuvor mit GetEvent geholte Botschaft  zur 
  2908.                      Weiterleitung an den Dispatcher 
  2909.  
  2910.          Parameter   TheMessage   Die Botschaft
  2911.          
  2912.          Hinweis     Der  Dispatcher   wird  die  Botschaft  an  den  dafür 
  2913.                      zuständigen  Klienten  senden,  indem dessen Empfangs- 
  2914.                      prozedur mit der Botschaft  als übergebenem  Parameter 
  2915.                      aufgerufen  wird.  Mausereignisse  werden dem Klienten 
  2916.                      übermittelt,  in  dessen  Viewport  sie  stattgefunden 
  2917.                      haben. In diesem Fall werden die Koordinaten auf Werte 
  2918.                      relativ   zur  linken   oberen   Ecke   des  Viewports 
  2919.                      umgerechnet.   Andere Ereignisse  werden der Empfangs- 
  2920.                      prozedur der Hauptapplikation zugeschickt.  Sollte ein 
  2921.                      Klient  sich als exclusiver  Klient angemeldet  haben, 
  2922.                      erhält  er auch Mausereignisse,  die sich nicht inner- 
  2923.                      halb  seines  Viewports   abgespielt   haben.   Solche 
  2924.                      Ereignisse  können  nicht  auf  die  Koordinaten   des 
  2925.                      Viewports  bezogen  werden und erhalten  anstelle  der 
  2926.                      Klasse LeMouse die Klasse MouseUnnormalized. 
  2927.  
  2928.         Beispiel     Procedure EventHandler(TheEvent: EventTyp);
  2929.                        Begin
  2930.                          If TheEvent.Class = MouseUnnormalized then
  2931.                            begin
  2932.                              TheEvent.Class := LeMouse;
  2933.                              ContinueToDispatch;
  2934.                              DispatchMessage(TheEvent);
  2935.                            end;
  2936.  
  2937.                      Das  Programmfragment   entstammt  einer  Botschaften- 
  2938.                      empfangsprozedur,  die sich kurzzeitig  als exclusiver 
  2939.                      Klient   angemeldet   hat.   Nachdem   eine  Botschaft 
  2940.                      empfangen wird, die nicht normalisiert werden kann und 
  2941.                      daher eigentlich  einem anderen Klienten  gehört, wird 
  2942.                      der Typ der Botschaft wieder auf LeMouse zurückgesetzt 
  2943.                      und  erneut  dem Dispatcher  gegeben,  nachdem  er mit 
  2944.                      ContinueToDispatch   wieder  aktiviert  wurde.   Soist 
  2945.                      sichergestellt,  daß  die  Botschaft  doch  noch  beim 
  2946.  
  2947.  
  2948.  
  2949.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 45
  2950.  
  2951.                      richtigen  Empfänger  ankommt.  Siehe  auch  GetEvent, 
  2952.                      PostMessage 
  2953.  
  2954.          __________________________________________________________________
  2955.          DoListDialog                                                   API
  2956.  
  2957.          Deklaration Function DoListDialog(rsc: ListDialog; 
  2958.                         var res: NameString; var ThisList: TheList): DlgSet
  2959.                      
  2960.          Funktion    Führt den durch rsc und ThisList  definierten  Listen- 
  2961.                      dialog  aus,  der  zuvor  mit InitListDialog  geöffnet 
  2962.                      wurde. 
  2963.  
  2964.          Parameter   rsc          Der Verbundtyp ListDialog
  2965.          
  2966.                      res          enthält  nach  der Ausführung  den ausge- 
  2967.                                   wählten Eintrag 
  2968.  
  2969.                      ThisList     Ein  Zeiger  auf  einen  Verbund  vom Typ 
  2970.                                   TheListType 
  2971.  
  2972.                      Die Variable rsc muß vor dem Öffnen des Listendialoges 
  2973.                      mit InitListDialog  initialisiert werden.  Die Zeiger- 
  2974.                      variable  ThisList  muß  vor  dem  Öffnen  des Listen- 
  2975.                      dialoges  mit new erzeugt  werden und nach dem Schlie- 
  2976.                      ßen mit dispose freigegeben  werden.  Die dazugehörige 
  2977.                      Verbundvariable  wird  von InitListDialog  belegt  und 
  2978.                      enthält unter anderem die Liste der Einträge. 
  2979.  
  2980.          Ergebnis    
  2981.                      Der zurückgelieferte  Wert vom Typ DlgSet  gibt an, ob 
  2982.                      die Ausführung des Listendialoges erfolgreich war. Der 
  2983.                      Typ DlgSet ist als Aufzählungstyp  deklariert und kann 
  2984.                      folgende Werte annehmen: 
  2985.  
  2986.                      success      Es wurde ein Element ausgewählt.
  2987.                      
  2988.                      escaped      Der Dialog wurde mit ESCAPE verlassen
  2989.                      
  2990.                      empty        Es wurde ein leeres Element ausgewählt
  2991.  
  2992.          Hinweis     Falls das Ergebnis  des Dialoges den Wert escaped hat, 
  2993.                      ist der in res zurückgelieferte String ungültig. 
  2994.  
  2995.         Beispiel    {$F+ }
  2996.                     Procedure GetFirstReport(Var Item: NameString;
  2997.                                              Var eol: boolean);
  2998.                     begin
  2999.                       MyRec.Name := '';
  3000.                       FindFirst(WorkDirectory+'\'+'*.rpt',ReadOnly,MyRec);
  3001.                       If DosError = 0 then eol := false
  3002.                                       else eol := true;
  3003.                       Item := MyRec.Name;
  3004.                      end;
  3005.  
  3006.                      Procedure GetNextReport(Var Item: NameString;
  3007.                                              Var eol: boolean);
  3008.                      begin
  3009.                        FindNext(MyRec);
  3010.                        Item := MyRec.Name;
  3011.                        If DosError = 0  then eol := false
  3012.                                         else eol := true;
  3013.  
  3014.  
  3015.  
  3016.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 46
  3017.  
  3018.                      end;
  3019.                      {$F- }
  3020.  
  3021.                      procedure ViewReport;
  3022.                      Var MyRsc  : ListDialog;
  3023.                          LaList : TheList;
  3024.                          LFname : NameString;
  3025.                          result : DlgSet;
  3026.                          n      : integer;
  3027.                          f      : text;
  3028.                          TheString:string;
  3029.                      begin
  3030.                        MyRsc.text       := 'Report auswählen:';
  3031.                        MyRsc.ItemWidth  := 10;
  3032.                        MyRsc.ListLength := 12;
  3033.                        MyRsc.xorg       :=  20;
  3034.                        MyRsc.yorg       :=  20;
  3035.                        MyRsc.topic      := 'Report';
  3036.                        MyRsc.GetFirst   := GetFirstReport;
  3037.                        MyRsc.GetNext    := GetNextReport;
  3038.                        new(LaList);
  3039.                        InitListDialog(MyRsc,LaList);
  3040.                          repeat
  3041.                            result := DoListDialog(MyRsc,LFname,LaList);
  3042.                            if result = success then
  3043.                              begin
  3044.                                OpenWindow(60,30,60+68*FontX,30 + 16*FontY);
  3045.                                n := -1;
  3046.                                assign(f,WorkDirectory + '\'+ 
  3047.                                       LFname+REPSuffix);
  3048.                                reset(f);
  3049.                                repeat
  3050.                                  n := succ(n);
  3051.                                  readln(f,TheString);
  3052.                                  WriteWin(TheString,1,n,DialogStat);
  3053.                                until eof(f);
  3054.                                close(f);
  3055.                                WaitConfirm;
  3056.                                CloseWindow;
  3057.                              end;
  3058.                          until (result = empty) or (result = escaped);
  3059.                        CloseListDialog;
  3060.                        dispose(LaList);
  3061.                      end;
  3062.  
  3063.  
  3064.                      Die Prozedur ViewReport öffnet einen Listendialog, der 
  3065.                      mit Hilfe der Callback-Prozeduren  GetFirstReport  und 
  3066.                      GetNext-  Report  eine  Liste  aller  Dateien  mit der 
  3067.                      Endung  '.rpt'  an- zeigt.  Bei erfolgreicher  Auswahl 
  3068.                      eines  Eintrages  wird  die  Datei  in  einem  Fenster 
  3069.                      angezeigt. 
  3070.  
  3071.          Siehe auch  InitListDialog, CloseListDialog, UpdateListDialog
  3072.         
  3073.          __________________________________________________________________
  3074.          DoSmallDlg                                                     API
  3075.  
  3076.          Deklaration Function DoSmallDlg(var rsc: SmallDialog;
  3077.                                          var res: DlgStr):DlgSet
  3078.                                          
  3079.          Funktion    Führt den durch rsc spezifizierten, bereits geöffneten 
  3080.  
  3081.  
  3082.  
  3083.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 47
  3084.  
  3085.                      kleinen Dialog aus 
  3086.  
  3087.          Parameter   rsc          Der Verbundtyp SmallDialog
  3088.          
  3089.                      res          enthält nach der Ausführung das Ergebnis
  3090.                      
  3091.          Ergebnis    Der zurückgelieferte  Wert vom Typ DlgSet  gibt an, ob 
  3092.                      die Ausführung des Dialoges erfolgreich  war.  Der Typ 
  3093.                      DlgSet  ist  als  Aufzählungstyp  deklariert  und kann 
  3094.                      folgende Werte annehmen: 
  3095.  
  3096.                      success      Der Dialog wurde erfolgreich ausgeführt
  3097.                      
  3098.                      escaped      Der Dialog wurde mit ESCAPE beendet
  3099.                      
  3100.                      empty        Es wurde ein leerer String eingegeben
  3101.  
  3102.         Hinweis      Der  Verbundtyp  rsc muß vor der Öffnung  des Dialoges 
  3103.                      initialisiert  worden  sein.   Falls das Ergebnis  des 
  3104.                      Dialoges   den  Wert  escaped  hat,  ist  der  in  res 
  3105.                      zurückgelieferte  String ungültig.   Der Wert deflt in 
  3106.                      der Dialogressource wird aktualisiert. 
  3107.  
  3108.         Beispiel     procedure WorkDir;
  3109.                      Var MyRsc : SmallDialog;
  3110.                          Fname : DlgStr;
  3111.                          OldDir: String;
  3112.                          ready : boolean;
  3113.                          result: DlgSet;
  3114.                      begin
  3115.                        ready := false;
  3116.                        MyRsc.text1 := 'Arbeitsverzeichnis wechseln:';
  3117.                        MyRsc.text2 := '';
  3118.                        MyRsc.xorg  := 250;
  3119.                        MyRsc.yorg  := 120;
  3120.                        MyRsc.len   :=  32;
  3121.                        MyRsc.topic := 'Arbeitsverzeichnis';
  3122.                        MyRsc.deflt := WorkDirectory;
  3123.                        GetDir(0,OldDir);
  3124.                        InitSmallDlg(MyRsc);
  3125.                        repeat
  3126.                          result := DoSmallDlg(MyRsc, fname);
  3127.                          if result = success then
  3128.                            begin
  3129.                              (*$i- *)
  3130.                              ChDir(Fname);
  3131.                              (*$i+ *)
  3132.                              if ioresult = 0 then
  3133.                                Begin
  3134.                                  ready := true;
  3135.                                  WorkDirectory := Fname;
  3136.                                  UpString(WorkDirectory);
  3137.                                End
  3138.                              else
  3139.                                ErrWindow(MyRsc.xorg+10,
  3140.                                          MyRsc.yorg+32,'Falscher Pfad');
  3141.                              ChDir(OldDIr);
  3142.                            end;
  3143.                        until ready or (result = escaped);
  3144.                        CloseSmallDlg;
  3145.                      end;
  3146.  
  3147.  
  3148.  
  3149.  
  3150.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 48
  3151.  
  3152.                      Das Beispielprogramm belegt die globale Variable Work- 
  3153.                      Directory  mit einer  neuen,  mit Hilfe  eines kleinen 
  3154.                      Dialoges  einzulesenden  Pfadangabe.   Der Dialog wird 
  3155.                      solange aufge- rufen, bis ein gültiger Pfad eingegeben 
  3156.                      wurde oder der Dialog  mit ESCAPE  abgebrochen  wurde. 
  3157.                      Ein Fehlerfenster  weist ggf.  auf eine ungültige Ein- 
  3158.                      gabe  hin.   Getestet  wird der neu eingegebene  Pfad, 
  3159.                      indem mit Hilfe der Turbo-Pascal  Prozedur  ChDir ver- 
  3160.                      sucht wird, das aktuelle  Verzeichnis  auf den Pfad zu 
  3161.                      setzen.   Das vorher gesetzte  Verzeichnis  wird zuvor 
  3162.                      geholt und am Ende wieder gesetzt. 
  3163.  
  3164.          Siehe auch  InitSmallDlg, CloseSmallDlg
  3165.         
  3166.          __________________________________________________________________
  3167.          DoTwinDlg1                                                     API
  3168.  
  3169.          Deklaration Function DoTwinDlg1(var rsc: TwinDialog;
  3170.                                          var res: DlgStr):DlgSet
  3171.                                          
  3172.          Funktion    Führt den ersten  Teil eines durch rsc spezifizierten, 
  3173.                      zuvor geöffneten doppelten Dialoges aus 
  3174.  
  3175.          Parameter   rsc          Der Verbundtyp TwinDialog
  3176.          
  3177.                      res          enthält nach der Ausführung das Ergebnis
  3178.                      
  3179.          Ergebnis    Der zurückgelieferte  Wert vom Typ DlgSet  gibt an, ob 
  3180.                      die Ausführung des Dialoges erfolgreich  war.  Der Typ 
  3181.                      DlgSet  ist  als  Aufzählungstyp  deklariert  und kann 
  3182.                      folgende Werte annehmen: 
  3183.  
  3184.                      success      Der Dialog wurde erfolgreich ausgeführt
  3185.                      
  3186.                      escaped      Der Dialog wurde mit ESCAPE beendet
  3187.                      
  3188.                      empty        Es wurde ein leerer String eingegeben
  3189.                      
  3190.          Hinweis     Der  Verbundtyp  rsc muß vor der Öffnung  des Dialoges 
  3191.                      initialisiert  worden  sein.   Falls das Ergebnis  des 
  3192.                      Dialoges   den  Wert  escaped  hat,  ist  der  in  res 
  3193.                      zurückgelieferte String ungültig. 
  3194.  
  3195.         Beispiel     MyRsc.text1   := 'Wertebereich eingeben:';
  3196.                      MyRsc.text2   := 'Anfangswert [Volt]';
  3197.                      MyRsc.text3   := 'Endwert [Volt]';
  3198.                      MyRsc.deflt1  := '0';
  3199.                      MyRsc.deflt2  := '0';
  3200.                      MyRsc.topic1  := 'Spannung A';
  3201.                      MyRsc.topic2  := 'Spannung E';
  3202.                      MyRsc.xorg    := 220;
  3203.                      MyRsc.yorg    :=  80;
  3204.                      MyRsc.len     :=  18;
  3205.                      InitTwinDlg(MyRsc2);
  3206.                      level := 0;
  3207.                      repeat
  3208.                        if level = 0 then
  3209.                          If DoTwinDlg1(MyRsc,va) then level := 1
  3210.                                                  else level := -1;
  3211.  
  3212.                        if Level = 1 then
  3213.                          If DoTwinDlg2(MyRsc,ve) then
  3214.  
  3215.  
  3216.  
  3217.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 49
  3218.  
  3219.                            begin
  3220.                              level := 2;
  3221.                              result := success;
  3222.                            end
  3223.                          else level := 0;
  3224.                      until (level = 2) or (level = -1);
  3225.                      CloseTwinDlg;
  3226.                      if level = 2 then { ... }
  3227.  
  3228.                      Das  Beispiel   zeigt  die  Anwendung   des  doppelten 
  3229.                      Dialoges  für die Eingabe  eines  Intervalls.   Da der 
  3230.                      doppelte  Dialog eigentlich  aus zwei kleinen Dialogen 
  3231.                      in   einem   einzigen   Fenster   besteht,   muß   der 
  3232.                      Programmierer  selbst sicherstellen daß die Dialoge in 
  3233.                      der richtigen Reihenfolge aufgerufen werden und daß es 
  3234.                      möglich  ist, mit ESCAPE  vom zweiten  Dia- log in den 
  3235.                      ersten zurückzuwechseln. 
  3236.  
  3237.          Siehe auch  InitTwinDlg, DoTwinDlg2, CloseTwinDlg
  3238.         
  3239.          __________________________________________________________________
  3240.          DoTwinDlg2                                                     API
  3241.  
  3242.          Deklaration Function DoTwinDlg2(var rsc: TwinDialog; 
  3243.                                          var res: DlgStr):DlgSet
  3244.                                          
  3245.          Funktion    Führt den zweiten Teil eines durch rsc spezifizierten, 
  3246.                      zuvor geöffneten doppelten Dialoges aus 
  3247.  
  3248.          Parameter   rsc          Der Verbundtyp TwinDialog
  3249.          
  3250.                      res          enthält nach der Ausführung das Ergebnis
  3251.                      
  3252.          Ergebnis    Der zurückgelieferte  Wert vom Typ DlgSet  gibt an, ob 
  3253.                      die Ausführung des Dialoges erfolgreich  war.  Der Typ 
  3254.                      DlgSet  ist  als  Aufzählungstyp  deklariert  und kann 
  3255.                      folgende Werte annehmen: 
  3256.  
  3257.                      success      Der Dialog wurde erfolgreich ausgeführt
  3258.                      
  3259.                      escaped      Der Dialog wurde mit ESCAPE beendet
  3260.                      
  3261.                      empty        Es wurde ein leerer String eingegeben
  3262.                      
  3263.          Hinweis     Der  Verbundtyp  rsc muß vor der Öffnung  des Dialoges 
  3264.                      initialisiert  worden  sein.   Falls das Ergebnis  des 
  3265.                      Dialoges   den  Wert  escaped  hat,  ist  der  in  res 
  3266.                      zurückgelieferte String ungültig. 
  3267.  
  3268.          Siehe auch  InitTwinDlg, DoTwinDlg1, CloseTwinDlg
  3269.         
  3270.          __________________________________________________________________
  3271.          DoYesNoDialog                                                  API
  3272.  
  3273.          Deklaration Function DoYesNoDialog(rsc: YesNoDialog):boolean
  3274.          
  3275.          Funktion    Führt einen booleschen Dialog aus
  3276.          
  3277.          Parameter   rsc          Der Verbundtyp YesNoDialog
  3278.          
  3279.                      Der Typ YesNoDialog ist im API wie folgt definiert: 
  3280.  
  3281.  
  3282.  
  3283.  
  3284.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 50
  3285.  
  3286.                      TYPE YesNoDialog = record
  3287.                                           text   : DlgStr;
  3288.                                           xorg   : integer;
  3289.                                           yorg   : integer;
  3290.                                           topic  : namestring;
  3291.                                           NoSpot : HotSpot;
  3292.                                           YesSpot: HotSpot;
  3293.                                         end;
  3294.  
  3295.                      Die Bedeutung der zu belegenden Einträge lautet 
  3296.  
  3297.                      text         Titel des Dialoges
  3298.                      
  3299.                      xorg,yorg    Position   der  linken  oberen  Ecke  des 
  3300.                                   Dialoges 
  3301.  
  3302.                      topic        Das Stichwort für die Hilfsfunktion
  3303.                      
  3304.                      Die  Einträge  NoSpot  und YesSpot  werden  vom System 
  3305.                      belegt.  Der Titel des Dialoges erscheint oberhalb der 
  3306.                      Schaltflächen  und  sollte  die  mit Ja oder  Nein  zu 
  3307.                      beantwortende Frage beinhalten. 
  3308.  
  3309.          Ergebnis    Das  Ergebnis  des  Dialoges   wird  unmittelbar   als 
  3310.                      boolescher Wert mitgeteilt 
  3311.  
  3312.          Hinweis     Die  Funktion  DoYesNoDialog  bietet  dem Anwender  in 
  3313.                      einem Fenster zwei Schaltflächen  mit der Beschriftung 
  3314.                      Ja und Nein an, aus denen er eine Auswahl mit der Maus 
  3315.                      oder der Tastatur  treffen  kann.  Wird der Dialog mit 
  3316.                      ESCAPE  verlassen,  entspricht  das  der  Auswahl  der 
  3317.                      Schaltfläche  Nein.  Dieser  Dialog  muß nicht manuell 
  3318.                      geöffnet oder geschlossen  werden, sondern führt diese 
  3319.                      Funktionen selbst aus. 
  3320.  
  3321.         Beispiel     Procedure DoQuit
  3322.                      Var MyRsc : YesNoDialog;
  3323.                      Begin
  3324.                        MyRsc.text := 'Programm beenden?';
  3325.                        MyRsc.xorg := 100;
  3326.                        MyRsc.yorg := 100;
  3327.                        MyRsc.topic := 'Quit';
  3328.                        If DoYesNoDialog(MyRsc) then quit := true;
  3329.                      End;
  3330.  
  3331.          __________________________________________________________________
  3332.          DrawNormIcon                                                Kernel
  3333.  
  3334.          Deklaration Procedure DrawNormIcon(ScrX,ScrY, 
  3335.                       Dx, Dy : Integer; Typ, Color: Byte; Storage: Pointer)
  3336.                       
  3337.          Funktion    Zeichnet ein anwenderdefiniertes Icon
  3338.          
  3339.          Parameter   ScrX, ScrY        Position der linken oberen Ecke
  3340.          
  3341.                      Dx, Dy            Ausmasse des Icons in Pixeln
  3342.                      
  3343.                      Typ               Zur  Zeit  wird  nur der Typ 1  ver-
  3344.                                        wendet
  3345.                                        
  3346.                      Color             Zeichenfarbe des Icons   
  3347.                      
  3348.  
  3349.  
  3350.  
  3351.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 51
  3352.  
  3353.                      Storage           Zeiger auf die Bitmap des Icons
  3354.                      
  3355.          Hinweis     Icons sind bitweise  abgelegte,  monochrome  Grafiken, 
  3356.                      deren einzelnen  Zeilen immer auf Byte-Grenzen  enden. 
  3357.                      Der  Parameter  Typ  ist für zukünftige  Erweiterungen 
  3358.                      vorgesehen.  Es wird zur Zeit nur der Typ 1 verwendet. 
  3359.                      Dieser  Typ gibt an, daß das Icon mit der Zeichenfarbe 
  3360.                      Color in die Grafik geschrieben wird. 
  3361.  
  3362.                      Das Beispiel  zeigt  eine Prozedur,  die das Logo  der 
  3363.                      Tech- nischen Universität Berlin in ein Fenster in die 
  3364.                      Mitte  des  Bildschirms   zeichnet   und  danach   auf 
  3365.                      Bestätigung  wartet.   Die  Konstantendefinition   TuB 
  3366.                      enthält die Bitmap des Logos.
  3367.                      
  3368.          Beispiel    Type IcoArray = Record 
  3369.                                        DeltaX :  Integer;
  3370.                                        DeltaY :  Integer;
  3371.                                        IcoArr :  Array[0..199] of Byte;
  3372.                                      End; 
  3373.  
  3374.                      Const TuB : IcoArray = (DeltaX : 39; DeltaY : 39;
  3375.                      { Das TU Berlin Logo } IcoArr :
  3376.                      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  3377.                      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
  3378.                      $1f,$ff,$ff,$e0,$00,$3f,$ff,$ff,$f1,$ff,
  3379.                      $7f,$ff,$ff,$f9,$f9,$7f,$ff,$ff,$f9,$f7,
  3380.                      $7f,$ff,$ff,$f9,$f1,$3f,$ff,$ff,$f9,$ff,
  3381.                      $1f,$ff,$ff,$f9,$d1,$00,$00,$0f,$f9,$ff,
  3382.                      $00,$7f,$8f,$f3,$82,$00,$7f,$8f,$f3,$fe,
  3383.                      $00,$7f,$8f,$f3,$ee,$00,$7f,$8f,$f3,$e2,
  3384.                      $00,$7f,$8f,$f3,$fe,$00,$7f,$8f,$f3,$ce,
  3385.                      $00,$7f,$8f,$f3,$d6,$00,$ff,$9f,$f3,$c6,
  3386.                      $00,$ff,$1f,$e7,$fc,$00,$ff,$1f,$e7,$e4,
  3387.                      $00,$ff,$1f,$e7,$d4,$00,$ff,$1f,$e7,$04,
  3388.                      $00,$ff,$1f,$e7,$fc,$00,$ff,$1f,$e7,$fc,
  3389.                      $00,$ff,$1f,$e7,$fc,$01,$ff,$1f,$e7,$fc,
  3390.                      $01,$fe,$3f,$e7,$fc,$01,$fe,$3f,$cf,$fc,
  3391.                      $01,$fe,$3f,$cf,$f8,$01,$fe,$3f,$cf,$f8,
  3392.                      $01,$fe,$3f,$cf,$f8,$01,$fe,$3f,$cf,$f0,
  3393.                      $01,$fe,$1f,$cf,$f0,$01,$fe,$0f,$cf,$e0,
  3394.                      $00,$00,$07,$cf,$c0,$00,$00,$03,$cf,$00,
  3395.                      $00,$00,$00,$00,$00,$00,$00,$00,$00,$00));
  3396.  
  3397.                      Procedure ZeigeTuBLogo;
  3398.                      Begin
  3399.                        OpenWindow((GetMaxX+1) div 2,(GetMaxY+1) div 2,
  3400.                                   (GetMaxX+1) div 2 + 50,
  3401.                                   (GetMaxX+1) div 2 + 50);
  3402.                        DrawNormIcon(5,5,TuB.DeltaX,TuB.DeltaY,1,0,
  3403.                                     @Tub40.IcoArr);
  3404.                        WaitConfirm;
  3405.                        CloseWindow;
  3406.                      End;
  3407.  
  3408.          Siehe auch  DrawSysIcon
  3409.  
  3410.          __________________________________________________________________
  3411.          DrawSysIcon                                                 Kernel 
  3412.  
  3413.          Deklaration Procedure DrawSysIcon(ScrX, ScrY : Integer; 
  3414.                                            Nr, Attrib: Byte)
  3415.  
  3416.  
  3417.  
  3418.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 52
  3419.  
  3420.                                            
  3421.          Funktion    Zeichnet eines der Systemicons
  3422.          
  3423.          Parameter   ScrX, ScrY   Position der linken oberen Ecke
  3424.          
  3425.                      Nr           Nummer des Systemicons
  3426.                      
  3427.                      Attrib       Attribut des Systemicons
  3428.                      
  3429.          Hinweis     deLite besitzt  ein Reihe vordefinierter  Systemicons, 
  3430.                      die in erster Linie vom API selbst benutzt werden. Ein 
  3431.                      Beispiel für die Verwendung der Systemicons  sind z.B. 
  3432.                      die  Pfeile  am Scrollbar  des Listdialoges.   Für das 
  3433.                      Attribut   werden  derzeit  nur  die  Werte  0  und  1 
  3434.                      verwendet. Dabei beteudet 
  3435.  
  3436.                      Attrib=0     Systemicon  wird in der Farbe Schwarz auf 
  3437.                                   weissen Hintergrund gezeichnet. 
  3438.  
  3439.                      Attrib=1     Systemicon  wird in der Farbe  Weiss  auf 
  3440.                                   schwarzem Hintergrund gezeichnet (inverse 
  3441.                                   Darstellung). 
  3442.  
  3443.                      Das Beispiel  zeichnet  das Systemicon  Nummer  0 (den 
  3444.                      Pfeil  nach  oben)  in  die  linke,   obere  Ecke  des 
  3445.                      aktuellen  ViewPort.  Das  Icon  wird  dabei  mit  dem 
  3446.                      Attribut  0,  also  Schwarz  auf  weissem  Hintergrund 
  3447.                      gezeichnet. 
  3448.  
  3449.          Beispiel    DrawSysIcon(0,0,0,0);
  3450.  
  3451.          Siehe auch  DrawNormIcon
  3452.  
  3453.          __________________________________________________________________
  3454.          DrawText                                                    Kernel
  3455.  
  3456.          Deklaration Procedure DrawText(X0, Y0, FakX, FakY: Integer; 
  3457.                                         Var Str: String; color: Byte)
  3458.                                         
  3459.          Funktion    Zeichnet  einen  Text  mit  Hilfe  eines  skalierbaren 
  3460.                      Zeichensatzes 
  3461.  
  3462.          Parameter   X0, Y0       Startposition
  3463.          
  3464.                      FakX, FakY   Skalierungsfaktoren  für die Ausgabe  der 
  3465.                                   Buchstaben 
  3466.  
  3467.                      Str          Der zu zeichnende Text
  3468.                      
  3469.                      color        Die Farbe des Textes
  3470.                      
  3471.          Hinweis     Die von deLite verwendeten  skalierbaren  Zeichensätze 
  3472.                      können  durch  die  Angabe  von FakX  und FakY  in den 
  3473.                      Richtungen  der  beiden  Hauptachsen  unabhängig  von- 
  3474.                      einander skaliert werden. Die Faktoren geben dabei die 
  3475.                      Höhe  und  Breite  der  Buchstaben  in Pixeln  auf dem 
  3476.                      Bildschirm an.  Der Wertebereich  dieser Faktoren muss 
  3477.                      innerhalb der Grenzen von 1 - 512 liegen. Das Beispiel 
  3478.                      gibt den Text 'Hello, world' in der Farbe Weiss in der 
  3479.                      linken  oberen Ecke des aktuellen  ViewPort  aus.  Die 
  3480.                      Höhe der Zeichen beträgt 32 Pixel auf dem Bildschirm. 
  3481.  
  3482.  
  3483.  
  3484.  
  3485.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 53
  3486.  
  3487.          Beispiel    DrawText(0,0,32,32,'Hello, world',15)
  3488.          
  3489.          Siehe auch  InitFont
  3490.  
  3491.          __________________________________________________________________
  3492.          EnableMenuItem                                                 API
  3493.  
  3494.          Deklaration Procedure EnableMenuItem(Menu: hMenu; ID: MenuID; 
  3495.                                               wEnable: MenuFlags)
  3496.                                               
  3497.          Funktion    Sperrt oder erlaubt die Auswahl eines Menüeintrages
  3498.          
  3499.          Parameter   Menu         Zeiger auf das Menü
  3500.          
  3501.                      ID           ID des Menüeintrages
  3502.                      
  3503.                      wEnable      kann einen der folgenden Werte annehmen
  3504.                      
  3505.                      MF_ENABLED   erlaubt die Auswahl des Eintrags
  3506.                      
  3507.                      MF_DISABLED  sperrt die Auswahl des Eintrags
  3508.                      
  3509.          Hinweis     Gesperrte  Menüeinträge  werden  optisch  entsprechend 
  3510.                      gekennzeichnet. Die kontextabhängige Hilfe bleibt auch 
  3511.                      für gesperrte Menüeinträge funktionsfähig. 
  3512.  
  3513.          Beispiel   EnableMenuItem(GetMenu,101,MF_DISABLED);
  3514.          
  3515.                     sperrt den Eintrag 101 im Hauptmenü
  3516.                     
  3517.          Siehe auch  GetMenu, GetMenuFlags,CheckMenuItem
  3518.  
  3519.          __________________________________________________________________
  3520.          EnableMoveDetect                                            Kernel
  3521.  
  3522.          Deklaration Procedure EnableMoveDetect
  3523.          
  3524.          Funktion    erlaubt die Meldung von Mausbewegungen
  3525.          
  3526.          Hinweis     Hebt  die Wirkung  von DisableMoveDetect  auf.  Danach 
  3527.                      werden Bewegungen der Maus wieder gemeldet. 
  3528.  
  3529.          Siehe auch  DisableMoveDetect, GetEvent
  3530.  
  3531.          __________________________________________________________________
  3532.          ErrWindow                                                      API
  3533.  
  3534.          Deklaration Procedure ErrWindow(x,y: Integer; errtext: String)
  3535.          
  3536.          Funktion    Gibt einen Text in einem Fenster als Fehlermeldung aus
  3537.          
  3538.          Parameter   x,y          Position des Fensters
  3539.          
  3540.                      errtext      Die Fehlermeldung
  3541.                      
  3542.          Hinweis     Fehlermeldungen  werden  von dieser Prozedur  in einem 
  3543.                      Fenster  mit  der Hintergrundfarbe  ErrBkColor  ausge- 
  3544.                      geben.  Diese Farbe ist standardmässig  rot, kann aber 
  3545.                      in der Initialisierungsdatei  umdefiniert werden.  Die 
  3546.                      Prozedur ErrWindow wartet nach dem Öffnen des Fensters 
  3547.                      und der Ausgabe  des Textes  auf eine Bestätigung  des 
  3548.                      Benutzers.   Mit einer der Maustasten bzw.  ENTER oder 
  3549.  
  3550.  
  3551.  
  3552.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 54
  3553.  
  3554.                      ESCAPE kann das Fenster entfernt werden. 
  3555.  
  3556.          Siehe auch  OpenWindow, WriteWin, SysWindow
  3557.  
  3558.          __________________________________________________________________
  3559.          FlushQueue                                                  Kernel
  3560.  
  3561.          Deklaration Procedure FlushQueue
  3562.          
  3563.          Funktion    verwirft alle Einträge der Botschaftenwarteschlange
  3564.          
  3565.          Hinweis     Während der Ausführung zeitaufwendiger  Programmteile, 
  3566.                      in denen längere  Zeit keine Botschaften  mit GetEvent 
  3567.                      geholt  werden,  kann  es sein,  daß die  Botschaften- 
  3568.                      warteschlange komplett gefüllt wird. Ohne einen Aufruf 
  3569.                      von  FlushQueue  würden  die  zwischenzeitlich   ange- 
  3570.                      fallenen Botschaften  danach abgearbeitet  werden.  In 
  3571.                      Situationen,  in denen  das unerwünscht  ist, kann ein 
  3572.                      Aufruf  von FlushQueue  die Warteschlange  vollständig 
  3573.                      löschen 
  3574.  
  3575.          Siehe auch  GetEvent
  3576.  
  3577.          __________________________________________________________________
  3578.          FrameSubApplication                                            API
  3579.  
  3580.          Deklaration Procedure FrameSubApplication(ID, color: Integer)
  3581.          
  3582.          Funktion    Zeichnet einen Rahmen um den Viewport eines Klienten
  3583.          
  3584.          Parameter   ID           Identifikationsnummer des Klienten
  3585.          
  3586.                      color        Farbe des Rahmens
  3587.                      
  3588.          Hinweis     Bei  der Aufteilung  der Bildschirmfläche  auf mehrere 
  3589.                      Klienten  kann es sinnvoll  sein, den jeweils  aktiven 
  3590.                      Klienten    zu    kennzeichnen.    Mit    Hilfe    von 
  3591.                      FrameSubApplication  kann die Farbe der Rahmen  um die 
  3592.                      Viewports  der einzelnen Klienten individuell  gesetzt 
  3593.                      werden 
  3594.  
  3595.          Siehe auch  OpenSubApplication
  3596.  
  3597.          __________________________________________________________________
  3598.          GetDriverName                                               Kernel
  3599.  
  3600.          Deklaration Function GetDriverName: String
  3601.          
  3602.          Funktion    liefert den Namen des benutzten Grafiktreibers
  3603.          
  3604.          Ergebnis    Der Name des Grafiktreibers  wird  als String  zurück- 
  3605.                      geliefert 
  3606.  
  3607.         Hinweis      Jeder Grafiktreiber ist mit einem Namen versehen.  Für 
  3608.                      die Standardgrafikadapter  sind die Namen EGA, VGA und 
  3609.                      HGC  definiert   worden,   Grafikkarten   mit  höherer 
  3610.                      Auflösung  enthalten  in der  Regel  zusätzlich  einen 
  3611.                      Hinweis   auf  die  Auflösung   und  die  Anzahl   der 
  3612.                      verfügbaren Farben. 
  3613.  
  3614.          __________________________________________________________________
  3615.          GetEvent                                                    Kernel
  3616.  
  3617.  
  3618.  
  3619.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 55
  3620.  
  3621.  
  3622.          Deklaration Procedure GetEvent(Var Event : EventTyp)
  3623.          
  3624.          Funktion    liefert  das nächste  Ereignis  aus der Ereigniswarte- 
  3625.                      schlange 
  3626.  
  3627.          Parameter   Event        Das Ereignis
  3628.          
  3629.          Hinweis  
  3630.                      Der Verbundtyp  EventTyp beschreibt  die innerhalb des 
  3631.                      Systems  auftretenden   Ereignisse   und  Botschaften. 
  3632.                      Während  Ereignisse   unmittelbar   von  der  Hardware 
  3633.                      erzeugt werden, dienen Botschaften  dem Austausch  von 
  3634.                      Informationen  zwischen den einzelnen Klienten und dem 
  3635.                      deLite API.  Botschaften werden z.B. erzeugt, wenn ein 
  3636.                      Menüpunkt ausgewählt wird. 
  3637.  
  3638.                      Type EventTypes = (LeMouse, MouseUnNormalized,
  3639.                                         NormKey, AltKey, CtrlKey, FKey,
  3640.                                         Menu, DoRedraw, void);
  3641.  
  3642.                           EventTyp   = Record
  3643.                                          Class  : EventTypes;
  3644.                                                   { Art des Events }
  3645.                                          Attrib : char;      
  3646.                                          x,y    : integer;   
  3647.                                                   { wo ist es passiert }
  3648.                                        End;
  3649.  
  3650.                      Die Verbundkomponente  Class enthält die Art des Erei- 
  3651.                      gnisses oder der Botschaft.  Abhängig von ihrem Inhalt 
  3652.                      werden  die folgenden  drei Verbundkomponenten  unter- 
  3653.                      schiedlich interpretiert.   Hat das Ereignis etwa eine 
  3654.                      räumliche  Bedeutung,  wie es bei Mausereignissen  der 
  3655.                      Fall  ist,  so geben  die Felder  x und y den Ort  des 
  3656.                      Ereignisses an. Die folgende Auflistung beschreibt die 
  3657.                      Bedeutung   der   einzelnen   Verbundkomponenten    in 
  3658.                      Abhängigkeit  von Class.  Die jeweils  nicht beschrie- 
  3659.                      benen Verbundkomponenten haben keine Bedeutung. 
  3660.  
  3661.                      LeMouse      Ein Mausereignis ist aufgetreten.  Attrib 
  3662.                                   enthält  bitweise  kodiert den Status der 
  3663.                                   Maustasten.  Die Verbundkomponenten x und 
  3664.                                   y enthalten  die Position  des Mausereig- 
  3665.                                   nisses.    Die  Mausereignisse   vom  Typ 
  3666.                                   LeMouse sind normaliesiert, das heißt sie 
  3667.                                   sind relativ  zur linken  oberen Ecke des 
  3668.                                   Viewports des empfangenden Klienten.  Die 
  3669.                                   einzelnen   Bits   der  Verbundkomponente 
  3670.                                   Attrib haben die folgende Bedeutung: 
  3671.  
  3672.                                   $01 = Die Maus hat sich bewegt
  3673.                                   $02 = Linke Maustaste wurde gedrückt
  3674.                                   $04 = Linke Maustaste wurde losgelassen
  3675.                                   $08 = Rechte Maustaste wurde gedrückt
  3676.                                   $10 = Rechte Maustaste wurde losgelassen
  3677.                                   $20 = Mittl. Maustaste wurde gedrückt
  3678.                                   $40 = Mittl. Maustaste wurde losgelassen
  3679.  
  3680.                      MouseUnnormalized      Ein  Mausereignis   ist  aufge- 
  3681.                                   treten.  Für die Verbundkomponente Attrib 
  3682.                                   gilt  das gleiche  wie bei LeMouse.   Die 
  3683.  
  3684.  
  3685.  
  3686.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 56
  3687.  
  3688.                                   Verbundkomponenten  x und y enthalten die 
  3689.                                   Position des Mausereignisses.  Das Ereig- 
  3690.                                   nis  konnte  nicht  normalisiert  werden, 
  3691.                                   fand  also  außerhalb  des Viewports  des 
  3692.                                   empfangenden Klienten statt. 
  3693.  
  3694.                      NormKey      Ein normale  Taste wurde  gedrückt.   Die 
  3695.                                   Verbundkomponente   Attrib  enthält   den 
  3696.                                   ASCII Wert der gedrückten Taste. 
  3697.  
  3698.                      AltKey       Ein  Taste  wurde  in Verbindung  mit der 
  3699.                                   Taste Alt gedrückt.   Attrib enthält  den 
  3700.                                   ASCII Wert der gedrückten Taste. 
  3701.  
  3702.                      CtrlKey      Eine Taste  wurde  in Verbindung  mit der 
  3703.                                   Taste Ctrl gedrückt.   Attrib enthält den 
  3704.                                   ASCII Wert der gedrückten Taste. Beachten 
  3705.                                   Sie, daß die Taste RETURN als CtrlKey mit 
  3706.                                   Attrib=m übergeben wird. 
  3707.  
  3708.                      Fkey         Eine   Funktionstaste   wurde   gedrückt. 
  3709.                                   Attrib   enthält   den  Scan   Code   der 
  3710.                                   gedrückten Funktionstaste. 
  3711.  
  3712.                      Menu         Ein  Menüpunkt  wurde  ausgewählt.    Die 
  3713.                                   Verbundkomponente  x enthält  die  in der 
  3714.                                   Menüressource vereinbarte Nummer. 
  3715.  
  3716.                      DoRedraw     Der  Viewport  des Klienten  ist zerstört 
  3717.                                   worden,   er  muß  vom  Klienten   erneut 
  3718.                                   gezeichnet werden. 
  3719.  
  3720.                      void         Die Ereigniswarteschlange ist leer. 
  3721.  
  3722.          Siehe auch  DispatchMessage, FlushQueue, PostMessage 
  3723.          
  3724.          __________________________________________________________________
  3725.          GetFirstTopic                                                  API
  3726.  
  3727.          Deklaration Procedure GetFirstTopic(Var Name: NameString;
  3728.                                              var eol: boolean)
  3729.                                              
  3730.          Funktion    liefert  das erste Hilfestichwort  aus der allgemeinen 
  3731.                      Hilfedatei 
  3732.  
  3733.          Parameter   Name         enthält nach der Ausführung das Stichwort
  3734.          
  3735.                      eol          wird TRUE,  falls keine  weiteren  Stich- 
  3736.                                   worte enthalten sind 
  3737.  
  3738.          Hinweis     Diese  Prozedur  wird  als  Callback-Prozedur  von der 
  3739.                      allgemeinen  Hilfe verwendet.  Die Prozedur kann einem 
  3740.                      Listendialog  zur  Ermittlung  der Liste  der Einträge 
  3741.                      dienen.  Die allgemeine Hilfedatei trägt den Namen des 
  3742.                      Hauptprogramms, der bei OpenMainApplication  angegeben 
  3743.                      wurde, und endet auf '.hlp'. 
  3744.  
  3745.          Siehe auch  GetNextTopic
  3746.  
  3747.          __________________________________________________________________
  3748.          GetFontX                                                    Kernel
  3749.  
  3750.  
  3751.  
  3752.  
  3753.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 57
  3754.  
  3755.          Deklaration Function GetFontX: Byte
  3756.          
  3757.          Funktion    liefert  die  Breite  eines  Zeichens   des  Standard- 
  3758.                      zeichensatzes in Pixeln 
  3759.  
  3760.          Ergebnis    Das Ergebnis  vom Typ Byte wird  bei Standard-EGA  und 
  3761.                      VGA-Karten 8 Pixel und bei der Hercules-Karte  9 Pixel 
  3762.                      betragen. Bei Karten mit sehr hoher Auflösung sind die 
  3763.                      Zeichen größer, um die Lesbarkeit zu gewährleisten. 
  3764.  
  3765.          Hinweis     Diese Funktion wird vorteilhaft  eingesetzt,  wenn die 
  3766.                      Größe eines Textausgabefensters  zu berechnen ist.  Es 
  3767.                      ist nicht zu empfehlen, die Größe solcher Fenster fest 
  3768.                      zu  dimensionieren,   da  dann  unter  Umständen   auf 
  3769.                      Grafikkarten  mit  sehr  hoher  Auflösung  nicht  alle 
  3770.                      Zeichen im Fenster Platz finden 
  3771.  
  3772.          Siehe auch  GetFontY, WriteWin
  3773.  
  3774.          __________________________________________________________________
  3775.          GetFontY                                                    Kernel
  3776.  
  3777.          Deklaration Function GetFontY: Byte
  3778.          
  3779.          Funktion    liefert   die  Höhe  eines   Zeichens   des  Standard- 
  3780.                      zeichensatzes in Pixeln 
  3781.  
  3782.          Ergebnis    Das Ergebnis  vom Typ Byte wird bei EGA-Karten  14 und 
  3783.                      bei  VGA-Karten  16 Pixel  betragen.   Bei Karten  mit 
  3784.                      höherer  Auflösung  sind  die Zeichen  größer,  um die 
  3785.                      Lesbarkeit zu gewährleisten. 
  3786.  
  3787.          Hinweis     Diese Funktion wird vorteilhaft  eingesetzt,  wenn die 
  3788.                      Größe  eines  Textausgabefensters  zu  berechnen  ist. 
  3789.                      Anstatt die Größe des Fensters fest zu dimensionieren, 
  3790.                      sollte  sie aus der Anzahl  der Zeilen  und FontY bzw. 
  3791.                      der Anzahl der Spalten und FontX berechnet werden. 
  3792.  
  3793.          Siehe auch  GetFontX, WriteWin
  3794.  
  3795.          __________________________________________________________________
  3796.          GetInitFileInteger                                          Kernel
  3797.  
  3798.          Deklaration Function GetInitFileInteger(Block: BlockIDString;
  3799.                                      KeyWord: KeyString;          
  3800.                                      Var OutVal: LongInt): Boolean;
  3801.                                           
  3802.          Funktion    Liefert einen LongInt aus der Initialisierungsdatei.
  3803.          
  3804.          Parameter   Block        Name  des Abschnitts,  in dem das Schlüs- 
  3805.                                   selwort gesucht wird. 
  3806.  
  3807.                      KeyWord      Name des gesuchten Schlüsselwortes.
  3808.                      
  3809.                      OutVal       Enthält nach der Ausführung den gesuchten 
  3810.                                   LongInt Wert 
  3811.  
  3812.          Ergebnis    Das Funktionsergebnis  teilt Erfolg  (TRUE)  oder Miß- 
  3813.                      erfolg (FALSE) der Suche mit. 
  3814.  
  3815.         Beispiel     Das  Programmbeispiel  entnimmt  der Initialisierungs- 
  3816.                      datei  einen  vom Benutzer  festgelegten  Wert für die 
  3817.  
  3818.  
  3819.  
  3820.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 58
  3821.  
  3822.                      maximal  offenenen  Files  der  Applikation.  Für  das 
  3823.                      Beispiel   sei   folgender   Ausschnitt    aus   einer 
  3824.                      Initialisierungsdatei angenommen: 
  3825.  
  3826.                      [User]
  3827.                      WelcomeText="Hallo Frank, schön dich zu sehen"
  3828.                                  ;ein String
  3829.                      MaxOpenFiles=10
  3830.                                  ;ein LongInt
  3831.  
  3832.                      Funktion GiveMaxOpenFiles : Byte;
  3833.                      Var OpenFiles : LongInt;
  3834.                      Begin
  3835.                        MaxOpenFile := 0;
  3836.                        If GetInitFileInteger('User','MaxOpenFiles',
  3837.                           OpenFiles) Then
  3838.                          If (OpenFiles > 0) and (OpenFiles < 30) Then
  3839.                            MaxOpenFiles := OpenFiles;
  3840.                      End;
  3841.  
  3842.          Siehe auch  GetInitFileName, GetInitFileString, 
  3843.                      GetInitFileListFirst, GetInitFileListNext, 
  3844.                      GetParaInteger, GetParaName, GetParaString 
  3845.  
  3846.          __________________________________________________________________
  3847.          GetInitFileListFirst                                        Kernel
  3848.  
  3849.          Deklaration Function GetInitFileListFirst(Block: BlockIDString;
  3850.                                      KeyWord: KeyString;   
  3851.                                      Var OutVal: ValueString):Boolean;
  3852.                                      
  3853.          Funktion    Liefert  den Rest  der Zeile  nach  dem Schlüsselworte 
  3854.                      KeyWord. 
  3855.  
  3856.          Parameter   Block        Name  des Abschnitts,  in dem das Schlüs- 
  3857.                                   selwort gesucht wird. 
  3858.  
  3859.                      KeyWord      Name des gesuchten Schlüsselwortes.
  3860.                      
  3861.                      OutVal       Enthält nach der Ausführung  den Rest der 
  3862.                                   Zeile  nach  dem  ersten  Vorkommen   des 
  3863.                                   Schlüsselwortes KeyWord. 
  3864.  
  3865.          Ergebnis    Das Funktionsergebnis  teilt Erfolg  (TRUE)  oder Miß- 
  3866.                      erfolg (FALSE) der Suche mit. 
  3867.  
  3868.          Hinweis     Um  aus  der  durch  GetInitFileListFirst   gewonnenen 
  3869.                      Eingabezeile   einzelne   Parameter   zu  extrahieren, 
  3870.                      benutzen  Sie  bitte  die  Funktionen  GetParaInteger, 
  3871.                      GetParaName oder GetParaString. 
  3872.  
  3873.          Beispiel    Das Programmierbeispiel  belegt ein Feld von Verbunden 
  3874.                      mit  Werten  aus der Initialisierungsdatei  vor.   Die 
  3875.                      Initialisierungsdatei enthalte folgenden Abschnitt: 
  3876.  
  3877.                      [Farbtabelle]
  3878.                      ;      Name Farbe   Linientyp
  3879.                      LAYER=    0    15   CONTINUOUS
  3880.                      LAYER=    1    2    CONTINUOUS
  3881.                      LAYER=    2    3    CONTINUOUS
  3882.                      LAYER=    3    15   CONTINUOUS
  3883.                      LAYER=    4    5    CONTINUOUS
  3884.  
  3885.  
  3886.  
  3887.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 59
  3888.  
  3889.                      LAYER=    5    6    CONTINUOUS
  3890.                      LAYER=    6    14   CONTINUOUS
  3891.                      LAYER=    7    7    CONTINUOUS
  3892.                          
  3893.                      Type FarbEintrag = Record
  3894.                                           LayerName  : String[15];
  3895.                                           LayerFarbe : Byte;
  3896.                                           LayerTyp   : String[15];
  3897.                                         End;
  3898.                      Type Farbtabelle = Array[0..7] of FarbEintrag;
  3899.                          
  3900.                      Var  DieFarbtabelle : Farbtabelle;
  3901.                           EingabeZeile   : String;
  3902.                           LayerName      : String;
  3903.                           LayerFarbe     : LongInt;
  3904.                           LayerTyp       : String;
  3905.                          
  3906.                      Procedure LiesFarbtabelle;
  3907.                      Var I : Integer;
  3908.                      Begin
  3909.                        I := 0;
  3910.                        If GetInitFileListFirst('Farbtabelle','Layer',
  3911.                        EingabeZeile) Then
  3912.                          Begin
  3913.                            Repeat
  3914.                              If GetParaName(EingabeZeile,LayerName) Then
  3915.                                Begin
  3916.                                  If GetParaInteger(EingabeZeile,
  3917.                                  LayerFarbe) Then
  3918.                                    Begin
  3919.                                      If GetParaName(EingabeZeile,
  3920.                                      LayerTyp) Then
  3921.                                        Begin
  3922.                                          DieFarbTabelle[i].LayerName  := 
  3923.                                             LayerName;
  3924.                                          DieFarbtabelle[i].LayerFarbe :=
  3925.                                             LayerFarbe;
  3926.                                          DieFarbtabelle[i].LayerTyp   :=
  3927.                                             LayerTyp;
  3928.                                        End
  3929.                                      Else ErrWindow(0,0,
  3930.                                   'LayerTyp falsch oder nicht angegeben.');
  3931.                                    End
  3932.                                  Else ErrWindow(0,0,
  3933.                                 'LayerFarbe falsch oder nicht angegeben.');
  3934.                                End
  3935.                              Else ErrWindow(0,0,
  3936.                                   'LayerName falsch oder nicht angegeben');
  3937.                              I := I+1;
  3938.                            Until (Not GetInitFileListNext('Layer',
  3939.                                   EingabeZeile)) or (I > 7);
  3940.                          End
  3941.                        Else ErrWindow(0,0,
  3942.                             'Abschnitt oder Schlüsselwort nicht gefunden');
  3943.                      End;
  3944.  
  3945.          Siehe auch  GetInitFileInteger, GetInitFileName, 
  3946.                      GetInitFileString, GetInitFileListNext, GetParaInteger,
  3947.                      GetParaName, GetParaString
  3948.  
  3949.          __________________________________________________________________
  3950.          GetInitFileListNext                                          Kernel
  3951.  
  3952.  
  3953.  
  3954.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 60
  3955.  
  3956.  
  3957.          Deklaration Function GetInitFileListNext(KeyWord: KeyString;
  3958.                                      Var OutVal: ValueString):Boolean;
  3959.                                      
  3960.          Funktion    Liefert  bei wiederholtem  Aufruf  jeweils  eine  neue 
  3961.                      Zeile, nach dem Schlüsselwort  KeyWord.  Die Suche muß 
  3962.                      zuvor  mit  GetInitFileListFirst   eingeleitet  worden 
  3963.                      sein. 
  3964.  
  3965.          Parameter   KeyWord      Name des gesuchten Schlüsselwortes.
  3966.          
  3967.                      OutVal       Enthält nach der Ausführung  den Rest der 
  3968.                                   Zeile  nach  dem  ersten  Vorkommen   des 
  3969.                                   Schlüsselwortes KeyWord. 
  3970.  
  3971.          Ergebnis    Das Funktionsergebnis  teilt mit, ob noch eine weitere 
  3972.                      Zeile  gefunden  wurde  (TRUE),  oder ob kein weiteres 
  3973.                      Schlüsselwort mehr gefunden wurde (FALSE). 
  3974.  
  3975.          Hinweis     Um  aus  der  durch   GetInitFileListNext   gewonnenen 
  3976.                      Eingabezeile   einzelne   Parameter   zu  extrahieren, 
  3977.                      benutzen  Sie  bitte  die  Funktionen  GetParaInteger, 
  3978.                      GetParaName  oder  GetParaString.   Ein  umfangreiches 
  3979.                      Programmierbeispiel        finden        sie       bei 
  3980.                      GetInitFileListFirst. 
  3981.  
  3982.         Siehe auch  GetInitFileInteger, GetInitFileName, GetInitFileString,
  3983.                     GetInitFileListFirst, GetParaInteger, GetParaName,
  3984.                     GetParaString
  3985.  
  3986.          __________________________________________________________________
  3987.          GetInitFileName                                             Kernel
  3988.  
  3989.          Deklaration Function GetInitFileName(Block: BlockIDString; 
  3990.                                      KeyWord: KeyString;
  3991.                                      Var OutVal: ValueString):Boolean;
  3992.                                      
  3993.          Funktion    Liefert  einen  Namen (ungeschützten  String)  aus der 
  3994.                      Initialisierungsdatei. 
  3995.  
  3996.          Parameter   Block        Name  des  Abschnitts  in dem das Schlüs- 
  3997.                                   selwort gesucht wird. 
  3998.  
  3999.                      KeyWord      Name des gesuchten Schlüsselwortes.
  4000.                      
  4001.                      OutVal       Enthält nach der Ausführung den gesuchten 
  4002.                                   Namen 
  4003.  
  4004.          Ergebnis    Das Funktionsergebnis  teilt Erfolg  (TRUE)  oder Miß- 
  4005.                      erfolg (FALSE) der Suche mit. 
  4006.  
  4007.         Beispiel     Das Beispiel entnimmt  der Initialsierungsdatei  einen 
  4008.                      vom Anwender  definierten  Namen, in diesem  Fall eine 
  4009.                      Pfadangabe.    Die   Initialisierungsdatei    enthalte 
  4010.                      folgenden Abschnitt: 
  4011.  
  4012.                          
  4013.                      [paths]
  4014.                      VDIDir=C:\TURBO\DELITE\DRIVER
  4015.                             ;Verzeichnis der Treiber
  4016.                          
  4017.                          
  4018.  
  4019.  
  4020.  
  4021.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 61
  4022.  
  4023.                      Funktion GetPath : String;
  4024.                      Begin
  4025.                        If GetInitFileString('paths','VDIDir',ThePath) Then
  4026.                          GetPath := ThePath
  4027.                        Else GetPath := 'NONE';
  4028.                      End;
  4029.                          
  4030.          Siehe auch  GetInitFileInteger, GetInitFileString, 
  4031.                      GetInitFileListFirst, GetInitFileListNext,
  4032.                      GetParaInteger, GetParaName, GetParaString
  4033.  
  4034.          __________________________________________________________________
  4035.          GetInitFileString                                           Kernel
  4036.  
  4037.          Deklaration Function GetInitFileString(Block: BlockIDString;
  4038.                                      KeyWord: KeyString;
  4039.                                      Var OutVal: ValueString):Boolean;
  4040.                                      
  4041.          Funktion    Liefert  einen  String  (geschützten  String)  aus der 
  4042.                      Initialisierungsdatei. 
  4043.  
  4044.          Parameter   Block        Name  des  Abschnitts  in dem das Schlüs- 
  4045.                                   selwort gesucht wird. 
  4046.  
  4047.                      KeyWord      Name des gesuchten Schlüsselwortes.
  4048.                      
  4049.                      OutVal       Enthält nach der Ausführung den gesuchten 
  4050.                                   String 
  4051.  
  4052.          Ergebnis    
  4053.                      Das Funktionsergebnis  teilt Erfolg  (TRUE)  oder Miß- 
  4054.                      erfolg (FALSE) der Suche mit. 
  4055.  
  4056.         Beispiel     Das Beispiel entnimmt der Initialisierungsdatei  einen 
  4057.                      geschützen String und gibt ihn in einem Fenster aus in 
  4058.                      der linken oberen Ecke aus.  Die Initialisierungsdatei 
  4059.                      enthalte den folgenden Abschnitt: 
  4060.  
  4061.                      [User]
  4062.                      WelcomeText="Hallo Frank, schön dich zu sehen"
  4063.                                  ;ein String
  4064.                          
  4065.                      Procedure WelcomeUser;
  4066.                      Var TheUser : String;
  4067.                      Begin
  4068.                        If GetInitFileString('User','WelcomeText',
  4069.                        TheUser) Then
  4070.                          Begin
  4071.                            OpenWindow(0,0,GetFontX*Length(TheUser),
  4072.                                       GetFontY*3);
  4073.                            WriteWin(TheUser,0,1,15);
  4074.                            WaitConfirm;
  4075.                            CloseWindow;
  4076.                          End
  4077.                        Else ErrWindow(0,0,'Keine Begrüßung angegeben.');
  4078.                      End;
  4079.  
  4080.          Siehe auch  GetInitFileInteger, GetInitFileName, 
  4081.                      GetInitFileListFirst, GetInitFileListNext, 
  4082.                      GetParaInteger, GetParaName, GetParaString
  4083.  
  4084.          __________________________________________________________________
  4085.  
  4086.  
  4087.  
  4088.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 62
  4089.  
  4090.          GetMainID                                                      API
  4091.  
  4092.          Deklaration Function GetMainID: Integer
  4093.          
  4094.          Funktion    liefert die Identifikationsnummer der Hauptapplikation
  4095.          
  4096.          Ergebnis    Das Ergebnis ist eine positive Integerzahl
  4097.          
  4098.          Hinweis     
  4099.                      Die Angabe  der Identifikationsnummer  eines  Klienten 
  4100.                      ist bei einer  Reihe  von Operationen  notwendig.   Im 
  4101.                      Gegensatz   zu   Subapplikationen,   bei   denen   die 
  4102.                      Identifikationsnummer  beim  Anmelden  zurückgeliefert 
  4103.                      wird,   muß   die  Identifikationsnummer   der  Haupt- 
  4104.                      applikation  mit  dieser  Prozedur  erst  in Erfahrung 
  4105.                      gebracht werden.  Die meisten Operationen mit Klienten 
  4106.                      sind  allerdings  nur  dann  wichtig,  wenn  die Bild- 
  4107.                      schirmfläche  auf  mehrere  Klienten  verteilt  werden 
  4108.                      soll. 
  4109.  
  4110.          Beispiel    SuspendApplication(GetMainID)
  4111.          
  4112.                      veranlasst  den  Dispatcher,  den Viewport  der Haupt- 
  4113.                      applikation  bei der Verteilung von Botschaften  unbe- 
  4114.                      rücksichtigt zu lassen. 
  4115.  
  4116.         Siehe auch  SuspendApplication, ActivateApplication,
  4117.                     OpenMainApplication, OpenSubApplication,
  4118.                     FrameSubApplication, PostMessage, DispatchMessage
  4119.  
  4120.          __________________________________________________________________
  4121.          GetMaxColors                                                Kernel
  4122.  
  4123.          Deklaration Function GetMaxColors: Byte
  4124.          
  4125.          Funktion    liefert  die Anzahl der darstellbaren  Farben des ver- 
  4126.                      wendeten Grafiktreibers 
  4127.  
  4128.          Ergebnis    Das  Ergebnis  vom  Typ  Byte  liefert  den  Wert  der 
  4129.                      höchsten darzustellenden Farbe. Bei einer Karte mit 16 
  4130.                      Farben wäre das 15.  Bei monochromen  Karten wird hier 
  4131.                      eine 1 zurückgeliefert 
  4132.  
  4133.          __________________________________________________________________
  4134.          GetMaxX                                                     Kernel
  4135.  
  4136.          Deklaration Function GetMaxX: Integer
  4137.          
  4138.          Funktion    liefert die horizontale Grösse der Grafikseite
  4139.          
  4140.          Ergebnis    
  4141.                      Das Ergebnis  vom Typ Integer entspricht  der grössten 
  4142.                      Koordinate  in X-Richtung  auf der  Grafikseite.   Die 
  4143.                      kleinste Koordinate hat den Wert 0. 
  4144.  
  4145.          Hinweis     Ein  gesetzter  Viewport  hat keinen  Einfluß  auf das 
  4146.                      Resultat dieser Funktion. 
  4147.  
  4148.          Siehe auch  GetMaxY, PortMaxX, PortMaxY
  4149.  
  4150.          __________________________________________________________________
  4151.          GetMaxY                                                     Kernel
  4152.  
  4153.  
  4154.  
  4155.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 63
  4156.  
  4157.  
  4158.          Deklaration Function GetMaxY: Integer
  4159.          
  4160.          Funktion    liefert die vertikale Grösse der Grafikseite
  4161.          
  4162.          Ergebnis    Das Ergebnis  vom Typ Integer entspricht  der grössten 
  4163.                      Koordinate  in Y-Richtung  auf der  Grafikseite.   Die 
  4164.                      kleinste Koordinate hat den Wert 0. 
  4165.  
  4166.          Hinweis     Ein  gesetzter  Viewport  hat keinen  Einfluß  auf das 
  4167.                      Resultat dieser Funktion. 
  4168.  
  4169.          Siehe auch  GetMaxX, PortMaxX, PortMaxY
  4170.  
  4171.          __________________________________________________________________
  4172.          GetMenu                                                        API
  4173.  
  4174.          Deklaration Function GetMenu: hMenu
  4175.          
  4176.          Funktion    liefert den Zeiger auf das Menü
  4177.          
  4178.          Ergebnis    Der Typ hMenu  ist als Zeiger  definiert  und ist NIL, 
  4179.                      solange kein Menü geladen worden ist 
  4180.  
  4181.          Hinweis     Der Zeiger  auf das Menü muß bei allen Funktionen  zur 
  4182.                      Modifikation   der  Menüs  angegeben   werden.   Diese 
  4183.                      Konvention   wurde  eingeführt,   damit  es  in  einer 
  4184.                      späteren   Version   möglich  ist,  mehrere  Menüs  zu 
  4185.                      verwalten. 
  4186.  
  4187.          Siehe auch  EnableMenuItem, CheckMenuItem, GetMenuFlags
  4188.  
  4189.          __________________________________________________________________
  4190.          GetMenuFlags                                                   API
  4191.  
  4192.          Deklaration Function GetMenuFlags(Menu: hMenu;
  4193.                                            ID: MenuID):MenuFlags
  4194.                                            
  4195.          Funktion    liefert die Attribute eines Menüeintrages
  4196.          
  4197.          Parameter   Menu         Zeiger auf das Menü
  4198.          
  4199.                      ID           Identifikationsnummer des Menüeintrages
  4200.                      
  4201.          Ergebnis    Der Typ MenuFlags  ist als Byte definiert  und enthält 
  4202.                      bitkodiert die Attribute des Menüeintrages 
  4203.  
  4204.          Hinweis    Um festzustellen, ob ein bestimmtes Attribut gesetzt ist,
  4205.                     muß der Ergebniswert mit den Konstanten MF_CHECKED oder
  4206.                     MF_DISABLED UND-verknüpft werden.
  4207.         
  4208.          Beispiel   If GetMenuFlags(GetMenu, 101) and MF_CHECKED then ...
  4209.          
  4210.          Siehe auch  EnableMenuItem, CheckMenuItem, GetMenu
  4211.  
  4212.          __________________________________________________________________
  4213.          GetMenuString                                                  API
  4214.  
  4215.          Deklaration Procedure GetMenuString(Menu: hmenu; ID: MenueID; 
  4216.                                              Var StrPrt: String)
  4217.                                              
  4218.          Funktion    Liefert den Text eines Menüeintrages
  4219.  
  4220.  
  4221.  
  4222.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 64
  4223.  
  4224.          
  4225.          Parameter   Menu         Zeiger auf das Menü
  4226.          
  4227.                      ID           Identifikationsnummer des Menüeintrages
  4228.                      
  4229.                      StrPtr       enthält nach der Ausführung des Menütext
  4230.                      
  4231.          Hinweis     Der Menütext  enthält in der Regel ein Ampersandsymbol 
  4232.                      ("&") zur optischen Kennzeichnung  der Abkürzungstaste 
  4233.                      (Hotkey) des Menüs. 
  4234.  
  4235.          Siehe auch  GetMenu, ReplaceMenu
  4236.  
  4237.          __________________________________________________________________
  4238.          GetNextTopic                                                   API
  4239.  
  4240.          Deklaration Procedure GetNextTopic(Var Name: NameString;
  4241.                                             Var eol: boolean)
  4242.                                             
  4243.          Funktion    liefert das nächste Hilfestichwort aus der allgemeinen 
  4244.                      Hilfedatei 
  4245.  
  4246.          Parameter   Name         enthält nach der Ausführung das Stichwort
  4247.          
  4248.                      eol          wird TRUE,  falls keine  weiteren  Stich- 
  4249.                                   worte enthalten sind 
  4250.  
  4251.          Hinweis     Diese  Prozedur  wird  als  Callback-Prozedur  von der 
  4252.                      allgemeinen  Hilfe verwendet.  Die Prozedur kann einem 
  4253.                      Listendialog  zur  Ermittlung  der Liste  der Einträge 
  4254.                      dienen.  Die allgemeine Hilfedatei trägt den Namen des 
  4255.                      Hauptprogramms, der bei OpenMainApplication  angegeben 
  4256.                      wurde, und endet auf '.hlp'. 
  4257.  
  4258.          Siehe auch  GetFirstTopic  
  4259.  
  4260.          __________________________________________________________________
  4261.          GetPalette                                                  Kernel
  4262.  
  4263.          Deklaration Procedure GetPalette(ThePalette: Byte;
  4264.                                           Var R,G,B: Byte)
  4265.                                           
  4266.          Funktion    Liefert den Eintrag der Farbpalette als RGB Wert.
  4267.          
  4268.          Parameter   ThePalette   Index des Paletteneintrages
  4269.          
  4270.                      R, G, B      enthalten  nach dem Aufruf die Anteile an 
  4271.                                   den Grundfarben 
  4272.  
  4273.          Hinweis     Bei Grafikkarten  ohne  Farbpalette,  wie der Hercules 
  4274.                      Monochrom Karte, liefert GetPalette  eine Null für die 
  4275.                      Farbanteile. 
  4276.  
  4277.          Siehe auch  SetPalette, GetMaxColors
  4278.  
  4279.          __________________________________________________________________
  4280.          GetParaInteger                                              Kernel
  4281.  
  4282.          Deklaration Function GetParaInteger(Var Line: String; 
  4283.                                              Var OutVal: LongInt): Boolean
  4284.                                              
  4285.          Funktion    Extrahiert  einen  LongInt  aus dem in Line  übergenen 
  4286.  
  4287.  
  4288.  
  4289.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 65
  4290.  
  4291.                      String. 
  4292.  
  4293.          Parameter   Line         Enthält die Eingabezeile
  4294.          
  4295.                      OutVal       Enthält    nach   der   Ausführung    den 
  4296.                                   extrahierten LongInt 
  4297.  
  4298.          Ergebnis    Zeigt   an,  ob  aus  der  Eingabezeile   ein  LongInt 
  4299.                      extrahiert werden konnte (TRUE) 
  4300.  
  4301.          Hinweis     Durch  die  Ausführung  von  GetParaInteger  wird  der 
  4302.                      extrahierte  Parameter  verbraucht.  Mit  wiederholten 
  4303.                      Aufrufen  können  daher mehrere  Parameter  extrahiert 
  4304.                      werden.  Die Verwendung von GetParaInteger  ist nur in 
  4305.                      Verbindung mit den Funktionen GetInitFileListFirst und 
  4306.                      GetInitFileListNext sinnvoll.  Ein Programmierbeispiel 
  4307.                      findet sich dort. 
  4308.  
  4309.          Siehe auch  GetParaName, GetParaString, GetInitFileListFirst,
  4310.                      GetInitFileListNext
  4311.  
  4312.          __________________________________________________________________
  4313.          GetParaName                                                 Kernel
  4314.  
  4315.          Deklaration Function GetParaName(Var Line: String;
  4316.                                           Var OutVal: ValueString): Boolean
  4317.                                           
  4318.          Funktion    Extrahiert  einen  Namen  aus  dem  in Line  übergenen 
  4319.                      String. 
  4320.  
  4321.          Parameter   Line         Enthält die Eingabezeile
  4322.          
  4323.                      OutVal       Enthält    nach   der   Ausführung    den 
  4324.                                   extrahierten Namen 
  4325.  
  4326.          Ergebnis    Zeigt an, ob aus der Eingabezeile  ein Name extrahiert 
  4327.                      werden konnte (TRUE) 
  4328.  
  4329.          Hinweis     Durch   die  Ausführung   von  GetParaName   wird  der 
  4330.                      extrahierte  Parameter  verbraucht.  Mit  wiederholten 
  4331.                      Aufrufen  können  daher mehrere  Parameter  extrahiert 
  4332.                      werden.   Die  Verwendung  von GetParaName  ist nur in 
  4333.                      Verbindung mit den Funktionen GetInitFileListFirst und 
  4334.                      GetInitFileListNext sinnvoll.  Ein Programmierbeispiel 
  4335.                      findet sich dort. 
  4336.  
  4337.          Siehe auch  GetParaInteger, GetParaString, GetInitFileListFirst,
  4338.                      GetInitFileListNext
  4339.  
  4340.          __________________________________________________________________
  4341.          GetParaString                                               Kernel
  4342.  
  4343.          Deklaration Function GetParaString(Var Line: String; 
  4344.                                         Var OutVal: ValueString): Boolean
  4345.                                         
  4346.          Funktion    Extrahiert  einen  geschüzten  String  aus dem in Line 
  4347.                      übergenen String. 
  4348.  
  4349.          Parameter   Line         Enthält die Eingabezeile
  4350.          
  4351.                      OutVal       Enthält    nach   der   Ausführung    den 
  4352.                                   geschützen String 
  4353.  
  4354.  
  4355.  
  4356.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 66
  4357.  
  4358.  
  4359.          Ergebnis    Zeigt  an,  ob aus  der Eingabezeile  ein  geschützter 
  4360.                      String extrahiert werden konnte (TRUE) 
  4361.  
  4362.          Hinweis     Durch  die  Ausführung  von  GetParaString   wird  der 
  4363.                      extrahierte  Parameter  verbraucht.  Mit  wiederholten 
  4364.                      Aufrufen  können  daher mehrere  Parameter  extrahiert 
  4365.                      werden.  Die Verwendung  von GetParaString  ist nur in 
  4366.                      Verbindung mit den Funktionen GetInitFileListFirst und 
  4367.                      GetInitFileListNext sinnvoll.  Ein Programmierbeispiel 
  4368.                      findet sich dort. 
  4369.  
  4370.          Siehe auch  GetParaInteger, GetParaName, GetInitFileListFirst,
  4371.                      GetInitFileListNext
  4372.  
  4373.          __________________________________________________________________
  4374.          GetTextLength                                               Kernel
  4375.  
  4376.          Deklaration Function GetTextLength(Var Str: String): Integer
  4377.          
  4378.          Funktion    liefert die tatsächliche Länge eines Menütextes
  4379.          
  4380.          Parameter   Str          Der Menütext
  4381.          
  4382.          Ergebnis    Die tatsächliche  Länge  ist die Länge  abzüglich  der 
  4383.                      Anzahl  der  im  Text  enthaltenen   Ampersand-Symbole 
  4384.                      ("&"), die kennzeichnen, daß der folgende Buchstabe zu 
  4385.                      unterstreichen ist 
  4386.  
  4387.          __________________________________________________________________
  4388.          GetTheViewPort                                                 API
  4389.  
  4390.          Deklaration Procedure GetTheViewPort(ID: Integer; 
  4391.                                     Var Viewport: ViewPortType)
  4392.                     
  4393.          Funktion    Liefert den Viewport eines Klienten
  4394.          
  4395.          Parameter   ID           Die ID des Klienten
  4396.          
  4397.                      Viewport     enthält nach der Ausführung den Viewport
  4398.                      
  4399.                      Der   Typ  ViewPortType   ist  im  Kernel   wie  folgt 
  4400.                      definiert: 
  4401.  
  4402.          Hinweis     Existiert unter der angegebenen  ID kein Klient, haben 
  4403.                      alle  Parameter  des zurückgelieferten  Viewports  den 
  4404.                      Wert 0. 
  4405.  
  4406.          Siehe auch  SetTheViewPort
  4407.  
  4408.          __________________________________________________________________
  4409.          HideMouse                                                   Kernel
  4410.  
  4411.          Deklaration Procedure HideMouse
  4412.          
  4413.          Funktion    Versteckt die Maus
  4414.          
  4415.          Hinweis     Während   Grafikoperationen   muß  die  Maus  vor  dem 
  4416.                      Überschreiben  geschützt werden.  Zu diesem Zweck wird 
  4417.                      vor jeder Grafikoperation  automatisch  der Mauszeiger 
  4418.                      entfernt und anschliessend neu gezeichnet.  Möchte man 
  4419.                      sehr viele Grafikoperationen hintereinander ausführen, 
  4420.  
  4421.  
  4422.  
  4423.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 67
  4424.  
  4425.                      kann es sein, daß das Retten des Mauszeigers mehr Zeit 
  4426.                      in  Anspruch   nimmt  als  die  eigentlichen   Grafik- 
  4427.                      operationen.   Dann  empfiehlt  es sich,  die Maus vor 
  4428.                      Beginn  der ersten  Grafikoperation  mit HideMouse  zu 
  4429.                      verstecken und hinterher wieder mit ShowMouse sichtbar 
  4430.                      zu machen. 
  4431.  
  4432.          Siehe auch  ShowMouse
  4433.  
  4434.          __________________________________________________________________
  4435.          InitListDialog                                                 API
  4436.  
  4437.          Deklaration Procedure InitListDialog(rsc: ListDialog;
  4438.                                               var ThisList: TheList)
  4439.                     
  4440.          Funktion    Öffnet den durch rsc spezifizierten Listendialog
  4441.          
  4442.          Parameter   rsc          Der Verbundtyp ListDialog
  4443.          
  4444.                      ThisList     Ein  Zeicher  auf einen  Verbund  vom Typ 
  4445.                                   TheListType 
  4446.  
  4447.                      Die Variable rsc ist wie folgt definiert: 
  4448.  
  4449.                      ListDialog  = record
  4450.                                      text      : DlgStr;
  4451.                                      Itemwidth : integer;
  4452.                                      ListLength: integer;
  4453.                                      xorg,yorg : integer;
  4454.                                      GetFirst  : ListProc;
  4455.                                      GetNext   : ListProc;
  4456.                                      PoppedUp  : boolean;
  4457.                                      topic     : NameString;
  4458.                                    end;
  4459.  
  4460.                      Die Einträge  müssen vor dem Aufruf von InitListDialog 
  4461.                      initialisiert  werden.  Die  Bedeutung  der  einzelnen 
  4462.                      Einträge lautet 
  4463.  
  4464.                      text         Der Titel des Dialoges
  4465.                      
  4466.                      Itemwidth    Die  Anzahl  der Spalten  der angezeigten 
  4467.                                   Liste 
  4468.  
  4469.                      ListLength   Die Anzahl der Zeilen  der Liste.  Dieser 
  4470.                                   Wert  entspricht  der Anzahl  der gleich- 
  4471.                                   zeitig dargestellten Einträge 
  4472.  
  4473.                      xorg,yorg    Die Koordinate der linken oberen Ecke des 
  4474.                                   Dialoges 
  4475.  
  4476.                      GetFirst     Callback-Prozedur  zum  Holen  des ersten 
  4477.                                   Elementes der Liste 
  4478.  
  4479.                      GetNext      Callback-Prozedur  zum Holen des nächsten 
  4480.                                   Elementes der Liste 
  4481.  
  4482.                      PoppedUp     gibt an, ob der Dialog bereits offen ist, 
  4483.                                   und wird vom System belegt 
  4484.  
  4485.                      topic        Das Stichwort  für die Hilfsfunktion
  4486.                      
  4487.  
  4488.  
  4489.  
  4490.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 68
  4491.  
  4492.                      Die Callback-Prozeduren  GetFirst  und GetNext vom Typ 
  4493.                      ListProc sind folgendermassen definiert: 
  4494.  
  4495.                      Type ListProc=Procedure(Var Item: NameString;
  4496.                                              Var eol: Boolean)
  4497.  
  4498.                      Dabei  wird  in  Item  der  Name  des  Listenelementes 
  4499.                      übergeben   und   in  der  booleschen   Variable   eol 
  4500.                      angezeigt, ob das Ende der Liste bereits erreicht ist. 
  4501.                      Bei Öffnen des Listendia- loges wird die Liste solange 
  4502.                      durch Aufrufe der Callback- Prozeduren  erweitert, bis 
  4503.                      die  Variable   eol  den  Wert  TRUE   annimmt.    Die 
  4504.                      Callback-Prozeduren müssen mit der Compiler- direktive 
  4505.                      FAR {$F+ } übersetzt  werden, anderenfalls  meldet der 
  4506.                      Compiler  den  Fehler  illegal  procedure  or function 
  4507.                      reference. 
  4508.  
  4509.                      Die Variable ThisList ist wie folgt definiert 
  4510.  
  4511.                      TheListType = record
  4512.                                      NItems : integer;
  4513.                                      eol    : boolean;
  4514.                                      Item   : NameString;
  4515.                                      ItemStr: NameString;
  4516.                                      Items  : array[1..MaxItems] 
  4517.                                               of nameString;
  4518.                                      ListPtr: integer;
  4519.                                      TOLW   : integer;
  4520.                                      Spots  : array[1..MaxListSpot] 
  4521.                                               of HotSpot;
  4522.                                      UpSpot : HotSpot;
  4523.                                      DwnSpot: HotSpot;
  4524.                                      Elevate: HotSpot;
  4525.                                    end;
  4526.  
  4527.                      TheList    = ^TheListType;
  4528.                          
  4529.                      Die  Zeigervariable  ThisList  muß vor dem Öffnen  des 
  4530.                      Listendialoges  mit new erzeugt  werden  und nach  dem 
  4531.                      Schliessen   mit  dispose  freigegeben   werden.   Die 
  4532.                      dazugehörige  Verbundvariable  wird  beim  Aufruf  von 
  4533.                      InitListDialog  vom System  belegt  und enthält  unter 
  4534.                      anderem die Liste der Einträge. 
  4535.  
  4536.          Hinweis     Der Listendialog  zeigt in einem Fenster die Liste der 
  4537.                      Elemente  an.  Falls nicht alle Elemente  gleichzeitig 
  4538.                      dargestellt   werden   können,   kann  der  angezeigte 
  4539.                      Ausschnitt verschoben werden (scrolling). Die maximale 
  4540.                      Anzahl von Einträgen  der Liste ist von der Konstanten 
  4541.                      MaxItems begrenzt. 
  4542.  
  4543.          Siehe auch  DoListDialog, UpdateListDialog, CloseListDialog
  4544.  
  4545.          __________________________________________________________________
  4546.          InitSmallDlg                                                   API
  4547.  
  4548.          Deklaration Procedure InitSmallDlg(rsc: SmallDialog)
  4549.          
  4550.          Funktion    Öffnet den durch rsc spezifizierten kleinen Dialog 
  4551.  
  4552.          Parameter   rsc          Der Verbundtyp SmallDialog
  4553.          
  4554.  
  4555.  
  4556.  
  4557.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 69
  4558.  
  4559.                      Die Variable rsc ist wie folgt definiert:
  4560.  
  4561.                      SmallDialog = record
  4562.                                      text1: Dlgstr;
  4563.                                      text2: DlgStr;
  4564.                                      deflt: DlgStr;
  4565.                                      xorg : integer;
  4566.                                      yorg : integer;
  4567.                                      len  : byte;
  4568.                                      topic: namestring;
  4569.                                    end;
  4570.  
  4571.                      Die Einträge müssen vor dem Aufruf von InitSmallDialog 
  4572.                      initialisiert  werden.  Die  Bedeutung  der  einzelnen 
  4573.                      Einträge lautet 
  4574.  
  4575.                      text1        Der Titel des Dialoges
  4576.                      
  4577.                      text2        Der Untertitel des Eingabefeldes
  4578.                      
  4579.                      deflt        Die Vorbelegung des Eingabefeldes
  4580.                      
  4581.                      xorg,yorg    Die Koordinate der linken oberen Ecke des 
  4582.                                   Dialoges 
  4583.  
  4584.                      len          Die Länge des Eingabefeldes
  4585.                      
  4586.                      topic        Das Stichwort für die Hilfsfunktion
  4587.                      
  4588.                      Die Vorbelegung  deflt muß mit einem Leerstring belegt 
  4589.                      werden, falls das Eingabefeld initial leer sein soll. 
  4590.  
  4591.          Hinweis     Der kleine Dialog bietet in einem Texteingabefeld  die 
  4592.                      Möglichkeit  der  Texteingabe.  Die  Anzahl  der  ein- 
  4593.                      gegebenen  Zeichen ist auf die Länge des Eingabefeldes 
  4594.                      begrenzt.  Der  in  text1  angegebene  Text  erscheint 
  4595.                      oberhalb  des Eingabefeldes,  der in text2  angegebene 
  4596.                      unterhalb. 
  4597.  
  4598.          Siehe auch  DoSmallDlg, CloseSmallDlg
  4599.  
  4600.  
  4601.          __________________________________________________________________
  4602.          InitTwinDlg                                                    API
  4603.  
  4604.          Deklaration Procedure InitTwinDlg(rsc: TwinDialog)
  4605.          
  4606.          Funktion    Öffnet den durch rsc spezifizierten doppelten Dialog
  4607.          
  4608.          Parameter   rsc          Der Verbundtyp TwinDialog
  4609.          
  4610.                      Die Variable rsc ist wie folgt definiert: 
  4611.  
  4612.                      TwinDialog  = record
  4613.                                      text1 : Dlgstr;
  4614.                                      text2 : DlgStr;
  4615.                                      text3 : DlgStr;
  4616.                                      deflt1: DlgStr;
  4617.                                      deflt2: DlgStr;
  4618.                                      xorg  : integer;
  4619.                                      yorg  : integer;
  4620.                                      len   : byte;
  4621.  
  4622.  
  4623.  
  4624.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 70
  4625.  
  4626.                                      topic1: NameString;
  4627.                                      topic2: NameString;
  4628.                                    end;
  4629.  
  4630.                      Die Einträge  müssen vor dem Aufruf von InitTwinDialog 
  4631.                      initialisiert  werden.  Die  Bedeutung  der  einzelnen 
  4632.                      Einträge lautet 
  4633.  
  4634.                      text1        Der Titel des Dialoges
  4635.                      text2        Der  Untertitel  des ersten Eingabefeldes
  4636.                      text3        Der  Untertitel des zweiten Eingabefeldes
  4637.                      deflt1       Die  Vorbelegung des ersten Eingabefeldes
  4638.                      deflt2       Die Vorbelegung des zweiten Eingabefeldes
  4639.                      xorg,yorg    Die Koordinate der linken oberen Ecke des 
  4640.                                   Dialoges
  4641.                      len          Die Länge des Eingabefeldes
  4642.                      topic1       Das  Stichwort  für die Hilfsfunktion für 
  4643.                                   das erste Eingabefeld
  4644.                      topic2       Das  Stichwort  für die Hilfsfunktion für 
  4645.                                   das zweite Eingabefeld
  4646.                                   
  4647.                      Die Vorbelegungen  deflt1 und deflt2  müssen mit einem 
  4648.                      Leerstring  belegt  werden,  falls  die entsprechenden 
  4649.                      Eingabefelder initial leer sein soll. 
  4650.  
  4651.          Hinweis     Der doppelte  Dialog bietet in zwei Texteingabefeldern 
  4652.                      die  Möglichkeit  der  Texteingabe.   Die  Anzahl  der 
  4653.                      eingegebenen  Zeichen  ist auf die Länge  der Eingabe- 
  4654.                      felder begrenzt. 
  4655.  
  4656.          Siehe auch  DoTwinDlg, CloseTwinDlg
  4657.  
  4658.          __________________________________________________________________
  4659.          KernelError                                                 Kernel
  4660.  
  4661.          Deklaration Function KernelError : Integer
  4662.          
  4663.          Funktion    liefert den Fehlerstatus der letzten Kernel-Operation
  4664.          
  4665.          Ergebnis    Der zurückgelieferte  Integerwert  hat die im Anhang B 
  4666.                      aufgelistete Bedeutung 
  4667.  
  4668.          Hinweis     Der Fehlerstatus  wird nach dem Aufruf von KernelError 
  4669.                      gelöscht 
  4670.  
  4671.          __________________________________________________________________
  4672.          Line                                                        Kernel
  4673.  
  4674.          Deklaration Procedure Line(x1,y1,x2,y2 : Integer; Color : Byte)
  4675.          
  4676.          Funktion    zeichnet eine Linie
  4677.          
  4678.          Beispiel    Line(0 ,0 ,PortMaxX ,PortMaxY,15)
  4679.          
  4680.                      zeichnet  eine weisse  diagonale  Linie von links oben 
  4681.                      nach rechts unten. 
  4682.  
  4683.          __________________________________________________________________
  4684.          OnLineHelp                                                     API
  4685.  
  4686.          Deklaration Procedure OnLineHelp(topic: String)
  4687.          
  4688.  
  4689.  
  4690.  
  4691.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 71
  4692.  
  4693.          Funktion    Ruft die interaktive Hilfe auf
  4694.          
  4695.          Parameter   topic        Das Hilfestichwort
  4696.          
  4697.          Hinweis    
  4698.                      Die Menüsteuerung und die Dialoge bedienen sich dieser 
  4699.                      Funktion zur Realisierung der kontextabhängigen Hilfe. 
  4700.                      Das  Hilfestichwort   wird  in  der  Datei  online.hlp 
  4701.                      gesucht und ggf.  der nach dem Stichwort folgende Text 
  4702.                      ausgegeben.  Solltedie Datei nicht existieren oder das 
  4703.                      Stichwort    nicht   gefunden    werden,   wird   eine 
  4704.                      entsprechende Fehlermeldung ausgegeben.  Das Stichwort 
  4705.                      muß in der Hilfedatei  in eckigen Klammern geschrieben 
  4706.                      werden.    Stichworte   werden   vor  dem  Aufruf  der 
  4707.                      Hilfsfunktion von evtl. vorhandenen Ampersand-Symbolen 
  4708.                      befreit.
  4709.                      
  4710.          Beispiel    [Load File]
  4711.                      Mit dieser  Funktion  laden 
  4712.                      Sie eine  neue Datei  zur Bearbeitung.
  4713.                      Gegebenenfalls   werden   Sie   darauf 
  4714.                      hingewiesen, daß die alte Datei
  4715.                      überschrieben wird 
  4716.  
  4717.                      [Save File]
  4718.                      Speichert die im Speicher befindliche
  4719.                      Datei. 
  4720.  
  4721.                      Dieser  Auszug aus der Hilfedatei  online.hlp  enthält 
  4722.                      Informationen  zu den Stichworten  Load  File und Save 
  4723.                      File.  Die Texte sollten nicht mehr als 34 Spalten und 
  4724.                      12 Zeilen enthalten. 
  4725.  
  4726.          __________________________________________________________________
  4727.          OpenMainApplication                                            API
  4728.  
  4729.          Deklaration Function OpenMainApplication(
  4730.                               EventHandler: EventReceiveProc;
  4731.                               modus: Integer; Name: NameString): Integer
  4732.  
  4733.          Funktion    Öffnet die Hauptapplikation
  4734.          
  4735.          Parameter   EventHandler Die Empfangsprozedur
  4736.                      modus        Modus  der  Hauptapplikation.   Wird  hier 
  4737.                                   anstatt 0 der  Wert  APP_NOFONT angegeben,
  4738.                                   wird kein skalierbarer Zeichensatz geladen
  4739.                      Name         Der Name der Applikation
  4740.                      
  4741.          Ergebnis    Das Ergebnis ist 0, falls die Hauptapplikation erfolg- 
  4742.                      reich geöffnet werden konnte, und ungleich  Null, wenn 
  4743.                      ein Fehler  auftrat.   Die möglichen  Fehler  sind  im 
  4744.                      Anhang spezifiziert 
  4745.  
  4746.          Hinweis     Der angegebene Name wird verwendet,  um die Dateinamen 
  4747.                      für  die  Initialisierungsdatei,  die Menübeschreibung 
  4748.                      und die allgemeine  Hilfe  zu erzeugen.   Daher stehen 
  4749.                      diese   Funktionen    erst   nach   dem   Öffnen   der 
  4750.                      Hauptapplikation  zur  Verfügung.  OpenMainApplication 
  4751.                      prüft zunächst, ob es zum ersten Mal ausgeführt  wird. 
  4752.                      Danach wird versucht, die Menübeschreibung einzulesen. 
  4753.                      Anschliessend wird die Initialisierungsdatei  geöffnet 
  4754.                      und  der  Eintrag  für  den verwendeten  Grafiktreiber 
  4755.  
  4756.  
  4757.  
  4758.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 72
  4759.  
  4760.                      gesucht.   Falls als modus nicht APP_NOFONT  angegeben 
  4761.                      wurde,  wird  zusätzlich  nach  dem  Eintrag  für  den 
  4762.                      skalierbaren  Zeichensatz  gesucht und der Zeichensatz 
  4763.                      geladen.   Sollte bis hierhin  kein Fehler aufgetreten 
  4764.                      sein,  wird  in den  Grafikmodus  geschaltet  und  der 
  4765.                      Menübalken angezeigt. 
  4766.  
  4767.  
  4768.         Beispiel     Begin
  4769.                        StillRunning := true;
  4770.                        LaunchResult := OpenMainApplication(HandleMsg,
  4771.                                                            APP_NOFONT,
  4772.                                                            ProjektName);
  4773.  
  4774.                        If LaunchResult = 0 then { erfolgreich gestartet }
  4775.                          begin
  4776.                            while StillRunning Do
  4777.                              begin
  4778.                                GetEvent(MyEvent);
  4779.                                DispatchMessage(MyEvent);
  4780.                              end;
  4781.                            CloseMainApplication;
  4782.                          end
  4783.                        Else
  4784.                          begin
  4785.                            Write('Programm kann nicht gestartet werden.')
  4786.                            WriteLn(' Fehler:',LaunchResult);
  4787.                          end;  
  4788.                      End.
  4789.  
  4790.                      Das Beispiel zeigt ein typisches  Hauptprogramm.   Die 
  4791.                      Empfangsprozedur  HandleMsg  wurde angemeldet  und das 
  4792.                      Flag APP_NOFONT wurde angegeben, um zu verhindern, daß 
  4793.                      ein skalierbarer  Zeichensatz  geladen wird.  Nach der 
  4794.                      Anmeldung tritt das Programm in eine Schleife ein, die 
  4795.                      fortwährend  Botschaften  mit  GetEvent  holt  und mit 
  4796.                      DispatchMessage weiterleitet. 
  4797.  
  4798.          Siehe auch  CloseMainApplication, GetEvent, DispatchMessage
  4799.  
  4800.          __________________________________________________________________
  4801.          OpenSubApplication                                             API
  4802.  
  4803.          Deklaration Function  OpenSubApplication(
  4804.                                EventHandler: EventReceiveProc;
  4805.                                Filter: Integer; Name: NameString;
  4806.                                x1,y1,x2,y2: Integer): Integer
  4807.                                
  4808.          Funktion    Meldet  einen  Klienten  an und  und weist  ihm  einen 
  4809.                      Viewport zu 
  4810.  
  4811.          Parameter   EventHandler Die Empfangsprozedur des Klienten
  4812.                      Filter       zur Zeit nicht verwendet, 0
  4813.                      Name         Der Name des Klienten
  4814.                      x1,y1,x2,y2  Die Koordinaten des Viewports
  4815.                      
  4816.          Ergebnis    Zurückgeliefert  wird  die  Identifikationsnummer  des 
  4817.                      Klienten.  Konnte der Klient nicht angemeldet  werden, 
  4818.                      etwa  weil die maximale  Anzahl  von Klienten  bereits 
  4819.                      erreicht war, wird -1 zurückgeliefert. 
  4820.  
  4821.          Hinweis     Der  Viewport  des  Klienten  wird  den  Viewport  der 
  4822.  
  4823.  
  4824.  
  4825.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 73
  4826.  
  4827.                      Hauptapplikation,   der  nach   wie  vor  aktiv   ist, 
  4828.                      überlappen.   Deshalb  muß  der  Viewport  der  Haupt- 
  4829.                      applikation beim Einsatz weiterer Klienten deaktiviert 
  4830.                      werden. 
  4831.  
  4832.          Siehe auch  CloseSubApplication, SuspendApplication, 
  4833.                      DispatchMessage 
  4834.  
  4835.          __________________________________________________________________
  4836.          OpenWindow                                                     API
  4837.  
  4838.          Deklaration Procedure OpenWindow(x1,y1,x2,y2 : integer);
  4839.          
  4840.          Funktion    Öffnet ein Fenster
  4841.          
  4842.          Parameter   x1,y1        Koordinaten der linken oberen Ecke
  4843.                      x2,y2        Koordinaten der rechten unteren Ecke
  4844.                      
  4845.          Hinweis     Vor dem Öffnen  des Fensters  wird der vom Fenster  zu 
  4846.                      verdeckende   Bildschiminhalt   gerettet.   Nach   dem 
  4847.                      Schliessen  mit CloseWindow  wird der Bildschirminhalt 
  4848.                      rekonstruiert.   Während das Fenster geöffnet ist, ist 
  4849.                      der aktuelle  Viewport  auf das Fenster gesetzt.   Das 
  4850.                      Fenster   besitzt   einen  Rahmen   und  eine  in  der 
  4851.                      Initialisierungsdatei   festgelegte  Hintergrundfarbe. 
  4852.                      Fenster   sollten  nur  zur  temporären   Anzeige  von 
  4853.                      Informationen  dienen  und grundsätzlich  einen Aufruf 
  4854.                      der Prozedur WaitConfirm vor dem Befehl zum Schliessen 
  4855.                      des  Fensters  enthalten.  WaitConfirm  empfängt  alle 
  4856.                      Ereignisse und stellt so sicher, daß kein Klient aktiv 
  4857.                      werden  kann,  während  das Fenster  offen  ist.  Beim 
  4858.                      Empfang  von ESCAPE,  ENTER oder der Betätigung  einer 
  4859.                      Maustaste kehrt WaitConfirm zurück. 
  4860.  
  4861.          Beispiel    OpenWindow(10,10,200,200);
  4862.                      Line(0,0,190,190,15);
  4863.                      WaitConfirm;
  4864.                      CloseWindow;
  4865.  
  4866.          Siehe auch  WaitConfirm, CloseWindow
  4867.  
  4868.          __________________________________________________________________
  4869.          OutTextAPI                                                  Kernel
  4870.  
  4871.          Deklaration Procedure OutTextAPI(x,y : Integer; InString : String;
  4872.                      Color, Attrib : Byte)
  4873.                      
  4874.          Funktion    Gibt einen Text im aktuell gesetzten Viewport aus
  4875.          
  4876.          Parameter   x,y          Koordinaten
  4877.                      InString     Der Text
  4878.                      Color        Farbe
  4879.                      Attrib       Das Attribut. Möglich sind folgende Werte
  4880.                                   0    Textausgabe normal
  4881.                                   1    Text unterstrichen
  4882.                                
  4883.          Hinweis     Es wird  der (nicht  skalierbare)  Standardzeichensatz 
  4884.                      verwendet. 
  4885.  
  4886.          Siehe auch  FontX, FontY
  4887.  
  4888.          __________________________________________________________________
  4889.  
  4890.  
  4891.  
  4892.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 74
  4893.  
  4894.          PortMaxX                                                    Kernel
  4895.  
  4896.          Deklaration Function PortMaxX : Integer
  4897.          
  4898.          Funktion    liefert die horizontale Grösse des aktuellen Viewports
  4899.          
  4900.          Ergebnis    Das Ergebnis  vom Typ Integer entspricht  der grössten 
  4901.                      Koordinate in X-Richtung des aktuellen Viewports.  Die 
  4902.                      kleinste Koordinate ist stets 0. 
  4903.  
  4904.          Hinweis     Diese Funktion sollte für Zeichenoperationen innerhalb 
  4905.                      eines Fensters bzw.  Viewports  verwendet  werden, die 
  4906.                      eine Anpassung erforderlich machen. 
  4907.  
  4908.          Siehe auch  PortMaxY, GetMaxX, GetMaxY
  4909.  
  4910.          __________________________________________________________________
  4911.          PortMaxY                                                    Kernel
  4912.  
  4913.          Deklaration Function PortMaxY : Integer
  4914.          
  4915.          Funktion    liefert die vertikale Grösse des aktuellen Viewports
  4916.          
  4917.          Ergebnis    Das Ergebnis  vom Typ Integer entspricht  der grössten 
  4918.                      Koordinate in X-Richtung des aktuellen Viewports.  Die 
  4919.                      kleinste Koordinate ist stets 0. 
  4920.  
  4921.          Hinweis     Diese Funktion sollte für Zeichenoperationen innerhalb 
  4922.                      eines Fensters bzw.  Viewports  verwendet  werden, die 
  4923.                      eine Anpassung erforderlich machen. 
  4924.  
  4925.          Siehe auch  PortMaxX, GetMaxX, GetMaxY
  4926.  
  4927.          __________________________________________________________________
  4928.          PostMessage                                                    API
  4929.  
  4930.          Deklaration Procedure PostMessage(TheMessage: EventTyp;
  4931.                                            TheID: integer)
  4932.                                            
  4933.          Funktion    sendet eine Nachricht an einen bestimmten Klienten
  4934.          
  4935.          Parameter   TheMessage   Die Nachricht
  4936.                      TheID        Die ID des Klienten
  4937.                      
  4938.          Hinweis     Beim  Einsatz  mehrerer   Klienten   kann  mit  dieser 
  4939.                      Prozedur  zwischen  den Klienten kommuniziert  werden, 
  4940.                      etwa  um einem  Klienten  die Botschaft  DoRedraw  zum 
  4941.                      Neuzeichnen zu senden. 
  4942.  
  4943.          Siehe auch  GetEvent, DispatchMessage, OpenSubApplication,
  4944.                      SuspendApplication
  4945.  
  4946.          __________________________________________________________________
  4947.          Rectangle                                                   Kernel
  4948.  
  4949.          Deklaration Procedure Rectangle(x1,y1,x2,y2: Integer; Color: Byte)
  4950.          
  4951.          Funktion    Zeichnet ein nicht ausgefülltes Rechteck
  4952.          
  4953.          Parameter   x1,y1        Koordinaten der linken oberen Ecke
  4954.                      x2,y2        Koordinaten der rechten unteren Ecke
  4955.                      
  4956.  
  4957.  
  4958.  
  4959.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 75
  4960.  
  4961.          Color       Farbe des Rechtecks
  4962.  
  4963.          __________________________________________________________________
  4964.          ReplaceMenuItem                                                API
  4965.  
  4966.          Deklaration ReplaceMenuItem(Menu: hMenu; ID: MenueID;
  4967.                      NewItem: String; IDNewItem: MenueID; NewHotKey: char)
  4968.                      
  4969.          Funktion    ersetzt einen Menüeintrag durch einen anderen
  4970.          
  4971.          Parameter  Menu          Zeiger auf das Menü
  4972.                     ID            Identifikationsnummer des zu  ersetzenden 
  4973.                                   Menüeintrages
  4974.                     NewItem       Titel des neuen Menüeintrages
  4975.                     IDNewItem     Identifikationsnummer  des  neuen   Menü-
  4976.                                   eintrages
  4977.                     NewHotKey     Abkürzungstaste (Hotkey)  des neuen Menü-
  4978.                                   eintrages
  4979.                                   
  4980.          Hinweis     
  4981.                      Der Titel des neuen Menüeintrages sollte ein Ampersand 
  4982.                      -Symbol  zur  Kennzeichnung  des  zu unterstreichenden 
  4983.                      Buchstabens   als  Hinweis   auf  die  Abkürzungstaste 
  4984.                      enthalten. 
  4985.  
  4986.          Beispiel    ReplaceMenuItem(GetMenu,101,'Zoom &Picture',102,'P')
  4987.          
  4988.                      ersetzt den Eintrag 101 im Hauptmenü durch einen neuen 
  4989.                      Eintrag mit der gleichen Identifikationsnummer und der 
  4990.                      Abkürzungstaste "P".
  4991.                      
  4992.          Siehe auch  GetMenu, EnableMenuItem, CheckMenuItem 
  4993.  
  4994.          __________________________________________________________________
  4995.          SetBackColor                                                Kernel
  4996.  
  4997.          Deklaration Procedure SetBackColor(NewColor: Word)
  4998.          
  4999.          Funktion    Setzt die Hintergrundfarbe
  5000.          
  5001.          Parameter   NewColor     Die neue Hintergrundfarbe
  5002.          
  5003.          Hinweis     Dieser  Aufruf  kann  nur  auf Karten  mit Farbpalette 
  5004.                      funktionieren.  Die Hintergrundfarbe  wird dabei durch 
  5005.                      Vertauschen der Paletteneinträge erzeugt. 
  5006.  
  5007.          __________________________________________________________________
  5008.          SetMousePos                                                 Kernel
  5009.  
  5010.          Deklaration Procedure SetMousePos(x,y : Integer)
  5011.          
  5012.          Funktion    setzt die Koordinaten der Maus
  5013.          
  5014.          Parameter   x,y          absolute   Koordinaten  der  neuen  Maus-
  5015.                                   position 
  5016.  
  5017.          Hinweis     Die Koordinaten  beziehen  sich nicht  auf den aktuell 
  5018.                      gesetzten Viewport. 
  5019.  
  5020.          Siehe auch  SetMouseRange
  5021.  
  5022.          __________________________________________________________________
  5023.  
  5024.  
  5025.  
  5026.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 76
  5027.  
  5028.          SetMouseRange                                               Kernel
  5029.  
  5030.          Deklaration Procedure SetMouseRange(x1,y1,x2,y2 : Integer)
  5031.          
  5032.          Funktion    definiert den Bewegungsbereich der Maus
  5033.          
  5034.          Parameter   x1,y1        Koordinaten  der  linken oberen  Ecke  des
  5035.                                   Bereiches
  5036.                      x2,y2        Koordinaten  der  rechten unteren Ecke des
  5037.                                   Bereiches
  5038.                                   
  5039.          Hinweis     Die Angabe der Koordinaten  erfolgt absolut, wird also 
  5040.                      nicht auf den aktuell gesetzten Viewport bezogen. 
  5041.  
  5042.          Beispiel    SetMouseRange(0 ,0 ,GetMaxX , GetMaxY)
  5043.          
  5044.                      definiert die gesamte Bildschirmfläche  als Bewegungs- 
  5045.                      bereich der Maus. 
  5046.  
  5047.          Siehe auch  SetMousePos
  5048.  
  5049.          __________________________________________________________________
  5050.          SetPalette                                                  Kernel
  5051.  
  5052.          Deklaration Procedure SetPalette(ThePalette,R,B,G: Byte)
  5053.          
  5054.          Funktion    Setzt einen Paletteneintrag neu
  5055.          
  5056.          Parameter   ThePalette   Index des Paletteneintrages
  5057.                      R, G, B      Anteile der Grundfarbwerte
  5058.                      
  5059.          Hinweis     Bei Grafikkarten  ohne Farbpalette  bleibt  ein Aufruf 
  5060.                      von SetPalette ohne Wirkung. 
  5061.  
  5062.          Siehe auch  GetPalette, GetMaxColors
  5063.  
  5064.          _________________________________________________________________
  5065.          SetPoint                                                   Kernel
  5066.  
  5067.          Deklaration Procedure SetPoint(x,y : Integer; Color: Byte)
  5068.          
  5069.          Funktion    Zeichnet einen Punkt
  5070.          
  5071.          Parameter   x,y          Koordinaten des Punktes
  5072.                      color        Farbe des Punktes
  5073.  
  5074.          __________________________________________________________________
  5075.          SetProjectName                                              Kernel
  5076.  
  5077.          Deklaration Procedure SetProjectName(TheName: String)
  5078.         
  5079.          Funktion    macht den Projektnamen dem System bekannt
  5080.         
  5081.          Parameter   TheName        Der Projektname
  5082.          
  5083.          Hinweis     Der Projektname  wird verwendet, um die Dateinamen für 
  5084.                      die Initialisierungs-,  Resource- und Hilfedateien  zu 
  5085.                      erzeugen.  Die  Prozedur  OpenMainApplication  bedient 
  5086.                      sich dieser Prozedur,  um den Projektnamen  bekannt zu 
  5087.                      machen.   Möchte  man  auf  die  Initialisierungsdatei 
  5088.                      zugreifen,   bevor  die  Prozedur  OpenMainApplication 
  5089.                      aufgerufen  wurde,  muß der Projektname  explizit  mit 
  5090.  
  5091.  
  5092.  
  5093.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 77
  5094.  
  5095.                      SetProjectName bekannt gemacht werden.  Diese Prozedur 
  5096.                      kann   auch   dazu   verwendet   werden,   auf  fremde 
  5097.                      Initialisierungsdateien zuzugreifen. 
  5098.  
  5099.          Siehe auch  OpenMainApplication
  5100.  
  5101.          __________________________________________________________________
  5102.          SetTheViewPort                                                 API
  5103.  
  5104.          Deklaration Procedure SetTheViewPort(ID: integer)
  5105.      
  5106.          Funktion    Setzt den Viewport eines Klienten
  5107.      
  5108.          Parameter   ID           Identifikationsnummer des Klienten
  5109.      
  5110.          Hinweis     Vor  dem Aufruf  der Empfangsprozedur  eines  Klienten 
  5111.                      wird  sein  Viewport  aktiviert.    Mit  Hilfe  dieser 
  5112.                      Prozedur  kann  ein  Klient  auch  den Viewport  eines 
  5113.                      anderen Klienten beschreiben. 
  5114.  
  5115.          Siehe auch  GetTheViewPort
  5116.  
  5117.          __________________________________________________________________
  5118.          ShowMouse                                                   Kernel
  5119.  
  5120.          Deklaration Procedure ShowMouse
  5121.          
  5122.          Funktion    Macht den Mauszeiger wieder sichtbar
  5123.          
  5124.          Hinweis     Nachdem   der  Mauszeiger   durch  einen  Aufruf   von 
  5125.                      HideMouse   etwa  während  häufiger  Grafikoperationen 
  5126.                      versteckt  wurde, kann der Mauszeiger  durch ShowMouse 
  5127.                      wieder sichtbar gemacht werden. 
  5128.  
  5129.                      Beachten   Sie,  daß  mehrere  Aufrufe  von  HideMouse 
  5130.                      genauso viele Aufrufe von ShowMouse  erforden,  um den 
  5131.                      Mauszeiger  wieder erscheinen  zu lassen.
  5132.  
  5133.          Siehe auch  HideMouse 
  5134.  
  5135.          __________________________________________________________________
  5136.          SuspendApplication                                             API
  5137.  
  5138.          Deklaration Procedure SuspendApplication(ID: integer)
  5139.          
  5140.          Funktion    Deaktiviert den Viewport eines Klienten
  5141.          
  5142.          Parameter   ID           Identifikationsnummer des Klienten
  5143.          
  5144.          Hinweis     Mausereignisse werden einem Klienten zugeschickt, wenn 
  5145.                      Sie innerhalb  seines Viewports  stattgefunden  haben. 
  5146.                      Mit   der   Prozedur   SuspendApplication   kann   der 
  5147.                      Dispatcher   angewiesen  werden,  den  Viewport  eines 
  5148.                      Klienten bei der Verteilung von Mausereignissen  nicht 
  5149.                      zu  berücksichtigen.   ActivateApplication   hebt  die 
  5150.                      Wirkung  eines Aufrufs  von SuspendApplication  wieder 
  5151.                      auf. 
  5152.  
  5153.          Siehe auch  ActivateApplication, GetMainID
  5154.  
  5155.          __________________________________________________________________
  5156.          SysWindow                                                      API
  5157.  
  5158.  
  5159.  
  5160.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 78
  5161.  
  5162.  
  5163.          Deklaration Procedure SysWindow(x,y: integer; errtext: string)
  5164.          
  5165.          Funktion    Gibt einen Text in einem Fenster aus
  5166.         
  5167.          Parameter   x,y          Position des Fensters
  5168.                      errtext      Der Text
  5169.                      
  5170.          Hinweis     Die Prozedur  SysWindow  wartet  nach  dem Öffnen  des 
  5171.                      Fensters   und  der  Ausgabe   des  Textes   auf  eine 
  5172.                      Bestätigung  des Benutzers.   Mit einer der Maustasten 
  5173.                      bzw.   ENTER  oder  ESCAPE  kann das Fenster  entfernt 
  5174.                      werden.    Bis   auf   die   andere   Hintergrundfarbe 
  5175.                      unterscheidet sich diese Prozedur nicht von ErrWindow. 
  5176.  
  5177.          Siehe auch  OpenWindow, WriteWin, ErrWindow
  5178.  
  5179.  
  5180.          __________________________________________________________________
  5181.          TheHelp                                                        API
  5182.  
  5183.          Deklaration Procedure TheHelp
  5184.         
  5185.          Funktion    Ruft die allgemeine Hilfe auf
  5186.          
  5187.          Hinweis     Die allgemeine Hilfe wird vom System aufgerufen,  wenn 
  5188.                      im Menübalken  die Hilfeoption  ausgewählt  wurde oder 
  5189.                      die Taste F1 betätigt  wurde, ohne daß ein Kontext für 
  5190.                      die kontextabhängige  Hilfe aktiv war.  Die allgemeine 
  5191.                      Hilfe  zeigt  in einem  Listendialog  eine  Liste  von 
  5192.                      Stichworten,   die  einer  Datei  mit  dem  Namen  des 
  5193.                      Projektes und der Endung '.hlp' entnommen wurden.  Aus 
  5194.                      dieser Liste können Stichworte ausgewählt werden. 
  5195.  
  5196.          Siehe auch  OnlineHelp
  5197.  
  5198.          __________________________________________________________________
  5199.          UpCase                                                      Kernel
  5200.  
  5201.          Deklaration Function UpCase(InChar: Char): Char;
  5202.          
  5203.          Funktion    liefert  zu einem  Zeichen  den entsprechenden  Gross- 
  5204.                      buchstaben 
  5205.  
  5206.          Parameter   InChar       Das Zeichen
  5207.          
  5208.          Ergebnis    Zurückgeliefert  wird der Grossbuchstabe.   Bei Zahlen 
  5209.                      und Symbolen wird keine Wandlung vorgenommen 
  5210.  
  5211.          Hinweis     Diese Funktion  überlagert  die Turbo-Pascal  Funktion 
  5212.                      Upcase  und  besitzt  zusätzlich  die Fähigkeit,  auch 
  5213.                      Umlaute  und  diakritische   Zeichen  konvertieren  zu 
  5214.                      können. 
  5215.  
  5216.          Siehe auch  UpString
  5217.  
  5218.          __________________________________________________________________
  5219.          UpdateListDialog                                               API
  5220.  
  5221.          Deklaration Procedure UpdateListDialog(rsc: ListDialog;
  5222.                                var ThisList: TheList; JustRedraw: Boolean) 
  5223.  
  5224.  
  5225.  
  5226.  
  5227.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 79
  5228.  
  5229.          Funktion    Zeichnet  einen  Listendialog  neu und liest ggf.  die 
  5230.                      Liste neu ein 
  5231.  
  5232.          Parameter   rsc          Der Verbundtyp ListDialog
  5233.                      ThisList     Ein  Zeiger  auf  einen  Verbund  vom Typ 
  5234.                                   TheListType 
  5235.                      JustRedraw   Der Wert FALSE gibt an, daß die Liste neu
  5236.                                   eingelesen werden soll
  5237.  
  5238.                      Die Variable rsc muß vor dem Öffnen des Listendialoges 
  5239.                      mit   InitListDialog    initialisiert   werden.    Die 
  5240.                      Zeigervariable   ThisList   muß  vor  dem  Öffnen  des 
  5241.                      Listendialoges  mit new erzeugt  werden  und nach  dem 
  5242.                      Schliessen   mit  dispose  freigegeben   werden.   Die 
  5243.                      dazugehörige  Verbundvariable  wird von InitListDialog 
  5244.                      belegt  und  enthält   unter  anderem  die  Liste  der 
  5245.                      Einträge. 
  5246.  
  5247.         Hinweis      Diese Funktion kann vorteilhaft dazu verwendet werden, 
  5248.                      Dialoge zu schreiben, die es erlauben, aus einer Liste 
  5249.                      Elemente   zu  entfernen.    Nach  der  Auswahl  eines 
  5250.                      Elementes  mit DoListDialog  kann das Element gelöscht 
  5251.                      werden;  nach einem Aufruf  von UpdateListDialog  wird 
  5252.                      die aktualisierte Liste angezeigt, ohne daß der Dialog 
  5253.                      erst geschlossen und wieder geöffnet werden muß. 
  5254.  
  5255.         Beispiel     procedure DelKontrastKurve;
  5256.                      Var MyRsc  : ListDialog;
  5257.                          LaList : TheList;
  5258.                          result : DlgSet;
  5259.                          LFname : NameString;
  5260.                      begin
  5261.                        MyRsc.text       := 'Datei auswählen:';
  5262.                        MyRsc.ItemWidth  :=  20;
  5263.                        MyRsc.ListLength :=   6;
  5264.                        MyRsc.xorg       := 160;
  5265.                        MyRsc.yorg       :=  50;
  5266.                        MyRsc.topic      := 'Kontrast löschen';
  5267.                        MyRsc.GetFirst   := GetFirstKontrast;
  5268.                        MyRsc.GetNext    := GetNextKontrast;
  5269.                        result := empty;
  5270.                        new(LaList);
  5271.                        InitListDialog(MyRsc,LaList);
  5272.                          repeat
  5273.                            result := DoListDialog(MyRsc,LFname,LaList);
  5274.                            if result = success then
  5275.                              begin
  5276.                                DelKontrast(LFname);
  5277.                                UpdateListDialog(MyRsc,LaList,false);
  5278.                              end;
  5279.                          until (result = empty) or (result = escaped);
  5280.                        CloseListDialog;
  5281.                        dispose(LaList);
  5282.                      end;
  5283.  
  5284.                      Das  Beispielprogramm   erlaubt   die  Auswahl   eines 
  5285.                      Elementes  aus  der  Liste,  löscht  das entsprechende 
  5286.                      Element,  und  aktualisiert  mit UpdateListDialog  die 
  5287.                      angezeigte Liste.  Es können solange Elemente gelöscht 
  5288.                      werden,  bis  der Dialog  abgebrochen  wird  oder  ein 
  5289.                      leeres Element ausgewählt wird. 
  5290.  
  5291.  
  5292.  
  5293.  
  5294.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 80
  5295.  
  5296.          Siehe auch  InitListDialog, DoListDialog, CloseListDialog
  5297.  
  5298.          __________________________________________________________________
  5299.          UpString                                                    Kernel
  5300.  
  5301.          Deklaration Procedure UpString(Var TheString: String)
  5302.          
  5303.          Funktion    Wandelt einen String in Grossbuchstaben
  5304.          
  5305.          Parameter   TheString    enthält den zu wandelnden String
  5306.          
  5307.          Hinweis     Diese Prozedur  bedient  sich der Funktion  UpCase und 
  5308.                      ist daher  auch  in der Lage,  Umlaute  und diakrische 
  5309.                      Zeichen zu konvertieren. 
  5310.  
  5311.          Siehe auch  UpCase
  5312.  
  5313.          __________________________________________________________________
  5314.          WaitConfirm                                                    API
  5315.  
  5316.          Deklaration Procedure WaitConfirm
  5317.         
  5318.          Funktion    liest solange Ereignisse,  bis ENTER, ESCAPE oder eine 
  5319.                      Maustaste betätigt wurde 
  5320.  
  5321.          Hinweis     Diese   Prozedur   wird  dazu  verwendet,   bei  einem 
  5322.                      geöffneten Fenster auf eine Bestätigung  des Anwenders 
  5323.                      zu warten,  bevor das Fenster  geschlossen  wird.  Die 
  5324.                      Verwendung  von WaitConfirm  stellt sicher,  daß keine 
  5325.                      Klienten  aktiv  werden  können,  während  das Fenster 
  5326.                      geöffnet ist. 
  5327.  
  5328.         Siehe auch  OpenWindow
  5329.  
  5330.          __________________________________________________________________
  5331.          WriteWin                                                       API
  5332.  
  5333.          Deklaration Procedure WriteWin(str:  string; x,y:  integer;
  5334.                                         Color: Byte) 
  5335.  
  5336.          Funktion    Gibt einen Text im aktuell gesetzten Viewport aus
  5337.          
  5338.          Parameter   str          Der Text
  5339.                      x,y          Position 
  5340.                      Color        Farbe
  5341.                      
  5342.          Hinweis     Die  Position  wird  hier  nicht  in Pixelkoordinaten, 
  5343.                      sondern in Cursorkoordinaten angegeben.  X und Y geben 
  5344.                      also Spalte und Zeile an. 
  5345.  
  5346.          Beispiel    WriteWin('hello  world',1,1,15)
  5347.          
  5348.                      druckt  den angegebenen  Text in weisser  Farbe in die 
  5349.                      erste Zeile des Viewports.
  5350.          
  5351.          Siehe auch  OutTextAPI 
  5352.  
  5353.          __________________________________________________________________
  5354.          XORBAR                                                      Kernel
  5355.  
  5356.          Deklaration Procedure XORBar(x1,y1,x2,y2: Integer) 
  5357.  
  5358.  
  5359.  
  5360.  
  5361.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 81
  5362.  
  5363.          Funktion    Invertiert eine ausgefüllte rechteckige Fläche
  5364.          
  5365.          Parameter   x1,y1        Koordinaten der linken oberen Ecke
  5366.                      x2,y2        Koordinaten der rechten unteren Ecke
  5367.                      
  5368.          Hinweis     XORBar invertiert eine ausgefüllte  recheckige  Fläche 
  5369.                      in  der  Graphik.    Dazu  wird   eine   Exklusiv-Oder 
  5370.                      Verknüpfung verwendet. Wird XORBar noch einmal mit den 
  5371.                      gleichen   Parametern   aufgerufen,   wird  durch  die 
  5372.                      doppelte Invertierung der Ausgangszustand  der Graphik 
  5373.                      wieder  hergestellt.   Dieser  Effekt  kann  z.B.  zur 
  5374.                      Selektierung  eines Objektes benutzt werden.
  5375.                      
  5376.          Beispiel    XORBar(0,0,100,100); {Recheck invertiert}
  5377.                      WaitConfirm; 
  5378.                      XORBar(0,0,100,100); {Invertierung wieder aufgeheben } 
  5379.  
  5380.          Siehe auch  Bar, XORLine, XORRectangle
  5381.  
  5382.          __________________________________________________________________
  5383.          XORLine                                                     Kernel
  5384.  
  5385.          Deklaration Procedure XORLine(x1,y1,x2,y2  :  Integer; 
  5386.                                        Thickness : Byte) 
  5387.  
  5388.          Funktion    Invertiert eine Linie
  5389.          
  5390.          Parameter   x1,y1          Startpunkt der Linie
  5391.                      x2,y2          Endpunkt der Linie
  5392.                     
  5393.          Hinweis     XORLine  invertiert  eine Linie in der Graphik.   Dazu 
  5394.                      wird eine Exklusiv-Oder  Verknüpfung  verwendet.  Wird 
  5395.                      XORLine  noch  einmal  mit  den  gleichen   Parametern 
  5396.                      aufgerufen,  wird durch die doppelte Invertierung  der 
  5397.                      Ausgangszustand der Graphik wieder hergestellt. Dieser 
  5398.                      Effekt  kann  z.B.  zur  Selektierung  eines  Objektes 
  5399.                      benutzt werden.
  5400.                      
  5401.          Beispiel    XORLine(0,0,100,100); {Linie invertieren   }
  5402.                      WaitConfirm;
  5403.                      XORLine(0,0,100,100); {Invertierung wieder aufheben } 
  5404.  
  5405.          Siehe auch  Line, XORBar, XORRectangle
  5406.  
  5407.          __________________________________________________________________
  5408.          XORRectangle                                                Kernel
  5409.  
  5410.          Deklaration Procedure XORRectangle(x1,y1,x2,y2  :  Integer; 
  5411.                                             Thickness : Byte) 
  5412.  
  5413.          Funktion    Invertiert ein nicht ausgefülltes Rechteck
  5414.         
  5415.          Parameter   x1,y1          linke obere Ecke des Rechteckes
  5416.                      x2,y2          rechte untere Ecke des Rechteckes
  5417.                     
  5418.          Hinweis     XORRectangle invertiert ein nicht ausgefülltes Recheck 
  5419.                      in  der  Graphik.    Dazu  wird   eine   Exklusiv-Oder 
  5420.                      Verknüpfung verwendet.  Wird XORRectangle  noch einmal 
  5421.                      mit den gleichen Parametern aufgerufen, wird durch die 
  5422.                      doppelte Invertierung der Ausgangszustand  der Graphik 
  5423.                      wieder  hergestellt.   Dieser  Effekt  kann  z.B.  zur 
  5424.                      Selektierung  eines Objektes benutzt werden.
  5425.  
  5426.  
  5427.  
  5428.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 82
  5429.  
  5430.                      
  5431.          Beispiel    XORRectangle(0,0,100,100); {Recheck  invertieren   } 
  5432.                      WaitConfirm;
  5433.                      XORRectangle(0,0,100,100); {Invertierung wieder
  5434.                                                  aufheben } 
  5435.  
  5436.          Siehe auch  Rectangle, XORBar, XORLine
  5437.  
  5438.  
  5439.  
  5440.  
  5441.  
  5442.  
  5443.  
  5444.  
  5445.  
  5446.  
  5447.  
  5448.  
  5449.  
  5450.  
  5451.  
  5452.  
  5453.  
  5454.  
  5455.  
  5456.  
  5457.  
  5458.  
  5459.  
  5460.  
  5461.  
  5462.  
  5463.  
  5464.  
  5465.  
  5466.  
  5467.  
  5468.  
  5469.  
  5470.  
  5471.  
  5472.  
  5473.  
  5474.  
  5475.  
  5476.  
  5477.  
  5478.  
  5479.  
  5480.  
  5481.  
  5482.  
  5483.  
  5484.  
  5485.  
  5486.  
  5487.  
  5488.  
  5489.  
  5490.  
  5491.  
  5492.  
  5493.  
  5494.  
  5495.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 83
  5496.  
  5497.          Anhang A  Konfigurationsmöglichkeiten
  5498.  
  5499.  
  5500.               Die folgende Auflistung beschreibt die vom System verwendeten 
  5501.               Einträge in der Initialisierungsdatei.  Beachten Sie, daß mit 
  5502.               Ausnahme  des  Eintrages  Video  im Abschnitt  Hardware  alle 
  5503.               Angaben  fakultativ  sind.  Fehlen  diese Angaben,  verwendet 
  5504.               deLite  sinnvolle  Vorbelegungen.    Zur  Deklaration   eines 
  5505.               Abschnittes  ist der Name des Abschnittes in eckigen Klammern 
  5506.               zu schreiben. 
  5507.  
  5508.          Der Abschnitt Paths
  5509.          
  5510.               Im Abschnitt  Paths  können  Pfadangaben  auf eine Reihe  von 
  5511.               Dateien definiert  werden.  Fehlen die Pfadangaben,  versucht 
  5512.               deLite,  die jeweilige  Datei aus dem aktuell gesetzten  Ver- 
  5513.               zeichnis zu lesen.  Dieser Abschnitt  ist nützlich, falls Sie 
  5514.               mehrere deLite-Applikationen  einsetzen  und die Videotreiber 
  5515.               und Zeichensatzdateien  nur ein einziges  Mal auf Ihrer Fest- 
  5516.               platte speichern möchten. 
  5517.  
  5518.               VDIDir    definiert den Pfad auf die Grafiktreiber 
  5519.  
  5520.               FontDir   definiert den Pfad auf die Zeichensatzdateien 
  5521.  
  5522.               SwapDir   definiert  den  Pfad  für  die  vom Speichermanager 
  5523.                         temporär erzeugten Auslagerungsdateien.  Alternativ 
  5524.                         können Sie auch mit Hilfe des DOS-Befehls  SET eine 
  5525.                         Environment-Variable  mit dem Namen  TEMP erzeugen, 
  5526.                         die den Pfad für die Auslagerungsdateien definiert. 
  5527.                         Verwenden  Sie  niemals  ein Diskettenlaufwerk  zum 
  5528.                         Auslagern! 
  5529.  
  5530.          Der Abschnitt Hardware
  5531.          
  5532.               Im Abschnitt  Hardware wird der zu verwendende  Grafiktreiber 
  5533.               und ggf.  der zu ladende skalierbare  Zeichensatz  definiert. 
  5534.               DeLite nimmt keine automatische  Erkennung  der installierten 
  5535.               Grafikkarte  vor; diese Angabe  ist also zwingend  notwendig. 
  5536.               Der skalierbare  Zeichensatz  wird nicht benötigt,  falls Sie 
  5537.               der  Prozedur  OpenMainApplication  als  modus  die Konstante 
  5538.               APP_NOFONT  übergeben.   Anderenfalls  ist auch diese  Angabe 
  5539.               zwingend erforderlich. 
  5540.  
  5541.               Video     definiert den zu verwendenden Grafiktreiber 
  5542.  
  5543.               Font      definiert den zu verwendenden skalierbaren Zeichen- 
  5544.                         satz 
  5545.  
  5546.          Der Abschnitt memory
  5547.  
  5548.               Im Abschnitt  memory  kann die Speicherverwaltung  von deLite 
  5549.               parametrisiert werden. Hier können Sie angeben, unter welchen 
  5550.               Bedingungen  die Speicherverwaltung  EMS oder  die Festplatte 
  5551.               verwenden soll, anstatt den Heap zu benutzen. 
  5552.  
  5553.               HeapMin        definiert,  wieviel  Heap-Speicher  mindestens 
  5554.                              freigelassen werden soll. Nachdem diese Grenze 
  5555.                              erreicht ist, versucht die Speicherverwaltung, 
  5556.                              EMS-Speicher  zu  verwenden.  Als  Vorbelegung 
  5557.                              verwendet   deLite   den  Wert  262144,   also 
  5558.                              256kByte.   Wenn Sie hier einen  unrealistisch 
  5559.  
  5560.  
  5561.  
  5562.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 84
  5563.  
  5564.                              hohen Wert angeben,  verwendet  deLite niemals 
  5565.                              Heap-Speicher zum Auslagern. 
  5566.  
  5567.               EMSPagesMin    definiert,  wie viele EMS-Seiten  freigelassen 
  5568.                              werden sollen.  Nachdem  diese Grenze erreicht 
  5569.                              ist, versucht die Speicherverwaltung, Speicher 
  5570.                              auf  die  Festplatte  auszulagern.   Als  Vor- 
  5571.                              belegung verwendet deLite den Wert 4. Wenn Sie 
  5572.                              hier einen unrealistisch  hohen  Wert angeben, 
  5573.                              verwendet deLite niemals EMS-Speicher zum Aus- 
  5574.                              lagern.  Beachten Sie, daß deLite nur dann EMS 
  5575.                              verwenden  kann, wenn ein 64kByte großer Page- 
  5576.                              Frame zur Verfügung steht. Der Page-Frame gibt 
  5577.                              die Größe des Fensters im Speicher an, das zur 
  5578.                              Einblendung   von  EMS-Seiten   zur  Verfügung 
  5579.                              steht.  Auf älteren EMS-Karten, wie sie in XT- 
  5580.                              Rechnern  eingesetzt  wurden,  steht unter Um- 
  5581.                              ständen nur ein 16KByte großer Page-Frame  zur 
  5582.                              Verfügung. 
  5583.  
  5584.               DiskMin        definiert, wieviel Festplattenplatz von deLite 
  5585.                              freigelassen werden soll. Nachdem diese Grenze 
  5586.                              erreicht  ist,  bricht  die Speicherverwaltung 
  5587.                              von deLite  das Programm  mit einem  Laufzeit- 
  5588.                              fehler ab.  Als Vorbelegung  verwendet  deLite 
  5589.                              den Wert 262144, das sind 256KByte. 
  5590.  
  5591.          Der Abschnitt colors
  5592.          
  5593.               Im Abschnitt  colors  können  die  von deLite  für die  Bild- 
  5594.               schirmdarstellung  verwendeten  Farben definiert werden.  Die 
  5595.               Angabe muß in numerischer Form erfolgen und den Möglichkeiten 
  5596.               der von Ihnen verwendeten Grafikkarte entsprechen.   Für VGA- 
  5597.               Karten  sind bei einem 16-Farben  Treiber  die Werte 0 bis 15 
  5598.               erlaubt. 
  5599.  
  5600.               ScrnBkGnd      definiert   die  Farbe  des  Bildschirmhinter- 
  5601.                              grundes. Die Vorbelegung ist 0 (schwarz) 
  5602.  
  5603.               MenueBkGnd     definiert die Hintergrundfarbe der Menüs 
  5604.  
  5605.               MenueText      definiert die Farbe der Menütexte 
  5606.  
  5607.               HighBkGnd      definiert   die  Hintergrundfarbe   markierter 
  5608.                              Menüpunkte 
  5609.  
  5610.               HighText       definiert die Farbe markierter Menüpunkte
  5611.               
  5612.               DisableText    definiert die Farbe inaktiver Menüpunkte
  5613.               
  5614.               MenueFrame     definiert die Farbe der Umrahmung von Menüs
  5615.               
  5616.               DlgBkGnd       definiert  die  Hintergrundfarbe  von  Dialog- 
  5617.                              feldern 
  5618.  
  5619.               DlgFrame       definiert  die Farbe der Umrahmung von Dialog- 
  5620.                              feldern 
  5621.  
  5622.               DlgMsg         definiert  die  Farbe  von Statusmeldungen  in 
  5623.                              Dialogfeldern 
  5624.  
  5625.               DlgText        definiert  die  Farbe  von Texten  in Editier- 
  5626.  
  5627.  
  5628.  
  5629.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 85
  5630.  
  5631.                              feldern 
  5632.  
  5633.               DlgEditBkGnd   definiert  die  Hintergrundfarbe  von Editier- 
  5634.                              feldern 
  5635.  
  5636.               DlgListText    definiert  die  Farbe  von  Texten  in Listen- 
  5637.                              auswahlfeldern 
  5638.  
  5639.               DlgListBkGnd   definiert  die  Hintergrundfarbe  von  Listen- 
  5640.                              auswahlfeldern 
  5641.  
  5642.               DlgListHiText  definiert  die Farbe  markierter  Einträge  in 
  5643.                              Listenauswahlfeldern 
  5644.  
  5645.               DlgListHiBkGnd definiert   die   Hintergrundfarbe   markierer 
  5646.                              Einträge in Listenauswahlfeldern 
  5647.  
  5648.               ErrorText      definiert  die  Farbe  von  Texten  in Fehler- 
  5649.                              fenstern 
  5650.  
  5651.               ErrorBkGnd     definiert  die  Hintergrundfarbe  von  Fehler- 
  5652.                              fenstern 
  5653.  
  5654.               SystemText     definiert  die Farbe  von Texten  in Meldungs- 
  5655.                              fenstern 
  5656.  
  5657.               Die Tabelle enthält die Farbnummern  einer EGA/VGA-Karte  mit 
  5658.               16 Farben: 
  5659.  
  5660.               0    schwarz         8   dunkelgrau
  5661.               1    blau            9   hellblau
  5662.               2    grün           10   hellgrün
  5663.               3    türkis         11   helles türkis
  5664.               4    rot            12   hellrot
  5665.               5    fuchsin        13   helles fuchsinrot
  5666.               6    braun          14   gelb
  5667.               7    hellgrau       15   weiss
  5668.  
  5669.  
  5670.  
  5671.  
  5672.  
  5673.  
  5674.  
  5675.  
  5676.  
  5677.  
  5678.  
  5679.  
  5680.  
  5681.  
  5682.  
  5683.  
  5684.  
  5685.  
  5686.  
  5687.  
  5688.  
  5689.  
  5690.  
  5691.  
  5692.  
  5693.  
  5694.  
  5695.  
  5696.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 86
  5697.  
  5698.          Anhang B  Fehlermeldungen
  5699.  
  5700.          
  5701.               Die  nachfolgende   Tabelle  beschreibt   die  Ursachen   der 
  5702.               möglichen  von deLite gemeldeten  Fehler.   Die Fehlernummern 
  5703.               werden an drei verschiedenen Stellen verwendet: 
  5704.  
  5705.               Die Prozedur  OpenMainApplication  liefert  als unmittelbares 
  5706.               Ergebnis eine Fehlernummer ungleich 0, falls Ihre Applikation 
  5707.               nicht  gestartet  werden  konnte.   Mit  Hilfe  der  Funktion 
  5708.               KernelError  kann  nach der Ausführung  von Kernel-Funktionen 
  5709.               der    Fehlerstatus    erfragt    werden.     Die    Prozedur 
  5710.               OpenMainApplication bedient sich dieser Möglichkeit. 
  5711.  
  5712.               Sollte es während der Ausführung  Ihrer Applikation  zu einem 
  5713.               fatalen  Fehler kommen,  gibt das deLite-Laufzeitsystem  nach 
  5714.               dem  Abbruch  des  Programms  und des Zurückschaltens  in den 
  5715.               Textmodus eine Fehlernummer aus. 
  5716.  
  5717.               Falls   Sie   in   Ihrer   Applikation   das   Ergebnis   von 
  5718.               OpenMainApplication  im Klartext ausgeben möchten, können Sie 
  5719.               sich  des  Units  ERRORS  bedienen,   das  die  im  folgenden 
  5720.               beschriebenen  Fehlertexte zusammen mit einer Ausgabeprozedur 
  5721.               enthält. 
  5722.  
  5723.               1 Initialisierungsdatei nicht gefunden 
  5724.  
  5725.                    Die  Initialisierungsdatei  existiert  nicht  im aktuell 
  5726.                    gesetzten  Verzeichnis.   Falls Sie versucht  haben, die 
  5727.                    Applikation  aus  der  Entwicklungsumgebung   von  Turbo 
  5728.                    Pascal heraus zu starten,  stellen Sie sicher,  daß eine 
  5729.                    Kopie der Initialisierungsdatei  im gleichen Verzeichnis 
  5730.                    existiert,  in dem sich  auch  die  Quelltexte  zu Ihrer 
  5731.                    Applikation befinden. 
  5732.  
  5733.               2    Hardware-Block nicht gefunden 
  5734.  
  5735.                    Die Initialisierungsdatei  existiert, aber der Abschnitt 
  5736.                    Hardware konnte nicht gefunden werden. 
  5737.  
  5738.               3    Videotreiber nicht spezifiziert 
  5739.  
  5740.                    In  der  Initialisierungsdatei   wurden   der  Abschnitt 
  5741.                    Hardware und das Schlüsselwort  Video gefunden, nach dem 
  5742.                    Schlüsselwort   allerdings  kein  Grafiktreiber   spezi- 
  5743.                    fiziert. 
  5744.  
  5745.               4    Zeichensatz nicht spezifiziert
  5746.               
  5747.                    In  der  Initialisierungsdatei   wurden   der  Abschnitt 
  5748.                    Hardware und das Schlüsselwort  Font gefunden,  nach dem 
  5749.                    Schlüsselwort  ist allerdings  kein  Zeichensatz  spezi- 
  5750.                    fiziert. 
  5751.  
  5752.               5    Schlüsselwort nicht gefunden, oder Parameter leer
  5753.               
  5754.                    Bei der Suche  nach  einem  anwenderdefinierten  Eintrag 
  5755.                    wurde das angegebene Schlüsselwort  nicht gefunden, oder 
  5756.                    es ist  kein  Parameter  hinter  dem  Schlüsselwort  an- 
  5757.                    gegeben. 
  5758.  
  5759.               6    Block nicht gefunden
  5760.  
  5761.  
  5762.  
  5763.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 87
  5764.  
  5765.         
  5766.                    Bei der Suche  nach  einem  anwenderdefinierten  Eintrag 
  5767.                    konnte der angegebene Abschnitt nicht gefunden werden. 
  5768.  
  5769.              10    Videotreiber nicht gefunden
  5770.              
  5771.                    Der in der Initialisierungsdatei angegebene Videotreiber 
  5772.                    konnte  nicht  gefunden  werden.   Das kann drei  Gründe 
  5773.                    haben.  Erstens, Sie haben im Abschnitt Paths hinter dem 
  5774.                    Schlüsselwort VDIDir ein falsches Verzeichnis angegeben. 
  5775.                    Zweitens,  Sie haben kein Verzeichnis  angegeben und der 
  5776.                    Videotreiber  befindet  sich  nicht  im  aktuellen  Ver- 
  5777.                    zeichnis.  Oder, Sie haben einen Videotreiber angegeben, 
  5778.                    der nicht existiert. 
  5779.  
  5780.              11    Kein gültiger Videotreiber
  5781.              
  5782.                    Der angegebene Videotreiber ist funktionsunfähig.  Wahr- 
  5783.                    scheinlich ist die Datei zerstört worden. 
  5784.  
  5785.              12    Falsche Videotreiberversion
  5786.              
  5787.                    Die Version  des angegeben  Videotreibers  ist veraltet. 
  5788.                    Benutzen  Sie bitte eine neuere Version.  Mit dem Hilfs- 
  5789.                    programm  WHATDRV  können  Sie  die  Versionsnummer  des 
  5790.                    Treibers ermitteln. 
  5791.  
  5792.              13    Zeichensatz nicht gefunden
  5793.              
  5794.                    Der in der Initialisierungsdatei  angegebene skalierbare 
  5795.                    Zeichensatz konnte nicht gefunden werden.  Das kann drei 
  5796.                    Gründe  haben.   Erstens,  Sie haben im Abschnitt  Paths 
  5797.                    hinter  dem  Schlüsselwort  FontDir  ein  falsches  Ver- 
  5798.                    zeichnis angegeben. Zweitens, Sie haben kein Verzeichnis 
  5799.                    angegeben und der skalierbare Zeichensatz  befindet sich 
  5800.                    nicht im aktuellen  Verzeichnis.   Oder, Sie haben einen 
  5801.                    skalierbaren Zeichensatz angegeben, der nicht existiert. 
  5802.  
  5803.              14    Kein gültiger Zeichensatz
  5804.              
  5805.                    Der angegebene  skalierbare  Zeichensatz  ist funktions- 
  5806.                    unfähig. Wahrscheinlich ist die Datei zerstört worden. 
  5807.  
  5808.              15    Falsche Zeichensatzversion
  5809.              
  5810.                    Die Version des angegebenen Zeichensatzes  ist veraltet. 
  5811.                    Bitte benutzen Sie eine neuere Version. 
  5812.  
  5813.              20    Menü-Ressourcedatei nicht gefunden
  5814.              
  5815.                    Die Menüressource  existiert  nicht  oder befindet  sich 
  5816.                    nicht im aktuellen  Verzeichnis.   Unter Umständen haben 
  5817.                    Sie vergessen, die Menübeschreibung zu übersetzen. 
  5818.  
  5819.              21    Menü-Ressourcedatei ist ungültig
  5820.              
  5821.                    Die Menüressource  hat nicht das richtige Format.  Unter 
  5822.                    Umständen  ist die Datei zerstört worden, oder Sie haben 
  5823.                    der  Menübeschreibung  im Textformat  die Endung  '.rsc' 
  5824.                    gegeben. 
  5825.  
  5826.              22    Fehler beim Laden der Menü-Ressourcedatei
  5827.  
  5828.  
  5829.  
  5830.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 88
  5831.  
  5832.              
  5833.                    Während  des  Ladevorgangs  der  Menüressource  ist  ein 
  5834.                    Fehler aufgetreten. Unter Umständen reichte der Arbeits- 
  5835.                    speicher  nicht, um den Menübaum im Speicher aufzubauen, 
  5836.                    oder die Menüdatei ist nicht lesbar. 
  5837.  
  5838.              30    Hauptapplikation ist bereits gestartet
  5839.              
  5840.                    Sie  haben  versucht,   ein  zweites  Mal  die  Prozedur 
  5841.                    OpenMainApplication   aufzurufen.    Dies  stellt  einen 
  5842.                    schwerwiegenden  Programmierfehler  dar  und  führt  zum 
  5843.                    sofortigen Abbruch des Programms. 
  5844.  
  5845.              31    Keine Applikation gestartet
  5846.              
  5847.                    Sie haben versucht,  die Dienste des API in Anspruch  zu 
  5848.                    nehmen,    ohne   zuvor    mit   Hilfe    der   Prozedur 
  5849.                    OpenMainApplication   die  Empfangsprozedur  anzumelden. 
  5850.                    Dies stellt einen Programmierfehler dar. 
  5851.  
  5852.              32    Dispatcher versagt: Event kann nicht zugeordnet werden
  5853.               
  5854.                    Der Dispatcher konnte ein Event nicht weiterleiten.  Sie 
  5855.                    haben einen Fehler in deLite entdeckt; bitte informieren 
  5856.                    Sie uns. 
  5857.  
  5858.              33    Dispatcher versagt: Ungültige Adresse
  5859.              
  5860.                    Die beim Anmelden eines Klienten angegebene  Adresse ist 
  5861.                    ungültig.   Dies kann nur durch  einen  internen  Fehler 
  5862.                    geschehen, bitte informieren Sie uns. 
  5863.  
  5864.              40    Zu wenig Heap-Speicher 
  5865.  
  5866.                    Die  Speicherverwaltung   benötigt   bis  zu  64K  Heap- 
  5867.                    Speicher,  um arbeiten zu können.  Sie haben weniger als 
  5868.                    64K Heap-Speicher für deLite übrig gelassen. 
  5869.  
  5870.              41    Zu wenig Speicherplatz zum Auslagern auf Festplatte 
  5871.  
  5872.                    Ihre Festplatte hat zu wenig Speicherplatz,  um die Aus- 
  5873.                    lagerungsdateien  aufnehmen  zu können.  Unter Umständen 
  5874.                    haben  Sie  in  der  Initialisierungsdatei  im Abschnitt 
  5875.                    memory  den Parameter  DiskMin  auf einen  zu hohen Wert 
  5876.                    gesetzt. 
  5877.  
  5878.              42    Auslagern auf Festplatte nicht möglich 
  5879.  
  5880.                    Der  angegebene  Pfad  für  die Auslagerungsdateien  ist 
  5881.                    ungültig.   Prüfen Sie die Environmentvariable  TEMP und 
  5882.                    den  Eintrag   SwapPath   im  Abschnitt   paths  in  der 
  5883.                    Initialisierungsdatei. 
  5884.  
  5885.              43    Fensterstack ist übergelaufen 
  5886.  
  5887.                    Sie haben versucht,  mehr Fenster zu öffnen, als auf dem 
  5888.                    Fensterstack  Platz finden.  In der Standardversion  hat 
  5889.                    der Fensterstack  Platz  für 16 Fenstersegmente,  aller- 
  5890.                    dings  kann ein Fenster  je nach Größe mehrere  Segmente 
  5891.                    benötigen.   Falls  Sie im Besitz  der Quelltexte  sind, 
  5892.                    ändern Sie die Konstante  NWindows im API und übersetzen 
  5893.                    Sie deLite neu. 
  5894.  
  5895.  
  5896.  
  5897.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 89
  5898.  
  5899.  
  5900.              44    Speicherblock nicht wiedergefunden 
  5901.  
  5902.                    Die Speicherverwaltung  kann einen  Speicherblock  nicht 
  5903.                    wiederfinden.   Unter dem angegebenen  Handle  existiert 
  5904.                    kein   Eintrag   in  der  Seitentabelle   der  Speicher- 
  5905.                    verwaltung.   Sie haben einen internen Fehler von deLite 
  5906.                    festgestellt, bitte informieren Sie uns. 
  5907.  
  5908.              45    Auslagerungsdatei nicht wiedergefunden 
  5909.  
  5910.                    Die Speicherverwaltung kann eine Auslagerungsdatei nicht 
  5911.                    wiederfinden.  Unter Umständen hat Ihr Programm eine der 
  5912.                    Auslagerungsdateien gelöscht. 
  5913.  
  5914.              46    EMS-Seite nicht wiedergefunden 
  5915.  
  5916.                    Die Speicherverwaltung  kann eine Speicherseite nicht im 
  5917.                    EMS finden.   Falls Sie selbst EMS verwenden,  haben Sie 
  5918.                    unter Umständen eine Seite freigegeben,  die Ihnen nicht 
  5919.                    gehörte. 
  5920.  
  5921.              47    Pageframe für EMS zu klein oder nicht vorhanden 
  5922.  
  5923.                    Die  Speicherverwaltung  von  deLite  kann  EMS nur ver- 
  5924.                    wenden, wenn ein zusammenhängender Pageframe von 64k zur 
  5925.                    Verfügung steht. 
  5926.  
  5927.              48    Ungültiges Speicherhandle 
  5928.  
  5929.                    Die  Speicherverwaltung  hat  eine  Inkonsistenz  in der 
  5930.                    Seitentabelle festgestellt. Bitte informieren Sie uns. 
  5931.  
  5932.              50    Grafiktreiber nicht geladen 
  5933.  
  5934.                    Sie haben versucht, den Grafiktreiber  zu benutzen, ohne 
  5935.                    daß   der   Grafiktreiber   zuvor   von   der   Funktion 
  5936.                    OpenMainApplication  geladen  wurde.   Dies stellt einen 
  5937.                    schwerwiegenden  Programierfehler   dar  und  führt  zum 
  5938.                    sofortigen Abbruch des Programms. 
  5939.  
  5940.              51    Zeichensatz nicht geladen 
  5941.  
  5942.                    Sie  haben  versucht,  den skalierbaren  Zeichensatz  zu 
  5943.                    benutzen, obwohl der Prozedur OpenMainApplication  durch 
  5944.                    Angabe des Modus APP_NOFONT signalisiert wurde, daß kein 
  5945.                    Zeichensatz  benötigt  wird.  Dies stellt  einen schwer- 
  5946.                    wiegenden Programmierfehler dar und führt zum sofortigen 
  5947.                    Abbruch des Programms. 
  5948.  
  5949.              52    Kein Speicher mehr zum Laden des Grafiktreibers 
  5950.  
  5951.                    Ihr DOS Speicher reicht nicht aus, um den Graphictreiber 
  5952.                    einzuladen.    Dieser  Fehler  führt  zum  Abbruch   des 
  5953.                    Programms. Versuchen Sie, einige Programme aus der Datei 
  5954.                    CONFIG.SYS oder AUTOEXEC.BAT auszutragen und starten Sie 
  5955.                    das Programm erneut. 
  5956.  
  5957.              53   Kein Speicher mehr zum Laden des Zeichensatzes 
  5958.  
  5959.                    Ihr DOS Speicher  reicht  nicht aus, um den skalierbaren 
  5960.                    Zeichensatz einzuladen.  Dieser Fehler führt zum Abbruch 
  5961.  
  5962.  
  5963.  
  5964.          (C) BrainLab '91           deLite-Programmierhandbuch                               Seite 90
  5965.  
  5966.                    des Programms.   Versuchen Sie, einige Programme aus der 
  5967.                    Datei  CONFIG.SYS  oder  AUTOEXEC.BAT   auszutragen  und 
  5968.                    starten Sie das Programm erneut. 
  5969.