home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS - Coast to Coast / simteldosarchivecoasttocoast2.iso / turbopas / pstui100.zip / PTUIWIN.PAS < prev    next >
Pascal/Delphi Source File  |  1993-02-20  |  22KB  |  848 lines

  1. {
  2.  
  3.                                                       ╔══════════════════╗
  4.                                                       ║   PTUI Windows   ║
  5.                                                       ║     Include      ║
  6.                                                       ║    Rev. 1.00     ║
  7.                                                       ╚══════════════════╝
  8.  
  9. }
  10.  
  11. Procedure TextWindow.SaveBackground;
  12. Begin
  13.   Size:=TextImageSize(X1,Y1,X2+2,Y2+1);       {Save the backgound text, shadow}
  14.   If Size>MaxAvail Then Error(1);
  15.   GetMem(Save,Size);
  16.   Mouse.Hide;
  17.   GetTextImage(X1,Y1,X2+ShadowXSize,Y2+ShadowYSize,Save);
  18.   Mouse.Show;
  19. End;
  20.  
  21. Procedure TextWindow.DrawWindow;
  22. Begin
  23.   VideoColor(BoxFrg,BoxBck);         {Redraw the window outline and interior}
  24.   Mouse.Hide;
  25.   DrawShadowWindow(X1,Y1,X2,Y2,ShdFrg,ShdBck,LineStyle,ShadowStyle);
  26.   Mouse.Show;
  27. End;
  28.  
  29. Procedure TextWindow.Open(NX1,NY1,NX2,NY2:Word;
  30.                           Forg,Back,ShadForg,ShadBack:Byte;
  31.                           LStyle:LineStyles;SStyle:ShadowStyles);
  32. Begin
  33.   Buttons.Init;
  34.   FillChar(VSlide,SizeOf(VSlide),0);
  35.   FillChar(HSlide,SizeOf(HSlide),0);
  36.   HdrButtonNum  :=0;
  37.   Header        :='';
  38.   Card          :=PTUIVCRT.Card;
  39.   Status        :=Visible;
  40.  
  41.   Case SStyle Of
  42.     NoShade   : Begin
  43.                   ShadowXSize:=0;
  44.                   ShadowYSize:=0;
  45.                 End;
  46.     Solid     : Begin
  47.                   ShadowXSize:=1;
  48.                   ShadowYSize:=1;
  49.                 End;
  50.     LightHash,
  51.     MediumHash,
  52.     DarkHash  : Begin
  53.                   ShadowXSize:=2;
  54.                   ShadowYSize:=1;
  55.                 End;
  56.   End;
  57.  
  58.   LineStyle  :=LStyle;
  59.   ShadowStyle:=SStyle;
  60.   BoxFrg     :=Forg;
  61.   BoxBck     :=Back;
  62.   ShdFrg     :=ShadForg;
  63.   ShdBck     :=ShadBack;
  64.   X1         :=NX1;
  65.   Y1         :=NY1;
  66.   X2         :=NX2;
  67.   Y2         :=NY2;
  68.  
  69.   SaveBackground;
  70.   DrawWindow;
  71. End;
  72.  
  73. Procedure TextWindow.DisplayHeading;
  74. Begin
  75.   Mouse.Hide;
  76.   If Header='' Then
  77.   Begin
  78.     VideoColor(BoxFrg,BoxBck);      {Blank the heading area}
  79.     GotoXY(X1+1,Y1+1);
  80.     Pad(X2-X1-1,#32);
  81.   End
  82.   Else
  83.   Begin
  84.     VideoColor(HdrFrg,HdrBck);
  85.     GotoXY(X1+1,Y1+1);
  86.     WriteStr(Header);
  87.   End;
  88.   Mouse.Show;
  89. End;
  90.  
  91. Procedure TextWindow.NewHeading(NewHead:String;NewMode:TextFormats;
  92.                                 Forg,Back:Byte);
  93. Begin
  94.   HdrFrg:=Forg;
  95.   HdrBck:=Back;              {Setup the new heading line}
  96.   HdrFmt:=NewMode;
  97.   If NewHead='' Then
  98.     Header:=''
  99.   Else
  100.     FormatVar(NewHead,Header,X2-X1-1,NewMode);
  101.   DisplayHeading;
  102. End;
  103.  
  104. Procedure TextWindow.Hide;
  105.  
  106. Var
  107.   NewSave :Pointer;
  108.  
  109. Begin
  110.   Status:=Hidden;
  111.   If Size>MaxAvail Then Error(1);
  112.   GetMem(NewSave,Size);
  113.   Mouse.Hide;
  114.   GetTextImage(X1,Y1,X2,Y2,NewSave);   {Save the window}
  115.   PutTextImage(X1,Y1,Save);            {Put old text back}
  116.   Mouse.Show;
  117.   FreeMem(Save,Size);
  118.   Save:=NewSave;
  119. End;
  120.  
  121. Procedure TextWindow.Show;
  122.  
  123. Var
  124.   NewSave :Pointer;
  125.  
  126. Begin
  127.   Status:=Visible;
  128.   If Size>MaxAvail Then Error(1);
  129.   GetMem(NewSave,Size);             {Save the text}
  130.   Mouse.Hide;
  131.   GetTextImage(X1,Y1,X2+ShadowXSize,Y2+ShadowYSize,NewSave);
  132.   PutTextImage(X1,Y1,Save);       {Display the window}
  133.   FreeMem(Save,Size);
  134.   TextBackground(BoxBck);
  135.   VideoColor(ShdFrg,ShdBck);            {Background Colours may have changed}
  136.   DrawShadow(X1,Y1,X2,Y2,ShadowStyle);  {Redraw the new shadow}
  137.   Mouse.Show;
  138.   Save:=NewSave;
  139. End;
  140.  
  141. Procedure TextWindow.NewPosition(NewX,NewY:Word);
  142.  
  143. Var
  144.   OldX,
  145.   OldY  :Word;
  146.  
  147. Begin
  148.   OldX:=X1;
  149.   OldY:=Y1;
  150.  
  151.   Hide;                    {Hide the window}
  152.   X2:=NewX+(X2-X1);
  153.   Y2:=NewY+(Y2-Y1);        {Change the position}
  154.   X1:=NewX;
  155.   Y1:=NewY;
  156.   Show;                    {Redisplay the same window}
  157.  
  158.   Buttons.MoveAll(Integer(X1)-Integer(OldX),Integer(Y1)-Integer(OldY));
  159.   If HSlide.MaxPos>0 Then
  160.   Begin
  161.     HSlide.X1:=HSlide.X1 + Integer(X1) - Integer(OldX);
  162.     HSlide.Y1:=HSlide.Y1 + Integer(Y1) - Integer(OldY);
  163.     HSlide.X2:=HSlide.X2 + Integer(X1) - Integer(OldX);
  164.     HSlide.Y2:=HSlide.Y2 + Integer(Y1) - Integer(OldY);
  165.   End;
  166.   If VSlide.MaxPos>0 Then
  167.   Begin
  168.     VSlide.X1:=VSlide.X1 + Integer(X1) - Integer(OldX);
  169.     VSlide.Y1:=VSlide.Y1 + Integer(Y1) - Integer(OldY);
  170.     VSlide.X2:=VSlide.X2 + Integer(X1) - Integer(OldX);
  171.     VSlide.Y2:=VSlide.Y2 + Integer(Y1) - Integer(OldY);
  172.   End;
  173. End;
  174.  
  175. Procedure TextWindow.Drag;
  176.  
  177. Var
  178.   MouseL,
  179.   MouseR,
  180.   MouseM,
  181.   MouseMoved,
  182.   MouseRelease :Boolean;
  183.   OldMouseX,
  184.   OldMouseY,
  185.   MouseX,
  186.   MouseY,
  187.   MouseStartX,
  188.   MouseStartY,
  189.   MouseDistX,
  190.   MouseDistY,
  191.   OldX,
  192.   OldY         :Word;
  193.   C            :Char;
  194.   OldBut       :Pointer;
  195.  
  196. Begin
  197.   OldBut:=Buttons.Buttons;
  198.   If Mouse.Active Then
  199.   Begin
  200.     C:=#1;
  201.     OldMouseX:=65535;
  202.     OldMouseY:=65535;
  203.     MouseStartX:=X1-1;
  204.     MouseStartY:=Y1-1;
  205.     Mouse.SetXY(MouseStartX * MouseGranularity,MouseStartY * MouseGranularity);
  206.   End;
  207.   MouseRelease:=False;
  208.   OldX:=X1;
  209.   OldY:=Y1;
  210.   Repeat
  211.     Repeat
  212.       MouseMoved:=False;
  213.       KeyBuffer(Clear);
  214.       If Mouse.Active Then
  215.       Begin
  216.         Mouse.GetStatus(MouseX,MouseY,MouseL,MouseR,MouseM);
  217.         MouseX:=(MouseX Div MouseGranularity) + 1;
  218.         MouseY:=(MouseY Div MouseGranularity) + 1;
  219.         If (MouseX<>OldMouseX) Or (MouseY<>OldMouseY) Then MouseMoved:=True;
  220.         If (Not MouseL) And (Not MouseR) Then MouseRelease:=True;
  221.       End;
  222.     Until KeyPressed Or ((MouseMoved Or MouseRelease) And Mouse.Active);
  223.     If MouseMoved Then
  224.     Begin
  225.       If (MouseX+(X2-X1)>VideoCard[Card].XSize-2) Then
  226.         OldMouseX:=VideoCard[Card].XSize-2-(X2-X1)
  227.       Else
  228.         OldMouseX:=MouseX;
  229.       If (MouseY+(Y2-Y1)>VideoCard[Card].YSize-1) Then
  230.         OldMouseY:=VideoCard[Card].YSize-1-(Y2-Y1)
  231.       Else
  232.         OldMouseY:=MouseY;
  233.       If (OldMouseX<>X1) Or (OldMouseY<>Y1) Then
  234.         NewPosition(OldMouseX,OldMouseY);
  235.     End
  236.     Else
  237.     Begin
  238.       If KeyPressed Then C:=ReadKey;
  239.       If C=#0 Then
  240.       Begin
  241.         C:=ReadKey;
  242.         Case C Of
  243.           'K':If X1>4                       Then NewPosition(X1-4,Y1);
  244.           'M':If X2<VideoCard[Card].XSize-6 Then NewPosition(X1+4,Y1);
  245.           'H':If Y1>4                       Then NewPosition(X1,Y1-4);
  246.           'P':If Y2<VideoCard[Card].YSize-5 Then NewPosition(X1,Y1+4);
  247.         End;
  248.       End
  249.       Else
  250.         Case C Of
  251.           '4':If X1>1                       Then NewPosition(X1-1,Y1);
  252.           '6':If X2<VideoCard[Card].XSize-2 Then NewPosition(X1+1,Y1);
  253.           '8':If Y1>1                       Then NewPosition(X1,Y1-1);
  254.           '2':If Y2<VideoCard[Card].YSize-1 Then NewPosition(X1,Y1+1);
  255.         End;
  256.     End;
  257.   Until (C in [#27,#13]) Or (MouseRelease And Mouse.Active);
  258.   If (C=#27) Then
  259.     NewPosition(OldX,OldY);
  260.   Buttons.Buttons:=OldBut;
  261. End;
  262.  
  263. Procedure TextWindow.DragVertSlideButton;
  264.  
  265. Var
  266.   Dummy,
  267.   SlideBarX1,
  268.   SlideBarY1,
  269.   SlideBarX2,
  270.   SlideBarY2,
  271.   OldMouseY,
  272.   MouseX,
  273.   MouseY       :Word;
  274.   MouseL,
  275.   MouseR,
  276.   MouseM,
  277.   MouseMoved,
  278.   MouseRelease :Boolean;
  279.   OldSlideBarMx:LongInt;
  280.   C            :Char;
  281.   NewSlide     :SlideBarInfo;
  282.  
  283. Begin
  284.   OldSlideBarMx:=VSlide.MaxPos;
  285.   C:=#1;
  286.   MouseRelease:=False;
  287.   VertSlideButtonPos(MouseX,MouseY,Dummy,Dummy);
  288.   MouseY:=65535;
  289.   Repeat
  290.     MouseMoved:=False;
  291.     OldMouseY:=MouseY;
  292.     KeyBuffer(Clear);
  293.     Repeat
  294.       If Mouse.Active Then
  295.       Begin
  296.         Mouse.GetStatus(MouseX,MouseY,MouseL,MouseR,MouseM);
  297.         MouseY:=(MouseY Div MouseGranularity) + 1;
  298.         If (MouseY<>OldMouseY) Then MouseMoved:=True;
  299.         If (Not MouseL) And (Not MouseR) Then MouseRelease:=True;
  300.       End;
  301.     Until KeyPressed Or MouseMoved Or MouseRelease;
  302.  
  303.     VertSlideBarPos(SlideBarX1,SlideBarY1,SlideBarX2,SlideBarY2);
  304.     If KeyPressed Then
  305.     Begin
  306.       C:=ReadKey;
  307.       If C=#0 Then
  308.       Begin
  309.         C:=ReadKey;
  310.         Case C Of
  311.           'H':If MouseY>SlideBarY1   Then Dec(MouseY,1);
  312.           'I':If MouseY>SlideBarY1+9 Then Dec(MouseY,10);
  313.           'P':If MouseY<SlideBarY2   Then Inc(MouseY,1);
  314.           'Q':If MouseY<SlideBarY2-9 Then Inc(MouseY,10);
  315.         End;
  316.       End;
  317.     End
  318.     Else
  319.     Begin
  320.       If (MouseY>SlideBarY2) Then MouseY:=SlideBarY2;
  321.       If (MouseY<SlideBarY1) Then MouseY:=SlideBarY1;
  322.     End;
  323.  
  324.     NewSlide:=VSlide;
  325.     NewSlide.CurPos:=MouseY-SlideBarY1;
  326.     NewSlide.MaxPos:=SlideBarY2-SlideBarY1;
  327.     VertSlideBar(NewSlide);
  328.  
  329.   Until (C in [#13,#27]) Or MouseRelease;
  330.  
  331.   VSlide.MaxPos:=OldSlideBarMx;
  332.   VSlide.CurPos:=AdjustMeter(0,SlideBarY2-SlideBarY1,MouseY-SlideBarY1,
  333.                              0,VSlide.MaxPos);
  334. End;
  335.  
  336. Procedure TextWindow.DragHorzSlideButton;
  337.  
  338. Var
  339.   Dummy,
  340.   SlideBarX1,
  341.   SlideBarY1,
  342.   SlideBarX2,
  343.   SlideBarY2,
  344.   OldMouseX,
  345.   MouseX,
  346.   MouseY       :Word;
  347.   MouseL,
  348.   MouseR,
  349.   MouseM,
  350.   MouseMoved,
  351.   MouseRelease :Boolean;
  352.   OldSlideBarMx:LongInt;
  353.   C            :Char;
  354.   NewSlide     :SlideBarInfo;
  355.  
  356. Begin
  357.   OldSlideBarMx:=HSlide.MaxPos;
  358.   C:=#1;
  359.   MouseRelease:=False;
  360.   HorzSlideButtonPos(MouseX,MouseY,Dummy,Dummy);
  361.   MouseX:=65535;
  362.   Repeat
  363.     MouseMoved:=False;
  364.     OldMouseX:=MouseX;
  365.     KeyBuffer(Clear);
  366.     Repeat
  367.       If Mouse.Active Then
  368.       Begin
  369.         Mouse.GetStatus(MouseX,MouseY,MouseL,MouseR,MouseM);
  370.         MouseX:=(MouseX Div MouseGranularity) + 1;
  371.         If (MouseX<>OldMouseX) Then MouseMoved:=True;
  372.         If (Not MouseL) And (Not MouseR) Then MouseRelease:=True;
  373.       End;
  374.     Until KeyPressed Or MouseMoved Or MouseRelease;
  375.  
  376.     HorzSlideBarPos(SlideBarX1,SlideBarY1,SlideBarX2,SlideBarY2);
  377.     If KeyPressed Then
  378.     Begin
  379.       C:=ReadKey;
  380.       If C=#0 Then
  381.       Begin
  382.         C:=ReadKey;
  383.         Case C Of
  384.           'K':If MouseX>SlideBarX1   Then Dec(MouseX,1);
  385.           'I':If MouseX>SlideBarX1+9 Then Dec(MouseX,10);
  386.           'M':If MouseX<SlideBarX2   Then Inc(MouseX,1);
  387.           'Q':If MouseX<SlideBarX2-9 Then Inc(MouseX,10);
  388.         End;
  389.       End;
  390.     End
  391.     Else
  392.     Begin
  393.       If (MouseX>SlideBarX2) Then MouseX:=SlideBarX2;
  394.       If (MouseX<SlideBarX1) Then MouseX:=SlideBarX1;
  395.     End;
  396.  
  397.     NewSlide:=HSlide;
  398.     NewSlide.CurPos:=MouseX-SlideBarX1;
  399.     NewSlide.MaxPos:=SlideBarX2-SlideBarX1;
  400.     HorzSlideBar(NewSlide);
  401.   Until (C in [#13,#27]) Or MouseRelease;
  402.  
  403.   HSlide.MaxPos:=OldSlideBarMx;
  404.   HSlide.CurPos:=AdjustMeter(0,SlideBarX2-SlideBarX1,MouseX-SlideBarX1,
  405.                              0,HSlide.MaxPos);
  406. End;
  407.  
  408. Procedure TextWindow.NewSize(NX1,NY1,NX2,NY2:Word);
  409.  
  410. Var
  411.   NewHead:String;
  412.  
  413. Begin
  414.   UnPadVar(Header,NewHead);   {Save the heading}
  415.   Close;
  416.   Open(NX1,NY1,NX2,NY2,BoxFrg,BoxBck,ShdFrg,ShdBck,LineStyle,ShadowStyle);
  417.   If NewHead<>'' Then         {ReOpen the window}
  418.   Begin
  419.     FormatVar(NewHead,Header,X2-X1-1,HdrFmt);
  420.     DisplayHeading;
  421.   End;
  422. End;
  423.  
  424. Procedure TextWindow.NewStyle(Forg,Back,ShadForg,ShadBack:Byte;
  425.                               LStyle:LineStyles;SStyle:ShadowStyles);
  426.  
  427. Var
  428.   NewHead:String;
  429.  
  430. Begin
  431.   NewHead:=Header;
  432.   Close;                         {ReOpen the window with new info}
  433.   Open(X1,Y1,X2,Y2,Forg,Back,ShadForg,ShadBack,LStyle,SStyle);
  434.   Header:=NewHead;
  435.   DisplayHeading;
  436. End;
  437.  
  438. Procedure TextWindow.HeadingIcon(Active:Boolean);
  439.  
  440. Var
  441.   HeadingX1,
  442.   HeadingY1,
  443.   HeadingX2,
  444.   HeadingY2:Word;
  445.  
  446. Begin
  447.   HeadingPos(HeadingX1,HeadingY1,HeadingX2,HeadingY2);
  448.   If Active Then
  449.   Begin
  450.     If HdrButtonNum=0 Then
  451.     Begin
  452.       Buttons.Add(HeadingX1, HeadingY1, HeadingX2, HeadingY2,
  453.                   SpecialCode(Key_Ctrl, Key_F5), KeyCode(Key_Ctrl, Key_F5));
  454.       HdrButtonNum:=Buttons.Number;
  455.     End;
  456.   End
  457.   Else
  458.   Begin
  459.     Buttons.GotoNumber(HdrButtonNum);
  460.     Buttons.KillOne;
  461.     HdrButtonNum:=0;
  462.   End;
  463. End;
  464.  
  465. Procedure TextWindow.VertSlideIcon(Active:Boolean);
  466.  
  467. Var
  468.   SlideButtonX1,
  469.   SlideButtonY1,
  470.   SlideButtonX2,
  471.   SlideButtonY2,
  472.  
  473.   SlideButtonUpX1,
  474.   SlideButtonUpY1,
  475.   SlideButtonUpX2,
  476.   SlideButtonUpY2,
  477.  
  478.   SlideButtonDownX1,
  479.   SlideButtonDownY1,
  480.   SlideButtonDownX2,
  481.   SlideButtonDownY2,
  482.  
  483.   SlideBarX1,
  484.   SlideBarY1,
  485.   SlideBarX2,
  486.   SlideBarY2    :Word;
  487.  
  488. Begin
  489.   VertSlideBarPos(SlideBarX1,SlideBarY1,SlideBarX2,SlideBarY2);
  490.   VertSlideButtonPos(SlideButtonX1,SlideButtonY1,SlideButtonX2,SlideButtonY2);
  491.   VertSlideButtonUpPos(SlideButtonUpX1,SlideButtonUpY1,SlideButtonUpX2,SlideButtonUpY2);
  492.   VertSlideButtonDownPos(SlideButtonDownX1,SlideButtonDownY1,SlideButtonDownX2,SlideButtonDownY2);
  493.  
  494.   If Active And (VSlide.MaxPos>0) Then
  495.   Begin
  496.     If VSlide.ButtonNum=0 Then
  497.     Begin
  498.       Buttons.Add(SlideButtonX1, SlideButtonY1, SlideButtonX2,
  499.                   SlideButtonY2,
  500.                   SpecialCode(Mouse_Only, Mouse_SlideButtonVert), KeyCode(Mouse_Only, Mouse_SlideButtonVert));
  501.       VSlide.ButtonNum:=Buttons.Number;
  502.     End;
  503.     If VSlide.BarButtonNum=0 Then
  504.     Begin
  505.       Buttons.Add(SlideBarX1, SlideBarY1, SlideBarX2,
  506.                   SlideBarY2,
  507.                   SpecialCode(Mouse_Only, Mouse_SlideBarVert), KeyCode(Mouse_Only, Mouse_SlideBarVert));
  508.       VSlide.BarButtonNum:=Buttons.Number;
  509.     End;
  510.     If VSlide.ButtonLeftUpNum=0 Then
  511.     Begin
  512.       Buttons.Add(SlideButtonUpX1, SlideButtonUpY1, SlideButtonUpX2,
  513.                   SlideButtonUpY2,
  514.                   SpecialCode(Key_None, Key_Up), KeyCode(Key_None, Key_Up));
  515.       VSlide.ButtonLeftUpNum:=Buttons.Number;
  516.     End;
  517.     If VSlide.ButtonRightDownNum=0 Then
  518.     Begin
  519.       Buttons.Add(SlideButtonDownX1, SlideButtonDownY1, SlideButtonDownX2,
  520.                   SlideButtonDownY2,
  521.                   SpecialCode(Key_None, Key_Down), KeyCode(Key_None, Key_Down));
  522.       VSlide.ButtonRightDownNum:=Buttons.Number;
  523.     End;
  524.   End
  525.   Else
  526.   Begin
  527.     Buttons.GotoNumber(VSlide.BarButtonNum);
  528.     Buttons.KillOne;
  529.     VSlide.BarButtonNum:=0;
  530.     Buttons.GotoNumber(VSlide.ButtonNum);
  531.     Buttons.KillOne;
  532.     VSlide.ButtonNum:=0;
  533.     Buttons.GotoNumber(VSlide.ButtonRightDownNum);
  534.     Buttons.KillOne;
  535.     VSlide.ButtonRightDownNum:=0;
  536.     Buttons.GotoNumber(VSlide.ButtonLeftUpNum);
  537.     Buttons.KillOne;
  538.     VSlide.ButtonLeftUpNum:=0;
  539.   End;
  540. End;
  541.  
  542. Procedure TextWindow.HorzSlideIcon(Active:Boolean);
  543.  
  544. Var
  545.   SlideButtonX1,
  546.   SlideButtonY1,
  547.   SlideButtonX2,
  548.   SlideButtonY2,
  549.  
  550.   SlideButtonUpX1,
  551.   SlideButtonUpY1,
  552.   SlideButtonUpX2,
  553.   SlideButtonUpY2,
  554.  
  555.   SlideButtonDownX1,
  556.   SlideButtonDownY1,
  557.   SlideButtonDownX2,
  558.   SlideButtonDownY2,
  559.  
  560.   SlideBarX1,
  561.   SlideBarY1,
  562.   SlideBarX2,
  563.   SlideBarY2    :Word;
  564.  
  565. Begin
  566.   HorzSlideBarPos(SlideBarX1,SlideBarY1,SlideBarX2,SlideBarY2);
  567.   HorzSlideButtonPos(SlideButtonX1,SlideButtonY1,SlideButtonX2,SlideButtonY2);
  568.   HorzSlideButtonLeftPos(SlideButtonUpX1,SlideButtonUpY1,SlideButtonUpX2,SlideButtonUpY2);
  569.   HorzSlideButtonRightPos(SlideButtonDownX1,SlideButtonDownY1,SlideButtonDownX2,SlideButtonDownY2);
  570.  
  571.   If Active And (HSlide.MaxPos>0) Then
  572.   Begin
  573.     If HSlide.ButtonNum=0 Then
  574.     Begin
  575.       Buttons.Add(SlideButtonX1, SlideButtonY1, SlideButtonX2,
  576.                   SlideButtonY2,
  577.                   SpecialCode(Mouse_Only, Mouse_SlideButtonHorz), KeyCode(Mouse_Only, Mouse_SlideButtonHorz));
  578.       HSlide.ButtonNum:=Buttons.Number;
  579.     End;
  580.     If HSlide.BarButtonNum=0 Then
  581.     Begin
  582.       Buttons.Add(SlideBarX1, SlideBarY1, SlideBarX2,
  583.                   SlideBarY2,
  584.                   SpecialCode(Mouse_Only, Mouse_SlideBarHorz), KeyCode(Mouse_Only, Mouse_SlideBarHorz));
  585.       HSlide.BarButtonNum:=Buttons.Number;
  586.     End;
  587.     If HSlide.ButtonLeftUpNum=0 Then
  588.     Begin
  589.       Buttons.Add(SlideButtonUpX1, SlideButtonUpY1, SlideButtonUpX2,
  590.                   SlideButtonUpY2,
  591.                   SpecialCode(Key_None, Key_Left), KeyCode(Key_None, Key_Left));
  592.       HSlide.ButtonLeftUpNum:=Buttons.Number;
  593.     End;
  594.     If HSlide.ButtonRightDownNum=0 Then
  595.     Begin
  596.       Buttons.Add(SlideButtonDownX1, SlideButtonDownY1, SlideButtonDownX2,
  597.                   SlideButtonDownY2,
  598.                   SpecialCode(Key_None, Key_Right), KeyCode(Key_None, Key_Right));
  599.       HSlide.ButtonRightDownNum:=Buttons.Number;
  600.     End;
  601.   End
  602.   Else
  603.   Begin
  604.     Buttons.GotoNumber(HSlide.BarButtonNum);
  605.     Buttons.KillOne;
  606.     HSlide.BarButtonNum:=0;
  607.     Buttons.GotoNumber(HSlide.ButtonNum);
  608.     Buttons.KillOne;
  609.     HSlide.ButtonNum:=0;
  610.     Buttons.GotoNumber(HSlide.ButtonRightDownNum);
  611.     Buttons.KillOne;
  612.     HSlide.ButtonRightDownNum:=0;
  613.     Buttons.GotoNumber(HSlide.ButtonLeftUpNum);
  614.     Buttons.KillOne;
  615.     HSlide.ButtonLeftUpNum:=0;
  616.   End;
  617. End;
  618.  
  619. Procedure TextWindow.DrawVertSlideBar;
  620. Begin
  621.   If VSlide.MaxPos=0 Then Exit;
  622.   VSlide.ButtonScreenPos:=AdjustMeter(0,VSlide.MaxPos,VSlide.CurPos,VSlide.Y1+1,VSlide.Y2-1);
  623.   Mouse.Hide;
  624.   VideoColor(VSlide.Forg,VSlide.Back);
  625.   FillBlock(VSlide.X1,VSlide.Y1+1,VSlide.X2,VSlide.Y2-1,VSlide.MainChar);
  626.   GotoXY(VSlide.X1,VSlide.ButtonScreenPos);
  627.   WriteChr(VSlide.ButtonChar);
  628.   GotoXY(VSlide.X1,VSlide.Y1);
  629.   WriteChr(VSlide.UpLeftChar);
  630.   GotoXY(VSlide.X1,VSlide.Y2);
  631.   WriteChr(VSlide.DownRightChar);
  632.   Mouse.Show;
  633. End;
  634.  
  635. Procedure TextWindow.VertSlideBar(Details:SlideBarInfo);
  636.  
  637. Var
  638.   Dummy,
  639.   NewX,
  640.   NewY,
  641.   OldX,
  642.   OldY    :Word;
  643.  
  644. Begin
  645.   VertSlideButtonPos(OldX,OldY,Dummy,Dummy);
  646.  
  647.   VSlide.X1                :=Details.X1;
  648.   VSlide.Y1                :=Details.Y1;
  649.   VSlide.X2                :=Details.X2;
  650.   VSlide.Y2                :=Details.Y2;
  651.   VSlide.Forg              :=Details.Forg;
  652.   VSlide.Back              :=Details.Back;
  653.   VSlide.MainChar          :=Details.MainChar;
  654.   VSlide.ButtonChar        :=Details.ButtonChar;
  655.   VSlide.UpLeftChar        :=Details.UpLeftChar;
  656.   VSlide.DownRightChar     :=Details.DownRightChar;
  657.   VSlide.CurPos            :=Details.CurPos;
  658.   VSlide.MaxPos            :=Details.MaxPos;
  659.  
  660.   DrawVertSlideBar;
  661.   If VSlide.ButtonNum>0 Then
  662.   Begin
  663.     VertSlideButtonPos(NewX,NewY,Dummy,Dummy);
  664.     Buttons.Move(Integer(NewX)-OldX,Integer(NewY)-OldY,VSlide.ButtonNum);
  665.   End;
  666. End;
  667.  
  668. Procedure TextWindow.UpdateVertSlideBar(CurPos:LongInt);
  669.  
  670. Var
  671.   Dummy,
  672.   NewX,
  673.   NewY,
  674.   OldX,
  675.   OldY    :Word;
  676.  
  677. Begin
  678.   VertSlideButtonPos(OldX,OldY,Dummy,Dummy);
  679.   VSlide.CurPos:=CurPos;
  680.   DrawVertSlideBar;
  681.   If VSlide.ButtonNum>0 Then
  682.   Begin
  683.     VertSlideButtonPos(NewX,NewY,Dummy,Dummy);
  684.     Buttons.Move(Integer(NewX)-OldX,Integer(NewY)-OldY,VSlide.ButtonNum);
  685.   End;
  686. End;
  687.  
  688. Procedure TextWindow.DrawHorzSlideBar;
  689. Begin
  690.   If HSlide.MaxPos=0 Then Exit;
  691.   HSlide.ButtonScreenPos:=AdjustMeter(0,HSlide.MaxPos,HSlide.CurPos,HSlide.X1+1,HSlide.X2-1);
  692.   Mouse.Hide;
  693.   VideoColor(HSlide.Forg,HSlide.Back);
  694.   FillBlock(HSlide.X1+1,HSlide.Y1,HSlide.X2-1,HSlide.Y2,HSlide.MainChar);
  695.   GotoXY(HSlide.ButtonScreenPos,HSlide.Y1);
  696.   WriteChr(HSlide.ButtonChar);  {Still do Arrows, Use nnnnSlideBarPos}
  697.   GotoXY(HSlide.X1,HSlide.Y1);
  698.   WriteChr(HSlide.UpLeftChar);
  699.   GotoXY(HSlide.X2,HSlide.Y2);
  700.   WriteChr(HSlide.DownRightChar);
  701.   Mouse.Show;
  702. End;
  703.  
  704. Procedure TextWindow.HorzSlideBar(Details:SlideBarInfo);
  705.  
  706. Var
  707.   Dummy,
  708.   NewX,
  709.   NewY,
  710.   OldX,
  711.   OldY    :Word;
  712.  
  713. Begin
  714.   HorzSlideButtonPos(OldX,OldY,Dummy,Dummy);
  715.  
  716.   HSlide.X1                :=Details.X1;
  717.   HSlide.Y1                :=Details.Y1;
  718.   HSlide.X2                :=Details.X2;
  719.   HSlide.Y2                :=Details.Y2;
  720.   HSlide.Forg              :=Details.Forg;
  721.   HSlide.Back              :=Details.Back;
  722.   HSlide.MainChar          :=Details.MainChar;
  723.   HSlide.ButtonChar        :=Details.ButtonChar;
  724.   HSlide.UpLeftChar        :=Details.UpLeftChar;
  725.   HSlide.DownRightChar     :=Details.DownRightChar;
  726.   HSlide.CurPos            :=Details.CurPos;
  727.   HSlide.MaxPos            :=Details.MaxPos;
  728.  
  729.   DrawHorzSlideBar;
  730.   If HSlide.ButtonNum>0 Then
  731.   Begin
  732.     HorzSlideButtonPos(NewX,NewY,Dummy,Dummy);
  733.     Buttons.Move(Integer(NewX)-OldX,Integer(NewY)-OldY,HSlide.ButtonNum);
  734.   End;
  735. End;
  736.  
  737. Procedure TextWindow.UpdateHorzSlideBar(CurPos:LongInt);
  738.  
  739. Var
  740.   Dummy,
  741.   NewX,
  742.   NewY,
  743.   OldX,
  744.   OldY    :Word;
  745.  
  746. Begin
  747.   HorzSlideButtonPos(OldX,OldY,Dummy,Dummy);
  748.   HSlide.CurPos:=CurPos;
  749.   DrawHorzSlideBar;
  750.   If HSlide.ButtonNum>0 Then
  751.   Begin
  752.     HorzSlideButtonPos(NewX,NewY,Dummy,Dummy);
  753.     Buttons.Move(Integer(NewX)-OldX,Integer(NewY)-OldY,HSlide.ButtonNum);
  754.   End;
  755. End;
  756.  
  757. Procedure TextWindow.HeadingPos(Var BX1,BY1,BX2,BY2:Word);
  758. Begin
  759.   BX1:=X1+1;
  760.   BY1:=Y1+1;
  761.   BX2:=X2-1;
  762.   BY2:=Y1+1;
  763. End;
  764.  
  765. Procedure TextWindow.VertSlideBarPos(Var BX1,BY1,BX2,BY2:Word);
  766. Begin
  767.   BX1:=VSlide.X1;
  768.   BY1:=VSlide.Y1+1;
  769.   BX2:=VSlide.X2;
  770.   BY2:=VSlide.Y2-1;
  771. End;
  772.  
  773. Procedure TextWindow.VertSlideButtonPos(Var BX1,BY1,BX2,BY2:Word);
  774. Begin
  775.   BX1:=VSlide.X1;
  776.   BY1:=VSlide.ButtonScreenPos;
  777.   BX2:=VSlide.X2;
  778.   BY2:=BY1;
  779. End;
  780.  
  781. Procedure TextWindow.VertSlideButtonUpPos(Var BX1,BY1,BX2,BY2:Word);
  782. Begin
  783.   BX1:=VSlide.X1;
  784.   BY1:=VSlide.Y1;
  785.   BX2:=BX1;
  786.   BY2:=BY1;
  787. End;
  788.  
  789. Procedure TextWindow.VertSlideButtonDownPos(Var BX1,BY1,BX2,BY2:Word);
  790. Begin
  791.   BX1:=VSlide.X1;
  792.   BY1:=VSlide.Y2;
  793.   BX2:=BX1;
  794.   BY2:=BY1;
  795. End;
  796.  
  797. Procedure TextWindow.HorzSlideBarPos(Var BX1,BY1,BX2,BY2:Word);
  798. Begin
  799.   BX1:=HSlide.X1 + 1;
  800.   BY1:=HSlide.Y1;
  801.   BX2:=HSlide.X2 - 1;
  802.   BY2:=HSlide.Y2;
  803. End;
  804.  
  805. Procedure TextWindow.HorzSlideButtonPos(Var BX1,BY1,BX2,BY2:Word);
  806. Begin
  807.   BX1:=HSlide.ButtonScreenPos;
  808.   BY1:=HSlide.Y1;
  809.   BX2:=BX1;
  810.   BY2:=HSlide.Y2;
  811. End;
  812.  
  813. Procedure TextWindow.HorzSlideButtonLeftPos(Var BX1,BY1,BX2,BY2:Word);
  814. Begin
  815.   BX1:=HSlide.X1;
  816.   BY1:=HSlide.Y1;
  817.   BX2:=BX1;
  818.   BY2:=BY1;
  819. End;
  820.  
  821. Procedure TextWindow.HorzSlideButtonRightPos(Var BX1,BY1,BX2,BY2:Word);
  822. Begin
  823.   BX1:=HSlide.X2;
  824.   BY1:=HSlide.Y2;
  825.   BX2:=BX1;
  826.   BY2:=BY1;
  827. End;
  828.  
  829. Procedure TextWindow.Lock;
  830. Begin
  831.   Window(X1,Y1,X2,Y2);   {Confine screen output to this window}
  832. End;
  833.  
  834. Procedure TextWindow.UnLock;
  835. Begin
  836.   Window(1,1,VideoCard[Card].XSize,VideoCard[Card].YSize);     {User can write anywhere on screen}
  837. End;
  838.  
  839. Procedure TextWindow.Close;
  840. Begin
  841.   Mouse.Hide;
  842.   PutTextImage(X1,Y1,Save);    {Restore the screen as it was}
  843.   Mouse.Show;
  844.   FreeMem(Save,Size);
  845. End;
  846.  
  847. { Copyright 1993, Michael Gallias }
  848.