home *** CD-ROM | disk | FTP | other *** search
/ Vectronix 2 / VECTRONIX2.iso / FILES_07 / ACS_PRO.LZH / ASC / DEMO_PP.PRG / MENUE / MENUEM.PAS < prev   
Pascal/Delphi Source File  |  1993-01-09  |  4KB  |  117 lines

  1. {
  2.     UNIT MENUEM ab for PurePascal
  3.     (c) 1992  Stefan Bachert
  4.     PURE PASCAL Version: Michael Schlüter (@SL)
  5.     Letzte Änderung: 02.01.1993
  6. }
  7. { ACHTUNG: Bis zur jetztigen PP Version (07.11.92) gibt die XOR-Verknüpfung
  8.   in set_menu einen Internal error. Ich hoffe der Fehler ist in einer der
  9.   nächsten Versionen behoben. Zum Testen kann eine andere Verknüpfung ein-
  10.   gesetzt werden, z.B. AND, OR.
  11.   (In der Version vom Dez. 92 soll der Fehler behoben sein)
  12. }
  13. UNIT menuem;
  14.  
  15. {$X+}
  16.  
  17. INTERFACE
  18.  
  19. USES GEM, ACS;
  20.  
  21. CONST    OBJ_1        = 1;                        { OBJ_1 ist Button mit Objektnr. 1 }
  22.         OBJ_2        = 2;
  23.         OBJ_3        = 3;
  24.         OBJ_4        = 4;
  25.  
  26. {$I MENUE.I}                                    { Lade ACS-File ein }
  27.  
  28. { ----------------------------------------------------------------- }
  29. { Setze Menüeinträge je nach selektiertem Objekt                    }
  30. { ----------------------------------------------------------------- }
  31. PROCEDURE set_menu(wi: AWindowPtr);
  32. VAR        nr,
  33.         count        : INTEGER;
  34.         o1,    o2,    o3,
  35.         o4            : BOOLEAN;
  36. BEGIN
  37.     count := 0; o1 := FALSE; o2 := FALSE; o3 := FALSE; o4 := FALSE;
  38.     Aselect^.next := 0;                            { Liste von vorne lesen }
  39.     nr := Adr_next;                                { Erste Objekt holen }
  40.     WHILE nr >= 0 DO                            { Wenn noch ein Objekt in der Liste }
  41.     BEGIN
  42.         INC(count);                                { Erhöhe Zähler }
  43.         CASE wi^.work^[nr+1].acs.aob_type OF    { Setzte Flag des jeweiligen Objektes }
  44.             OBJ_1:        o1 := TRUE;
  45.             OBJ_2:        o2 := TRUE;
  46.             OBJ_3:        o3 := TRUE;
  47.             OBJ_4:        o4 := TRUE;
  48.         END;
  49.         nr := Adr_next;                            { Nächste Objekt aus der Liste holen }
  50.     END;
  51.     IF count = 0 THEN                            { Wenn kein Objekt selektiert }
  52.         wi^.menu^[SEL_0].aes.ob_state := wi^.menu^[SEL_0].aes.ob_state AND (NOT DISABLED)
  53.     ELSE
  54.         wi^.menu^[SEL_0].aes.ob_state := wi^.menu^[SEL_0].aes.ob_state OR DISABLED;
  55.     IF count = 1 THEN                            { Wenn ein Objekt selektiert }
  56.         wi^.menu^[SEL_1].aes.ob_state := wi^.menu^[SEL_1].aes.ob_state AND (NOT DISABLED)
  57.     ELSE
  58.         wi^.menu^[SEL_1].aes.ob_state := wi^.menu^[SEL_1].aes.ob_state OR DISABLED;
  59.     IF count > 0 THEN                            { Wenn Objekt(e) selektiert }
  60.         wi^.menu^[SEL_ANY].aes.ob_state := wi^.menu^[SEL_ANY].aes.ob_state AND (NOT DISABLED)
  61.     ELSE
  62.         wi^.menu^[SEL_ANY].aes.ob_state := wi^.menu^[SEL_ANY].aes.ob_state OR DISABLED;
  63.     IF o1 THEN                                    { Wenn Objekt 1 selektiert }
  64.         wi^.menu^[OBJ1].aes.ob_state := wi^.menu^[OBJ1].aes.ob_state AND (NOT DISABLED)
  65.     ELSE
  66.         wi^.menu^[OBJ1].aes.ob_state := wi^.menu^[OBJ1].aes.ob_state OR DISABLED;
  67.     IF o2 THEN                                    { Wenn Objekt 2 selektiert }
  68.         wi^.menu^[OBJ2].aes.ob_state := wi^.menu^[OBJ2].aes.ob_state AND (NOT DISABLED)
  69.     ELSE
  70.         wi^.menu^[OBJ2].aes.ob_state := wi^.menu^[OBJ2].aes.ob_state OR DISABLED;
  71.     IF o2 AND o3 THEN                            { Wenn Objekt 2 und Objekt 3 selektiert }
  72.         wi^.menu^[OBJ23].aes.ob_state := wi^.menu^[OBJ23].aes.ob_state AND (NOT DISABLED)
  73.     ELSE
  74.         wi^.menu^[OBJ23].aes.ob_state := wi^.menu^[OBJ23].aes.ob_state OR DISABLED;
  75.     IF NOT o4 THEN                                { Wenn nicht Objekt 4 selektiert }
  76.         wi^.menu^[OBJnot4].aes.ob_state := wi^.menu^[OBJnot4].aes.ob_state AND (NOT DISABLED)
  77.     ELSE
  78.         wi^.menu^[OBJnot4].aes.ob_state := wi^.menu^[OBJnot4].aes.ob_state OR DISABLED;
  79.     IF o3 xor o4 THEN                            { Wenn Objekt 3 oder Objekt 4 selektiert }
  80.         wi^.menu^[OBJxor34].aes.ob_state := wi^.menu^[OBJxor34].aes.ob_state AND (NOT DISABLED)
  81.     ELSE
  82.         wi^.menu^[OBJxor34].aes.ob_state := wi^.menu^[OBJxor34].aes.ob_state OR DISABLED;
  83. END;
  84.  
  85. { ----------------------------------------------------------------- }
  86. { Erzeuge Fenster                                                    }
  87. { ----------------------------------------------------------------- }
  88. FUNCTION menu_make(para: Pointer): AwindowPtr;
  89. VAR        wi        : AwindowPtr;
  90. BEGIN
  91.     wi := Awi_create (@DEMO);                    { Erzeuge Fenster }
  92.     IF wi <> NIL THEN                            { Wenn OK }
  93.         wi^. open (wi);                            { Öffne das Fenster }
  94.     menu_make := wi;                            { und zurück }
  95. END;
  96.  
  97. { ----------------------------------------------------------------- }
  98. { Service Routine                                                    }
  99. { ----------------------------------------------------------------- }
  100. Function menu_service (wi: AwindowPtr; task: Integer; in_out: Pointer): Boolean;
  101. BEGIN
  102.     CASE task OF
  103.         AS_TERM:        Awi_delete(wi);            { Nun ist Schlu₧ }
  104.         AS_SELECTDEL,
  105.         AS_SELECTADD:    set_menu(wi);            { verändert Menuzeile }
  106.         AS_DELETE:        Adr_unselect;            { Wert auf Null setzten (löschen) }
  107.         ELSE
  108.         BEGIN
  109.             menu_service := FALSE;                { task konnte nicht bearbeitet werden }
  110.             EXIT;                                { Abbrechen }
  111.         END;
  112.     END;
  113.     menu_service := TRUE;                        { task wurde bearbeitet }
  114. END;
  115.  
  116. BEGIN
  117. END.