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