home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1991 / 09_10 / oop / saaitems.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1991-06-12  |  17.2 KB  |  595 lines

  1. (* ----------------------------------------------------- *)
  2. (*                      SAAITEMS.PAS                     *)
  3. (*                                                       *)
  4. (* ■ SAAItem: Dient als Grundobjekt für "SAA-Einträge"   *)
  5. (*   wie Menüeinträge, "Radiobuttons" etc. Implementiert *)
  6. (*   die grundlegenden Methoden aller Nachkommen.        *)
  7. (* ■ PushBut, RadioBut und EndBut sind spezialisierte    *)
  8. (*   Erben von SAAItem. Ihre Anwendung demonstriert      *)
  9. (*   "BUTDEMO".                                          *)
  10. (*                                                       *)
  11. (*           (c) '91 by R.Reichert & TOOLBOX             *)
  12. (* ----------------------------------------------------- *)
  13. UNIT SAAItems;
  14.  
  15. INTERFACE
  16.  
  17. USES Crt, MouKey;
  18.  
  19. CONST                             { Markierungszeichen im Namen }
  20.   HotKeyMarkChar : CHAR = '#';
  21.   ItemColor : BYTE = 29;          { Standardmässig }
  22.   HotKeyColor : BYTE = 27;        { benutzte Farbwerte }
  23.   EndButActColor : BYTE = 75;     { Aktive Endbutton-Farbe  }
  24.   Enter = 13; Space = 32; CurUp = 328; CurDown = 336;
  25.   { ReturnCodes: }
  26.   ItOk = 0;                       { Alles in Ordnung                 }
  27.   ItEvNotMine = 1;                { Event passt mir nicht            }
  28.   ItEvAccepted = 2;               { Event angenommen, => weitermachen}
  29.   ItFinish = 3;                   { beenden, Abbruch                 }
  30.   ItSelected = 4;                 { wurde gewählt                    }
  31.   ItActPrev = 5;                  { aktiviere nächsten Item          }
  32.   ItActNext = 6;                  { aktiviere vorhergehenden Item    }
  33.  
  34.   MaxRadioBut = 20;               { maximale Anzahl RadioButtons pro
  35.                          Gruppe                           }
  36. TYPE
  37.   SAAItemPtr = ^SAAItem;
  38.   SAAItem = OBJECT
  39.               Col, HKCol,
  40.               x, y : BYTE;
  41.               Name : ^STRING;
  42.               HotKey : CHAR;
  43.               Active,
  44.               Displayed,
  45.               HKDisplayed : BOOLEAN;
  46.               AltCode : WORD;
  47.               ReturnCode : BYTE;
  48.  
  49.               CONSTRUCTOR Init(NX, NY : BYTE;
  50.                                N : STRING;
  51.                                AltHKC : WORD);
  52.               PROCEDURE SetColors(NC, NHKC : BYTE);
  53.               PROCEDURE SetName(NewName : STRING); VIRTUAL;
  54.               PROCEDURE SetAltCode(NewAltHKC : WORD); VIRTUAL;
  55.               PROCEDURE Display; VIRTUAL;
  56.               PROCEDURE DisplayHotKey; VIRTUAL;
  57.               PROCEDURE SetDisplayedOff; VIRTUAL;
  58.               PROCEDURE SetActive; VIRTUAL;
  59.               PROCEDURE SetPassive; VIRTUAL;
  60.               PROCEDURE CheckEvent(VAR Ev : EventObj); VIRTUAL;
  61.               PROCEDURE CheckMouEv(VAR Ev : EventObj); VIRTUAL;
  62.               PROCEDURE CheckKeyEv(VAR Ev : EventObj); VIRTUAL;
  63.               PROCEDURE SetXY(NX, NY : BYTE); VIRTUAL;
  64.               PROCEDURE SetXYRel(DX, dy : INTEGER); VIRTUAL;
  65.               PROCEDURE SaveConfiguration; VIRTUAL;
  66.               PROCEDURE RestoreConfiguration; VIRTUAL;
  67.  
  68.               FUNCTION GetReturnCode : BYTE; VIRTUAL;
  69.               FUNCTION GetCol : BYTE; VIRTUAL;
  70.               FUNCTION GetHKCol : BYTE; VIRTUAL;
  71.               FUNCTION GetX : BYTE; VIRTUAL;
  72.               FUNCTION GetY : BYTE; VIRTUAL;
  73.               FUNCTION GetName : STRING; VIRTUAL;
  74.               FUNCTION GetHotKey : CHAR; VIRTUAL;
  75.               FUNCTION GetAltCode : WORD; VIRTUAL;
  76.               FUNCTION IsActive : BOOLEAN; VIRTUAL;
  77.               FUNCTION IsDisplayed : BOOLEAN; VIRTUAL;
  78.               FUNCTION IsHKDisplayed : BOOLEAN; VIRTUAL;
  79.               DESTRUCTOR Done; VIRTUAL;
  80.             END;
  81.  
  82.   RadioButPtr = ^RadioBut;
  83.   RadioBut = OBJECT(SAAItem)
  84.                CONSTRUCTOR Init(NX, NY : BYTE;
  85.                                 N : STRING;
  86.                                 AltHKC : WORD);
  87.                PROCEDURE Display; VIRTUAL;
  88.                PROCEDURE SetActive; VIRTUAL;
  89.                PROCEDURE SetPassive; VIRTUAL;
  90.                PROCEDURE CheckEvent(VAR Ev : EventObj); VIRTUAL;
  91.              END;
  92.  
  93.   { Anwendung von NewRadioBut: Siehe "BUTDEMO". }
  94. FUNCTION NewRadioBut(NX, NY : BYTE;
  95.                      N : STRING;
  96.                      AltHKC : WORD) : RadioButPtr;
  97.  
  98. TYPE
  99.   RadioButArray = ARRAY[1..MaxRadioBut] OF RadioButPtr;
  100.  
  101.   RadioButtonsPtr = ^RadioButtons;
  102.   RadioButtons = OBJECT(SAAItem)
  103.                    Act, Num : BYTE;
  104.                    Buttons : RadioButArray;
  105.  
  106.                    CONSTRUCTOR Init(NewButtons : RadioButArray;
  107.                                     ButNum : BYTE);
  108.                    PROCEDURE Display; VIRTUAL;
  109.                    PROCEDURE DisplayHotKey; VIRTUAL;
  110.                    PROCEDURE SetXY(NX, NY : BYTE); VIRTUAL;
  111.                    PROCEDURE SetXYRel(DX, dy : INTEGER); VIRTUAL;
  112.                    PROCEDURE SetActive; VIRTUAL;
  113.                    PROCEDURE SetPassive; VIRTUAL;
  114.                    PROCEDURE CheckEvent(VAR Ev : EventObj); VIRTUAL;
  115.                    FUNCTION GetSelected : BYTE; VIRTUAL;
  116.                    DESTRUCTOR Done; VIRTUAL;
  117.                  END;
  118.  
  119.   PushButPtr = ^PushBut;
  120.   PushBut = OBJECT(SAAItem)
  121.               SaveFl, On : BOOLEAN;
  122.               CONSTRUCTOR Init(NX, NY : BYTE;
  123.                                N : STRING;
  124.                                AltHKC : WORD;
  125.                                NOn : BOOLEAN);
  126.               PROCEDURE Display; VIRTUAL;
  127.               PROCEDURE SetActive; VIRTUAL;
  128.               PROCEDURE CheckEvent(VAR Ev : EventObj); VIRTUAL;
  129.               PROCEDURE SaveConfiguration; VIRTUAL;
  130.               PROCEDURE RestoreConfiguration; VIRTUAL;
  131.               FUNCTION GetState : BOOLEAN; VIRTUAL;
  132.             END;
  133.  
  134.   EndButPtr = ^EndBut;
  135.   EndBut = OBJECT(SAAItem)
  136.              SpecificRC,
  137.              ActCol : BYTE;
  138.              HotKeyCode : WORD;
  139.              CONSTRUCTOR Init(NX, NY : BYTE;
  140.                               N : STRING;
  141.                               AltHKC : WORD;
  142.                               NewHK : WORD;
  143.                               SpecRC : BYTE);
  144.              PROCEDURE SetColors(NC, NHKC, NAC : BYTE);
  145.              PROCEDURE SetActive; VIRTUAL;
  146.              PROCEDURE SetPassive; VIRTUAL;
  147.              PROCEDURE CheckEvent(VAR Ev : EventObj); VIRTUAL;
  148.              FUNCTION GetSpecRC : BYTE; VIRTUAL;
  149.            END;
  150.  
  151.  
  152. IMPLEMENTATION
  153.  
  154.   FUNCTION NewRadioBut(NX, NY : BYTE;
  155.                        N : STRING;
  156.                        AltHKC : WORD) : RadioButPtr;
  157.   BEGIN
  158.     NewRadioBut := NEW(RadioButPtr,
  159.                        Init(NX, NY, N, AltHKC));
  160.   END;
  161.  
  162.   PROCEDURE WriteStr(x, y, Attr : BYTE; s : STRING);
  163.   VAR ox, oy : BYTE;
  164.   BEGIN
  165.     ox := WhereX; oy := WhereY; GotoXY(x, y);
  166.     TextAttr := Attr; WRITE(s); GotoXY(ox, oy);
  167.   END;
  168.  
  169.   CONSTRUCTOR SAAItem.Init(NX, NY : BYTE;
  170.                            N : STRING;
  171.                            AltHKC : WORD);
  172.   BEGIN
  173.     Col := ItemColor; HKCol := HotKeyColor;
  174.     x := NX; y := NY;
  175.     Active := FALSE; HKDisplayed := FALSE;
  176.     ReturnCode := 0; Displayed := FALSE;
  177.     AltCode := AltHKC;
  178.     Name := NIL; SetName(N);
  179.     IF Name = NIL THEN
  180.       FAIL;
  181.   END;
  182.  
  183.   PROCEDURE SAAItem.SetColors(NC, NHKC : BYTE);
  184.   BEGIN
  185.     Col := NC; HKCol := NHKC;
  186.   END;
  187.  
  188.   PROCEDURE SAAItem.SetName(NewName : STRING);
  189.   VAR i : BYTE;
  190.   BEGIN
  191.     IF Name <> NIL THEN
  192.       FREEMEM(Name, SUCC(LENGTH(Name^)));
  193.     i := POS(HotKeyMarkChar, NewName);
  194.     IF i > 0 THEN BEGIN
  195.       DELETE(NewName, i, 1);
  196.       HotKey := NewName[i];
  197.     END ELSE
  198.       HotKey := #0;
  199.     GETMEM(Name, SUCC(LENGTH(NewName)));
  200.     IF Name <> NIL THEN
  201.       Name^ := NewName;
  202.   END;
  203.  
  204.   PROCEDURE SAAItem.SetAltCode(NewAltHKC : WORD);
  205.   BEGIN
  206.     AltCode := NewAltHKC;
  207.   END;
  208.  
  209.   PROCEDURE SAAItem.Display;
  210.   BEGIN
  211.     Mouse^.Hide;
  212.     WriteStr(x, y, Col, Name^);
  213.     Mouse^.Show;
  214.     Displayed := TRUE;
  215.     IF HKDisplayed THEN
  216.       DisplayHotKey;
  217.   END;
  218.  
  219.   PROCEDURE SAAItem.DisplayHotKey;
  220.   BEGIN
  221.     IF (HotKey <> #0) AND Displayed THEN BEGIN
  222.       Mouse^.Hide;
  223.       WriteStr(PRED(x+POS(HotKey, Name^)), y,
  224.                HKCol, HotKey);
  225.       Mouse^.Show;
  226.       HKDisplayed := TRUE;
  227.     END;
  228.   END;
  229.  
  230.   PROCEDURE SAAItem.SetDisplayedOff;
  231.   BEGIN Displayed := FALSE; END;
  232.  
  233.   PROCEDURE SAAItem.SetActive;
  234.   BEGIN
  235.     Active := TRUE; Display;
  236.   END;
  237.  
  238.   PROCEDURE SAAItem.SetPassive;
  239.   BEGIN Active := FALSE; END;
  240.  
  241.   PROCEDURE SAAItem.CheckEvent(VAR Ev : EventObj);
  242.   BEGIN
  243.     ReturnCode := ItEvNotMine;
  244.     IF Displayed THEN
  245.       IF (Ev.EventType AND EvMouAll) > 0 THEN
  246.         CheckMouEv(Ev)
  247.       ELSE
  248.         CheckKeyEv(Ev);
  249.   END;
  250.  
  251.   PROCEDURE SAAItem.CheckMouEv(VAR Ev : EventObj);
  252.     FUNCTION EvInArea : BOOLEAN;
  253.     BEGIN
  254.       EvInArea := (Ev.x >= x) AND(Ev.y = y) AND
  255.                   (Ev.x < x+LENGTH(Name^))
  256.     END;
  257.   BEGIN
  258.     IF EvInArea THEN
  259.       IF EvHand^.MouReleased(Ev) THEN
  260.         ReturnCode := ItSelected
  261.       ELSE
  262.         IF (EvHand^.MouPressed(Ev)) OR
  263.         (Ev.Buttons > 0) THEN BEGIN
  264.           SetActive;
  265.           ReturnCode := ItEvAccepted;
  266.         END;
  267.   END;
  268.  
  269.   PROCEDURE SAAItem.CheckKeyEv(VAR Ev : EventObj);
  270.   VAR HK1, HK2 : BYTE;
  271.   BEGIN
  272.     IF Ev.EventType = EvKeyPressed THEN BEGIN
  273.       IF (HKDisplayed) THEN BEGIN
  274.         HK1 := ORD(HotKey); HK2 := 0;
  275.         IF (HK1 > 64) AND(HK2 < 91) THEN HK2 := HK1+32;
  276.         IF (HK1 > 96) AND(HK2 < 123) THEN HK2 := HK1-32;
  277.         IF (Ev.Key = HK1) OR
  278.         (Ev.Key = HK2) OR
  279.         (Ev.Key = AltCode) THEN BEGIN
  280.           SetActive;
  281.           ReturnCode := ItSelected;
  282.         END;
  283.       END;
  284.     END;
  285.   END;
  286.  
  287.   PROCEDURE SAAItem.SetXY(NX, NY : BYTE);
  288.   BEGIN
  289.     x := NX; y := NY;
  290.     IF Displayed THEN BEGIN
  291.       SetDisplayedOff; Display;
  292.     END;
  293.   END;
  294.  
  295.   PROCEDURE SAAItem.SetXYRel(DX, dy : INTEGER);
  296.   BEGIN SetXY(x+DX, y+dy); END;
  297.  
  298.   PROCEDURE SAAItem.SaveConfiguration;
  299.   BEGIN
  300.     { SAAItem enthält keine konkreten Daten zum Retten }
  301.   END;
  302.  
  303.   PROCEDURE SAAItem.RestoreConfiguration;
  304.   BEGIN END;
  305.  
  306.   FUNCTION SAAItem.GetReturnCode : BYTE;
  307.   BEGIN
  308.     GetReturnCode := ReturnCode; ReturnCode := 0;
  309.   END;
  310.  
  311.   FUNCTION SAAItem.GetCol : BYTE;
  312.   BEGIN GetCol := Col; END;
  313.  
  314.   FUNCTION SAAItem.GetHKCol : BYTE;
  315.   BEGIN GetHKCol := HKCol; END;
  316.  
  317.   FUNCTION SAAItem.GetX : BYTE;
  318.   BEGIN GetX := x; END;
  319.  
  320.   FUNCTION SAAItem.GetY : BYTE;
  321.   BEGIN GetY := y; END;
  322.  
  323.   FUNCTION SAAItem.GetName : STRING;
  324.   BEGIN GetName := Name^; END;
  325.  
  326.   FUNCTION SAAItem.GetHotKey : CHAR;
  327.   BEGIN GetHotKey := HotKey; END;
  328.  
  329.   FUNCTION SAAItem.GetAltCode : WORD;
  330.   BEGIN GetAltCode := AltCode; END;
  331.  
  332.   FUNCTION SAAItem.IsActive : BOOLEAN;
  333.   BEGIN IsActive := Active; END;
  334.  
  335.   FUNCTION SAAItem.IsDisplayed : BOOLEAN;
  336.   BEGIN IsDisplayed := Displayed; END;
  337.  
  338.   FUNCTION SAAItem.IsHKDisplayed : BOOLEAN;
  339.   BEGIN IsHKDisplayed := HKDisplayed; END;
  340.  
  341.   DESTRUCTOR SAAItem.Done;
  342.   BEGIN
  343.     FREEMEM(Name, SUCC(LENGTH(Name^)));
  344.   END;
  345.  
  346.   CONSTRUCTOR RadioBut.Init(NX, NY : BYTE;
  347.                             N : STRING;
  348.                             AltHKC : WORD);
  349.   BEGIN
  350.     IF N[1] <> ' ' THEN N := ' '+N;
  351.     IF NOT SAAItem.Init(NX, NY, '( )'+N, AltHKC) THEN
  352.       FAIL;
  353.   END;
  354.  
  355.   PROCEDURE RadioBut.Display;
  356.   BEGIN
  357.     SAAItem.Display;
  358.     Mouse^.Hide;
  359.     IF Active THEN BEGIN
  360.       Mouse^.Hide;
  361.       WriteStr(SUCC(x), y, ItemColor, '■');
  362.       Mouse^.Show;
  363.     END;
  364.   END;
  365.  
  366.   PROCEDURE RadioBut.SetActive;
  367.   BEGIN
  368.     SAAItem.SetActive; GotoXY(SUCC(x), y);
  369.   END;
  370.  
  371.   PROCEDURE RadioBut.SetPassive;
  372.   BEGIN
  373.     SAAItem.SetPassive; Display;
  374.   END;
  375.  
  376.   PROCEDURE RadioBut.CheckEvent(VAR Ev : EventObj);
  377.   BEGIN
  378.     SAAItem.CheckEvent(Ev);
  379.     IF ReturnCode = ItSelected THEN
  380.       ReturnCode := ItEvAccepted;
  381.     IF (ReturnCode = ItEvNotMine) AND
  382.     (Active) AND
  383.     (Ev.EventType = EvKeyPressed) THEN
  384.       IF Ev.Key = CurUp THEN BEGIN
  385.         SetPassive;
  386.         ReturnCode := ItActPrev;
  387.       END ELSE
  388.         IF Ev.Key = CurDown THEN BEGIN
  389.           SetPassive;
  390.           ReturnCode := ItActNext;
  391.         END;
  392.   END;
  393.  
  394.   CONSTRUCTOR RadioButtons.Init(NewButtons : RadioButArray;
  395.                                 ButNum : BYTE);
  396.   VAR i : BYTE;
  397.   BEGIN
  398.     FOR i := 1 TO ButNum DO
  399.       Buttons[i] := NewButtons[i];
  400.     Num := ButNum;
  401.     Act := 1;
  402.   END;
  403.  
  404.   PROCEDURE RadioButtons.Display;
  405.   VAR i : BYTE;
  406.   BEGIN
  407.     Buttons[Act]^.SetActive;
  408.   { ein Button ist immer aktiv, wg dem Markierungszeichen,
  409.     aber die Gruppe ist nicht immer aktiv (s. SetPassive) }
  410.     FOR i := 1 TO Num DO
  411.       Buttons[i]^.Display;
  412.     Displayed := TRUE;
  413.   END;
  414.  
  415.   PROCEDURE RadioButtons.DisplayHotKey;
  416.   VAR i : BYTE;
  417.   BEGIN
  418.     FOR i := 1 TO Num DO
  419.       Buttons[i]^.DisplayHotKey;
  420.     HKDisplayed := TRUE;
  421.   END;
  422.  
  423.   PROCEDURE RadioButtons.SetXY(NX, NY : BYTE);
  424.   BEGIN
  425.     SetXYRel(NX-x, NY-y);
  426.   END;
  427.  
  428.   PROCEDURE RadioButtons.SetXYRel(DX, dy : INTEGER);
  429.   VAR i : BYTE;
  430.   BEGIN
  431.     FOR i := 1 TO Num DO
  432.       Buttons[i]^.SetXYRel(DX, dy);
  433.     x := x+DX; y := y+dy;
  434.   END;
  435.  
  436.   PROCEDURE RadioButtons.SetActive;
  437.   BEGIN
  438.     Buttons[Act]^.SetActive;
  439.     Active := TRUE;
  440.   END;
  441.  
  442.   PROCEDURE RadioButtons.SetPassive;
  443.   BEGIN
  444.     Active := FALSE;
  445.   { sonst verschwindet das Markierungszeichen; nur die
  446.     Gruppe ist passiv }
  447.   END;
  448.  
  449.   PROCEDURE RadioButtons.CheckEvent(VAR Ev : EventObj);
  450.   VAR i : BYTE;
  451.   BEGIN
  452.     Buttons[Act]^.CheckEvent(Ev);
  453.     CASE Buttons[Act]^.GetReturnCode OF
  454.       ItActNext : BEGIN
  455.                     INC(Act);
  456.                     IF Act > Num THEN Act := 1;
  457.                     Buttons[Act]^.SetActive;
  458.                     ReturnCode := ItEvAccepted;
  459.                   END;
  460.       ItActPrev : BEGIN
  461.                     DEC(Act);
  462.                     IF Act < 1 THEN Act := Num;
  463.                     Buttons[Act]^.SetActive;
  464.                     ReturnCode := ItEvAccepted;
  465.                   END;
  466.       ItEvAccepted : ReturnCode := ItEvAccepted;
  467.       ItEvNotMine : BEGIN
  468.                       ReturnCode := ItEvNotMine;
  469.                       FOR i := 1 TO Num DO BEGIN
  470.                         Buttons[i]^.CheckEvent(Ev);
  471.                         IF (Buttons[i]^.GetReturnCode <>
  472.                             ItEvNotMine) THEN BEGIN
  473.                           Buttons[Act]^.SetPassive;
  474.                           Act := i;
  475.                           Buttons[Act]^.SetActive;
  476.                           ReturnCode := ItEvAccepted;
  477.                         END;
  478.                       END;
  479.                     END;
  480.     END;
  481.   END;
  482.  
  483.   FUNCTION RadioButtons.GetSelected : BYTE;
  484.   BEGIN
  485.     GetSelected := Act;
  486.   END;
  487.  
  488.   DESTRUCTOR RadioButtons.Done;
  489.   VAR i : BYTE;
  490.   BEGIN
  491.     FOR i := 1 TO Num DO
  492.       DISPOSE(Buttons[i], Done);
  493.   END;
  494.  
  495.   CONSTRUCTOR PushBut.Init(NX, NY : BYTE;
  496.                            N : STRING;
  497.                            AltHKC : WORD;
  498.                            NOn : BOOLEAN);
  499.   BEGIN
  500.     IF N[1] <> ' ' THEN N := ' '+N;
  501.     IF SAAItem.Init(NX, NY, '[ ]'+N, AltHKC) THEN On := NOn
  502.     ELSE FAIL;
  503.   END;
  504.  
  505.   PROCEDURE PushBut.Display;
  506.   BEGIN
  507.     SAAItem.Display;
  508.     IF On THEN BEGIN
  509.       Mouse^.Hide;
  510.       WriteStr(SUCC(x), y, ItemColor, 'X');
  511.       Mouse^.Show;
  512.     END;
  513.   END;
  514.  
  515.   PROCEDURE PushBut.SetActive;
  516.   BEGIN
  517.     SAAItem.SetActive; GotoXY(SUCC(x), y);
  518.   END;
  519.  
  520.   PROCEDURE PushBut.CheckEvent(VAR Ev : EventObj);
  521.   BEGIN
  522.     SAAItem.CheckEvent(Ev);
  523.     IF (ReturnCode = ItSelected) OR
  524.     ((ReturnCode = ItEvNotMine) AND
  525.      (Ev.EventType = EvKeyPressed) AND
  526.      (Ev.Key = Space) AND Active) THEN BEGIN
  527.       On := NOT On; ReturnCode := ItEvAccepted;
  528.       Display;
  529.     END;
  530.   END;
  531.  
  532.   PROCEDURE PushBut.SaveConfiguration;
  533.   BEGIN SaveFl := On; END;
  534.  
  535.   PROCEDURE PushBut.RestoreConfiguration;
  536.   BEGIN On := SaveFl; END;
  537.  
  538.   FUNCTION PushBut.GetState : BOOLEAN;
  539.   BEGIN GetState := On; END;
  540.  
  541.   CONSTRUCTOR EndBut.Init(NX, NY : BYTE;
  542.                           N : STRING;
  543.                           AltHKC : WORD;
  544.                           NewHK : WORD;
  545.                           SpecRC : BYTE);
  546.   BEGIN
  547.     SpecificRC := SpecRC;
  548.     IF N[1] <> ' ' THEN N := ' '+N;
  549.     IF N[LENGTH(N)] <> ' ' THEN N := N+' ';
  550.     IF SAAItem.Init(NX, NY, '<'+N+'>', AltHKC) THEN BEGIN
  551.       HotKeyCode := NewHK; ActCol := EndButActColor;
  552.     END ELSE
  553.       FAIL;
  554.   END;
  555.  
  556.   PROCEDURE EndBut.SetColors(NC, NHKC, NAC : BYTE);
  557.   BEGIN
  558.     SAAItem.SetColors(NC, NHKC);
  559.     ActCol := NAC;
  560.   END;
  561.  
  562.   PROCEDURE EndBut.SetActive;
  563.   BEGIN
  564.     SAAItem.SetActive; Mouse^.Hide;
  565.     WriteStr(x, y, EndButActColor, Name^);
  566.     Mouse^.Show; GotoXY(x+2, y);
  567.   END;
  568.  
  569.   PROCEDURE EndBut.SetPassive;
  570.   BEGIN
  571.     SAAItem.SetPassive; Display;
  572.   END;
  573.  
  574.   PROCEDURE EndBut.CheckEvent(VAR Ev : EventObj);
  575.   BEGIN
  576.     SAAItem.CheckEvent(Ev);
  577.     IF (ReturnCode = ItSelected) OR
  578.     ((ReturnCode = ItEvNotMine) AND
  579.      (Ev.EventType = EvKeyPressed) AND
  580.      ((Ev.Key = HotKeyCode) OR
  581.       ((Ev.Key = Enter) AND Active))) THEN BEGIN
  582.       SetActive; ReturnCode := ItFinish;
  583.     END;
  584.   END;
  585.  
  586.   FUNCTION EndBut.GetSpecRC : BYTE;
  587.   BEGIN
  588.     GetSpecRC := SpecificRC;
  589.   END;
  590.  
  591. END.
  592. (* ----------------------------------------------------- *)
  593. (*                Ende von SAAITEMS.PAS                  *)
  594. (* ----------------------------------------------------- *)
  595.