home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PASCAL / PSGUI130.ZIP / PGUIWIN.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1993-01-01  |  24.4 KB  |  969 lines

  1. {
  2.  
  3.                                                       ╔══════════════════╗
  4.                                                       ║  PGUI Graphic    ║
  5.                                                       ║  Window Include  ║
  6.                                                       ║    Rev.  1.00    ║
  7.                                                       ╚══════════════════╝
  8.  
  9. }
  10.  
  11. Procedure GraphicWindow.SaveBackground;
  12. Begin
  13.   Mouse.Hide;
  14.   Size:=ImageSize(X1,Y1,X2,Y2);
  15.   If Size>MaxAvail Then Error(1);
  16.   GetMem(Save,Size);
  17.   GetImage(X1,Y1,X2,Y2,Save^);
  18.   Mouse.Show;
  19. End;
  20.  
  21. Procedure GraphicWindow.DrawWindow;
  22.  
  23. Var
  24.   X  :Byte;
  25.   Old:Record
  26.         Color:Word;
  27.         Style:FillSettingsType;
  28.       End;
  29.  
  30. Begin
  31.   Mouse.Hide;
  32.   Old.Color:=GetColor;
  33.   GetFillSettings(Old.Style);
  34.  
  35.   SetColor       (BoxBck);
  36.   Line(X1+1,Y1,X2-1,Y1);            {-----}
  37.   Line(X1,Y1+1,X1,Y2-1);            {|<  |}
  38.   Line(X2,Y1+1,X2,Y2-1);            {|  >|}
  39.   Line(X1+1,Y2,X2-1,Y2);            {-----}
  40.  
  41.   SetColor       (BoxFrg);
  42.   SetFillStyle   (Pattern,FillColor);
  43.   For X:=1 to Thickness do
  44.     Rectangle(X1+X,Y1+X,X2-X,Y2-X);
  45.   Inc(X);
  46.   Bar(X1+X,Y1+X,X2-X,Y2-X);
  47.  
  48.   PutPixel(X1+1,Y1+1,BoxBck);
  49.   PutPixel(X2-1,Y2-1,BoxBck);
  50.   PutPixel(X2-1,Y1+1,BoxBck);
  51.   PutPixel(X1+1,Y2-1,BoxBck);
  52.  
  53.   PutPixel(X1+X,Y1+X,BoxFrg);
  54.   PutPixel(X2-X,Y2-X,BoxFrg);
  55.   PutPixel(X2-X,Y1+X,BoxFrg);
  56.   PutPixel(X1+X,Y2-X,BoxFrg);
  57.  
  58.   SetColor(Old.Color);
  59.   SetFillStyle(Old.Style.Pattern,Old.Style.Color);
  60.   Mouse.Show;
  61. End;
  62.  
  63. Procedure GraphicWindow.Open(NX1,NY1,NX2,NY2,Forg,Back,
  64.                              Thick,Patrn,PatClr:Word;KeepBackground:Boolean);
  65. Begin
  66.   Buttons.Init;
  67.   HdrButtonNum        :=0;
  68.   VSlideButtonNum     :=0;
  69.   VSlideBarButtonNum  :=0;
  70.   VSlideButtonUpNum   :=0;
  71.   VSlideButtonDownNum :=0;
  72.   VSlideBarMaxPos     :=0;
  73.   VSlideBarCurPos     :=0;
  74.   HSlideButtonNum     :=0;
  75.   HSlideBarButtonNum  :=0;
  76.   HSlideButtonLeftNum :=0;
  77.   HSlideButtonRightNum:=0;
  78.   HSlideBarMaxPos     :=0;
  79.   HSlideBarCurPos     :=0;
  80.   VSlideBarPat        :=0;
  81.   VSlideBarClr        :=0;
  82.   HSlideBarPat        :=0;
  83.   HSlideBarClr        :=0;
  84.   CloseButtonNum      :=0;
  85.   KeepBack            :=KeepBackground;
  86.   Status              :=Visible;
  87.   Header              :='';
  88.   BoxFrg              :=Forg;
  89.   BoxBck              :=Back;
  90.   Thickness           :=Thick;
  91.   Pattern             :=Patrn;
  92.   FillColor           :=PatClr;
  93.   X1                  :=NX1;
  94.   Y1                  :=NY1;
  95.   X2                  :=NX2;
  96.   Y2                  :=NY2;
  97.  
  98.   If KeepBack Then
  99.     SaveBackground
  100.   Else
  101.   Begin
  102.     Size:=0;
  103.     Save:=NIL;
  104.   End;
  105.   DrawWindow;
  106. End;
  107.  
  108. Procedure GraphicWindow.DisplayHeading;
  109.  
  110. Var
  111.   XPos:Word;
  112.   Old :Record
  113.          Color:Word;
  114.          Style:FillSettingsType;
  115.        End;
  116.  
  117. Begin
  118.   Mouse.Hide;
  119.   GetFillSettings(Old.Style);
  120.   If Header<>'' Then
  121.   Begin
  122.     Old.Color:=GetColor;
  123.     SetColor       (HdrFrg);
  124.     SetFillStyle   (HdrPattern,HdrFillColor);
  125.     Bar(X1+Thickness+2,Y1+Thickness+2,X2-Thickness-2,Y1+Thickness+12);
  126.     Case HdrFmt Of
  127.       LeftText  :XPos:=X1+4;
  128.       CentreText:XPos:=X1+((X2-X1) Div 2)-(Length(Header)*4);
  129.       RightText :XPos:=X2-2*Thickness-(Length(Header)*8)-2;
  130.     End;
  131.     OutTextXY(XPos+Thickness,Y1+4+Thickness,Header);
  132.     SetColor(Old.Color);
  133.   End
  134.   Else
  135.   Begin
  136.     SetFillStyle   (Pattern,FillColor);
  137.     Bar(X1+Thickness+2,Y1+Thickness+2,X2-Thickness-2,Y1+Thickness+12);
  138.   End;
  139.   SetFillStyle(Old.Style.Pattern,Old.Style.Color);
  140.   Mouse.Show;
  141. End;
  142.  
  143. Procedure GraphicWindow.NewHeading(NewHead:String;NewMode:TextFormats;
  144.                                    Forg,Patrn,PatClr:Word);
  145. Begin
  146.   HdrFrg:=Forg;
  147.   HdrPattern:=Patrn;
  148.   HdrFillColor:=PatClr;
  149.   HdrFmt:=NewMode;
  150.   If NewHead='' Then
  151.     Header:=''
  152.   Else
  153.     Header:=NewHead;
  154.   DisplayHeading;
  155. End;
  156.  
  157. Procedure GraphicWindow.Hide;
  158.  
  159. Var
  160.   NewSave :Pointer;
  161.  
  162. Begin
  163.   Status:=Hidden;
  164.   If KeepBack Then
  165.   Begin
  166.     If Size>MaxAvail Then Error(1);
  167.     GetMem(NewSave,Size);
  168.     Mouse.Hide;
  169.     GetImage(X1,Y1,X2,Y2,NewSave^);
  170.     PutImage(X1,Y1,Save^,NormalPut);
  171.     Mouse.Show;
  172.     FreeMem(Save,Size);
  173.     Save:=NewSave;
  174.   End
  175.   Else
  176.   Begin
  177.     Mouse.Hide;
  178.     SetFillStyle(SolidFill,BoxBck);
  179.     Bar(X1,Y1,X2,Y2);
  180.     Mouse.Show;
  181.   End;
  182. End;
  183.  
  184. Procedure GraphicWindow.Show;
  185.  
  186. Var
  187.   NewSave :Pointer;
  188.  
  189. Begin
  190.   Status:=Visible;
  191.   If KeepBack Then
  192.   Begin
  193.     If Size>MaxAvail Then Error(1);
  194.     GetMem(NewSave,Size);
  195.     Mouse.Hide;
  196.     GetImage(X1,Y1,X2,Y2,NewSave^);
  197.     PutImage(X1,Y1,Save^,NormalPut);
  198.     Mouse.Show;
  199.     FreeMem(Save,Size);
  200.     Save:=NewSave;
  201.   End
  202.   Else
  203.   Begin
  204.     DrawWindow;
  205.     DisplayHeading;
  206.     If CloseButtonNum<>0 Then
  207.       PutImage(X1+Thickness+2,Y1+Thickness+2,IconCloseButton^,CopyPut);
  208.     If VSlideButtonNum<>0 Then DrawVertSlideBar;
  209.     If HSlideButtonNum<>0 Then DrawHorzSlideBar;
  210.   End;
  211. End;
  212.  
  213. Procedure GraphicWindow.NewPosition(NewX,NewY:Word);
  214. Begin
  215.   Hide;
  216.   Buttons.MoveAll(Integer(NewX)-X1,Integer(NewY)-Y1);
  217.   X2:=NewX+(X2-X1);
  218.   Y2:=NewY+(Y2-Y1);
  219.   X1:=NewX;
  220.   Y1:=NewY;
  221.   Show;
  222. End;
  223.  
  224. Procedure GraphicWindow.DrawOutLine(NewX,NewY:Word;Var OutLine:OutLineSave);
  225.  
  226. Var
  227.   OldClr:Word;
  228.  
  229. Begin
  230.   X2:=NewX+(X2-X1);          {Saves the outline screen area of a box}
  231.   Y2:=NewY+(Y2-Y1);          {and then draws the outline of the box.}
  232.   X1:=NewX;                  {Saves the old screen area into OutLine.}
  233.   Y1:=NewY;
  234.   With OutLine do
  235.   Begin
  236.     Size1:=ImageSize(X1,Y1,X2,Y1);   {Horizontal}
  237.     Size2:=ImageSize(X1,Y1,X1,Y2);   {Vertical}
  238.     If 2*Size1+2*Size2>MaxAvail Then Error(1);
  239.     GetMem(Data[1],Size1);
  240.     GetMem(Data[2],Size1);
  241.     GetMem(Data[3],Size2);
  242.     GetMem(Data[4],Size2);
  243.     Mouse.Hide;
  244.     GetImage(X1,Y1,X2,Y1,Data[1]^);
  245.     GetImage(X1,Y2,X2,Y2,Data[2]^);
  246.     GetImage(X1,Y1,X1,Y2,Data[3]^);
  247.     GetImage(X2,Y1,X2,Y2,Data[4]^);
  248.     Mouse.Show;
  249.   End;
  250.   OldClr:=GetColor;
  251.   SetColor(BoxFrg);
  252.   Mouse.Hide;
  253.   Rectangle(X1,Y1,X2,Y2);
  254.   Mouse.Show;
  255.   SetColor(OldClr);
  256. End;
  257.  
  258. Procedure GraphicWindow.NoOutLine(Var OutLine:OutLineSave);
  259. Begin
  260.   With OutLine do
  261.   Begin
  262.     Mouse.Hide;
  263.     PutImage(X1,Y1,Data[1]^,NormalPut);  {Restores the screen to as it}
  264.     PutImage(X1,Y2,Data[2]^,NormalPut);  {was before DrawOutLine was called.}
  265.     PutImage(X1,Y1,Data[3]^,NormalPut);
  266.     PutImage(X2,Y1,Data[4]^,NormalPut);
  267.     Mouse.Show;
  268.     FreeMem(Data[1],Size1);
  269.     FreeMem(Data[2],Size1);
  270.     FreeMem(Data[3],Size2);
  271.     FreeMem(Data[4],Size2);
  272.     Size1:=0;
  273.   End;
  274. End;
  275.  
  276. Procedure GraphicWindow.Drag;
  277.  
  278. Var
  279.   MouseL,
  280.   MouseR,
  281.   MouseM,
  282.   MouseMoved,
  283.   MouseRelease :Boolean;
  284.   OldMouseX,
  285.   OldMouseY,
  286.   MouseX,
  287.   MouseY,
  288.   MouseStartX,
  289.   MouseStartY,
  290.   MouseDistX,
  291.   MouseDistY,
  292.   NewX,
  293.   NewY,
  294.   OldX,
  295.   OldY         :Word;
  296.   C            :Char;
  297.   OldBut       :Pointer;
  298.   OldData      :OutLineSave;
  299.  
  300. Begin
  301.   OldBut:=Buttons.Buttons;
  302.   If Mouse.Active Then
  303.   Begin
  304.     C:=#1;
  305.     OldMouseX:=65535;
  306.     OldMouseY:=65535;
  307.     MouseStartX:=((X2-X1) Div 2) + X1;
  308.     MouseStartY:=(Y1+Thickness+4);
  309.     MouseDistX:=MouseStartX-X1;
  310.     MouseDistY:=MouseStartY-Y1;
  311.     Mouse.SetXY(MouseStartX,MouseStartY);
  312.   End;
  313.   MouseRelease:=False;
  314.   OldX:=X1;
  315.   OldY:=Y1;
  316.   Repeat
  317.     Repeat
  318.       MouseMoved:=False;
  319.       KeyBuffer(Clear);
  320.       DrawOutLine(X1,Y1,OldData);      {Flashing Outline of a Box}
  321.       NoOutLine(OldData);
  322.       If Mouse.Active Then
  323.       Begin
  324.         Mouse.GetStatus(MouseX,MouseY,MouseL,MouseR,MouseM);
  325.         If (MouseX<>OldMouseX) Or (MouseY<>OldMouseY) Then MouseMoved:=True;
  326.         If (Not MouseL) And (Not MouseR) Then MouseRelease:=True;
  327.       End;
  328.     Until KeyPressed Or MouseMoved Or MouseRelease;
  329.     If MouseMoved Then
  330.     Begin
  331.       If LongInt(MouseX)-LongInt(MouseDistX)<0 Then
  332.         OldMouseX:=0
  333.       Else
  334.         OldMouseX:=MouseX-MouseDistX;
  335.       If LongInt(MouseY)-LongInt(MouseDistY)<0 Then
  336.         OldMouseY:=0
  337.       Else
  338.         OldMouseY:=MouseY-MouseDistY;
  339.       If (OldMouseX+(X2-X1)+2*Thickness>GetMaxX) Then
  340.          OldMouseX:=GetMaxX-(X2-X1)-2*Thickness;
  341.       If (OldMouseY+(Y2-Y1)+2*Thickness>GetMaxY) Then
  342.          OldMouseY:=GetMaxY-(Y2-Y1)-2*Thickness;
  343.       DrawOutLine(OldMouseX,OldMouseY,OldData);
  344.       OldMouseX:=MouseX;
  345.       OldMouseY:=MouseY;
  346.       If OldData.Size1>0 Then NoOutLine(OldData);
  347.     End
  348.     Else
  349.     Begin
  350.       If KeyPressed Then C:=ReadKey;
  351.       If C=#0 Then
  352.       Begin
  353.         C:=ReadKey;
  354.         Case C Of
  355.           'K':If X1>10         Then DrawOutLine(X1-10,Y1,OldData);
  356.           'M':If X2<GetMaxX-9  Then DrawOutLine(X1+10,Y1,OldData);
  357.           'H':If Y1>10         Then DrawOutLine(X1,Y1-10,OldData);
  358.           'P':If Y2<GetMaxY-9  Then DrawOutLine(X1,Y1+10,OldData);
  359.         End;
  360.       End
  361.       Else
  362.         Case C Of
  363.           '4':If X1>0       Then DrawOutLine(X1-1,Y1,OldData);
  364.           '6':If X2<GetMaxX Then DrawOutLine(X1+1,Y1,OldData);
  365.           '8':If Y1>0       Then DrawOutLine(X1,Y1-1,OldData);
  366.           '2':If Y2<GetMaxY Then DrawOutLine(X1,Y1+1,OldData);
  367.         End;
  368.       If OldData.Size1>0 Then NoOutLine(OldData);
  369.     End;
  370.   Until (C in [#27,#13]) Or MouseRelease;
  371.   NewX:=X1;
  372.   NewY:=Y1;
  373.  
  374.   X2:=OldX+(X2-X1);
  375.   Y2:=OldY+(Y2-Y1);
  376.   X1:=OldX;
  377.   Y1:=OldY;
  378.   If (C=#13) Or MouseRelease Then
  379.     NewPosition(NewX,NewY);
  380.   Buttons.Buttons:=OldBut;
  381. End;
  382.  
  383. Procedure GraphicWindow.DragVertSlideButton;
  384.  
  385. Var
  386.   Dummy,
  387.   SlideBarX1,
  388.   SlideBarY1,
  389.   SlideBarX2,
  390.   SlideBarY2,
  391.   OldMouseY,
  392.   MouseX,
  393.   MouseY       :Word;
  394.   MouseL,
  395.   MouseR,
  396.   MouseM,
  397.   MouseMoved,
  398.   MouseRelease :Boolean;
  399.   OldSlideBarMx:LongInt;
  400.   C            :Char;
  401.  
  402. Begin
  403.   OldSlideBarMx:=VSlideBarMaxPos;
  404.   C:=#1;
  405.   MouseRelease:=False;
  406.   VertSlideButtonPos(MouseX,MouseY,Dummy,Dummy);
  407.   MouseY:=65535;
  408.   Repeat
  409.     MouseMoved:=False;
  410.     OldMouseY:=MouseY;
  411.     KeyBuffer(Clear);
  412.     Repeat
  413.       If Mouse.Active Then
  414.       Begin
  415.         Mouse.GetStatus(MouseX,MouseY,MouseL,MouseR,MouseM);
  416.         If (MouseY<>OldMouseY) Then MouseMoved:=True;
  417.         If (Not MouseL) And (Not MouseR) Then MouseRelease:=True;
  418.       End;
  419.     Until KeyPressed Or MouseMoved Or MouseRelease;
  420.  
  421.     VertSlideBarPos(SlideBarX1,SlideBarY1,SlideBarX2,SlideBarY2);
  422.     If KeyPressed Then
  423.     Begin
  424.       C:=ReadKey;
  425.       If C=#0 Then
  426.       Begin
  427.         C:=ReadKey;
  428.         Case C Of
  429.           'H':If MouseY>SlideBarY1   Then Dec(MouseY,1);
  430.           'I':If MouseY>SlideBarY1+9 Then Dec(MouseY,10);
  431.           'P':If MouseY<SlideBarY2   Then Inc(MouseY,1);
  432.           'Q':If MouseY<SlideBarY2-9 Then Inc(MouseY,10);
  433.         End;
  434.       End;
  435.     End
  436.     Else
  437.     Begin
  438.       If (MouseY>SlideBarY2) Then MouseY:=SlideBarY2;
  439.       If (MouseY<SlideBarY1) Then MouseY:=SlideBarY1;
  440.     End;
  441.     VertSlideBar(MouseY-SlideBarY1,SlideBarY2-SlideBarY1,VSlideBarPat,VSlideBarClr);
  442.   Until (C in [#13,#27]) Or MouseRelease;
  443.   VSlideBarMaxPos:=OldSlideBarMx;
  444.   VSlideBarCurPos:=AdjustMeter(0,SlideBarY2-SlideBarY1,MouseY-SlideBarY1,
  445.                                0,VSlideBarMaxPos);
  446. End;
  447.  
  448. Procedure GraphicWindow.DragHorzSlideButton;
  449.  
  450. Var
  451.   Dummy,
  452.   SlideBarX1,
  453.   SlideBarY1,
  454.   SlideBarX2,
  455.   SlideBarY2,
  456.   OldMouseX,
  457.   MouseX,
  458.   MouseY       :Word;
  459.   MouseL,
  460.   MouseR,
  461.   MouseM,
  462.   MouseMoved,
  463.   MouseRelease :Boolean;
  464.   OldSlideBarMx:LongInt;
  465.   C            :Char;
  466.  
  467. Begin
  468.   OldSlideBarMx:=HSlideBarMaxPos;
  469.   C:=#1;
  470.   MouseRelease:=False;
  471.   HorzSlideButtonPos(MouseX,MouseY,Dummy,Dummy);
  472.   MouseX:=65535;
  473.   Repeat
  474.     MouseMoved:=False;
  475.     OldMouseX:=MouseX;
  476.     KeyBuffer(Clear);
  477.     Repeat
  478.       If Mouse.Active Then
  479.       Begin
  480.         Mouse.GetStatus(MouseX,MouseY,MouseL,MouseR,MouseM);
  481.         If (MouseX<>OldMouseX) Then MouseMoved:=True;
  482.         If (Not MouseL) And (Not MouseR) Then MouseRelease:=True;
  483.       End;
  484.     Until KeyPressed Or MouseMoved Or MouseRelease;
  485.  
  486.     HorzSlideBarPos(SlideBarX1,SlideBarY1,SlideBarX2,SlideBarY2);
  487.     If KeyPressed Then
  488.     Begin
  489.       C:=ReadKey;
  490.       If C=#0 Then
  491.       Begin
  492.         C:=ReadKey;
  493.         Case C Of
  494.           'K':If MouseX>SlideBarX1   Then Dec(MouseX,1);
  495.           'I':If MouseX>SlideBarX1+9 Then Dec(MouseX,10);
  496.           'M':If MouseX<SlideBarX2   Then Inc(MouseX,1);
  497.           'Q':If MouseX<SlideBarX2-9 Then Inc(MouseX,10);
  498.         End;
  499.       End;
  500.     End
  501.     Else
  502.     Begin
  503.       If (MouseX>SlideBarX2) Then MouseX:=SlideBarX2;
  504.       If (MouseX<SlideBarX1) Then MouseX:=SlideBarX1;
  505.     End;
  506.     HorzSlideBar(MouseX-SlideBarX1,SlideBarX2-SlideBarX1,HSlideBarPat,HSlideBarClr);
  507.   Until (C in [#13,#27]) Or MouseRelease;
  508.   HSlideBarMaxPos:=OldSlideBarMx;
  509.   HSlideBarCurPos:=AdjustMeter(0,SlideBarX2-SlideBarX1,MouseX-SlideBarX1,
  510.                                0,HSlideBarMaxPos);
  511. End;
  512.  
  513. Procedure GraphicWindow.NewSize(NX1,NY1,NX2,NY2:Word);
  514.  
  515. Var
  516.   NewHead:String;
  517.  
  518. Begin
  519.   NewHead:=Header;
  520.   Close;
  521.   Open(NX1,NY1,NX2,NY2,BoxFrg,BoxBck,Thickness,Pattern,FillColor,KeepBack);
  522.   Header:=NewHead;
  523.   DisplayHeading;
  524.   If HdrButtonNum>0 Then
  525.   Begin
  526.     HeadingIcon(False);
  527.     HeadingIcon(True);
  528.   End;
  529. End;
  530.  
  531. Procedure GraphicWindow.CloseIcon(Active:Boolean);
  532.  
  533. Var
  534.   CloseButtonX1,
  535.   CloseButtonY1,
  536.   CloseButtonX2,
  537.   CloseButtonY2  :Word;
  538.  
  539. Begin
  540.   CloseButtonPos(CloseButtonX1,CloseButtonY1,CloseButtonX2,CloseButtonY2);
  541.   Mouse.Hide;
  542.   If Active Then
  543.   Begin
  544.     PutImage(X1+Thickness+2,Y1+Thickness+2,IconCloseButton^,CopyPut);
  545.     If CloseButtonNum=0 Then
  546.     Begin
  547.       Buttons.Add(CloseButtonX1, CloseButtonY1, CloseButtonX2,
  548.                   CloseButtonY2, 0, 0, NIL, '',
  549.                   SpecialCode(Key_Alt, Key_F3), KeyCode(Key_Alt, Key_F3));
  550.       CloseButtonNum:=Buttons.Number;
  551.     End;
  552.   End
  553.   Else
  554.   Begin
  555.     DisplayHeading;
  556.     Buttons.GotoNumber(CloseButtonNum);
  557.     Buttons.KillOne;
  558.     CloseButtonNum:=0;
  559.   End;
  560.   Mouse.Show;
  561. End;
  562.  
  563. Procedure GraphicWindow.HeadingIcon(Active:Boolean);
  564.  
  565. Var
  566.   HeadingX1,
  567.   HeadingY1,
  568.   HeadingX2,
  569.   HeadingY2:Word;
  570.  
  571. Begin
  572.   HeadingPos(HeadingX1,HeadingY1,HeadingX2,HeadingY2);
  573.   Mouse.Hide;
  574.   If Active Then
  575.   Begin
  576.     If HdrButtonNum=0 Then
  577.     Begin
  578.       Buttons.Add(HeadingX1, HeadingY1, HeadingX2, HeadingY2,
  579.                   0, 0, NIL, '',
  580.                   SpecialCode(Key_Ctrl, Key_F5), KeyCode(Key_Ctrl, Key_F5));
  581.       HdrButtonNum:=Buttons.Number;
  582.     End;
  583.   End
  584.   Else
  585.   Begin
  586.     Buttons.GotoNumber(HdrButtonNum);
  587.     Buttons.KillOne;
  588.     HdrButtonNum:=0;
  589.   End;
  590.   Mouse.Show;
  591. End;
  592.  
  593. Procedure GraphicWindow.VertSlideIcon(Active:Boolean);
  594.  
  595. Var
  596.   SlideButtonX1,
  597.   SlideButtonY1,
  598.   SlideButtonX2,
  599.   SlideButtonY2,
  600.  
  601.   SlideButtonUpX1,
  602.   SlideButtonUpY1,
  603.   SlideButtonUpX2,
  604.   SlideButtonUpY2,
  605.  
  606.   SlideButtonDownX1,
  607.   SlideButtonDownY1,
  608.   SlideButtonDownX2,
  609.   SlideButtonDownY2,
  610.  
  611.   SlideBarX1,
  612.   SlideBarY1,
  613.   SlideBarX2,
  614.   SlideBarY2    :Word;
  615.  
  616. Begin
  617.   VertSlideBarPos(SlideBarX1,SlideBarY1,SlideBarX2,SlideBarY2);
  618.   VertSlideButtonPos(SlideButtonX1,SlideButtonY1,SlideButtonX2,SlideButtonY2);
  619.   VertSlideButtonUpPos(SlideButtonUpX1,SlideButtonUpY1,SlideButtonUpX2,SlideButtonUpY2);
  620.   VertSlideButtonDownPos(SlideButtonDownX1,SlideButtonDownY1,SlideButtonDownX2,SlideButtonDownY2);
  621.  
  622.   If Active And (VSlideBarMaxPos>0) Then
  623.   Begin
  624.     If VSlideButtonNum=0 Then
  625.     Begin
  626.       Buttons.Add(SlideButtonX1, SlideButtonY1, SlideButtonX2,
  627.                   SlideButtonY2, 0, 0, NIL, '',
  628.                   SpecialCode(Mouse_Only, Mouse_SlideButtonVert), KeyCode(Mouse_Only, Mouse_SlideButtonVert));
  629.       VSlideButtonNum:=Buttons.Number;
  630.     End;
  631.     If VSlideBarButtonNum=0 Then
  632.     Begin
  633.       Buttons.Add(SlideBarX1, SlideBarY1, SlideBarX2,
  634.                   SlideBarY2, 0, 0, NIL, '',
  635.                   SpecialCode(Mouse_Only, Mouse_SlideBarVert), KeyCode(Mouse_Only, Mouse_SlideBarVert));
  636.       VSlideBarButtonNum:=Buttons.Number;
  637.     End;
  638.     If VSlideButtonUpNum=0 Then
  639.     Begin
  640.       Buttons.Add(SlideButtonUpX1, SlideButtonUpY1, SlideButtonUpX2,
  641.                   SlideButtonUpY2, 0, 0, NIL, '',
  642.                   SpecialCode(Key_None, Key_Up), KeyCode(Key_None, Key_Up));
  643.       VSlideButtonUpNum:=Buttons.Number;
  644.     End;
  645.     If VSlideButtonDownNum=0 Then
  646.     Begin
  647.       Buttons.Add(SlideButtonDownX1, SlideButtonDownY1, SlideButtonDownX2,
  648.                   SlideButtonDownY2, 0, 0, NIL, '',
  649.                   SpecialCode(Key_None, Key_Down), KeyCode(Key_None, Key_Down));
  650.       VSlideButtonDownNum:=Buttons.Number;
  651.     End;
  652.   End
  653.   Else
  654.   Begin
  655.     Buttons.GotoNumber(VSlideBarButtonNum);
  656.     Buttons.KillOne;
  657.     VSlideBarButtonNum:=0;
  658.     Buttons.GotoNumber(VSlideButtonNum);
  659.     Buttons.KillOne;
  660.     VSlideButtonNum:=0;
  661.     Buttons.GotoNumber(VSlideButtonDownNum);
  662.     Buttons.KillOne;
  663.     VSlideButtonDownNum:=0;
  664.     Buttons.GotoNumber(VSlideButtonUpNum);
  665.     Buttons.KillOne;
  666.     VSlideButtonUpNum:=0;
  667.   End;
  668. End;
  669.  
  670. Procedure GraphicWindow.HorzSlideIcon(Active:Boolean);
  671.  
  672. Var
  673.   SlideButtonX1,
  674.   SlideButtonY1,
  675.   SlideButtonX2,
  676.   SlideButtonY2,
  677.  
  678.   SlideButtonUpX1,
  679.   SlideButtonUpY1,
  680.   SlideButtonUpX2,
  681.   SlideButtonUpY2,
  682.  
  683.   SlideButtonDownX1,
  684.   SlideButtonDownY1,
  685.   SlideButtonDownX2,
  686.   SlideButtonDownY2,
  687.  
  688.   SlideBarX1,
  689.   SlideBarY1,
  690.   SlideBarX2,
  691.   SlideBarY2    :Word;
  692.  
  693. Begin
  694.   HorzSlideBarPos(SlideBarX1,SlideBarY1,SlideBarX2,SlideBarY2);
  695.   HorzSlideButtonPos(SlideButtonX1,SlideButtonY1,SlideButtonX2,SlideButtonY2);
  696.   HorzSlideButtonLeftPos(SlideButtonUpX1,SlideButtonUpY1,SlideButtonUpX2,SlideButtonUpY2);
  697.   HorzSlideButtonRightPos(SlideButtonDownX1,SlideButtonDownY1,SlideButtonDownX2,SlideButtonDownY2);
  698.  
  699.   If Active And (HSlideBarMaxPos>0) Then
  700.   Begin
  701.     If HSlideButtonNum=0 Then
  702.     Begin
  703.       Buttons.Add(SlideButtonX1, SlideButtonY1, SlideButtonX2,
  704.                   SlideButtonY2, 0, 0, NIL, '',
  705.                   SpecialCode(Mouse_Only, Mouse_SlideButtonHorz), KeyCode(Mouse_Only, Mouse_SlideButtonHorz));
  706.       HSlideButtonNum:=Buttons.Number;
  707.     End;
  708.     If HSlideBarButtonNum=0 Then
  709.     Begin
  710.       Buttons.Add(SlideBarX1, SlideBarY1, SlideBarX2,
  711.                   SlideBarY2, 0, 0, NIL, '',
  712.                   SpecialCode(Mouse_Only, Mouse_SlideBarHorz), KeyCode(Mouse_Only, Mouse_SlideBarHorz));
  713.       HSlideBarButtonNum:=Buttons.Number;
  714.     End;
  715.     If HSlideButtonLeftNum=0 Then
  716.     Begin
  717.       Buttons.Add(SlideButtonUpX1, SlideButtonUpY1, SlideButtonUpX2,
  718.                   SlideButtonUpY2, 0, 0, NIL, '',
  719.                   SpecialCode(Key_None, Key_Left), KeyCode(Key_None, Key_Left));
  720.       HSlideButtonLeftNum:=Buttons.Number;
  721.     End;
  722.     If HSlideButtonRightNum=0 Then
  723.     Begin
  724.       Buttons.Add(SlideButtonDownX1, SlideButtonDownY1, SlideButtonDownX2,
  725.                   SlideButtonDownY2, 0, 0, NIL, '',
  726.                   SpecialCode(Key_None, Key_Right), KeyCode(Key_None, Key_Right));
  727.       HSlideButtonRightNum:=Buttons.Number;
  728.     End;
  729.   End
  730.   Else
  731.   Begin
  732.     Buttons.GotoNumber(HSlideBarButtonNum);
  733.     Buttons.KillOne;
  734.     HSlideBarButtonNum:=0;
  735.     Buttons.GotoNumber(HSlideButtonNum);
  736.     Buttons.KillOne;
  737.     HSlideButtonNum:=0;
  738.     Buttons.GotoNumber(HSlideButtonRightNum);
  739.     Buttons.KillOne;
  740.     HSlideButtonRightNum:=0;
  741.     Buttons.GotoNumber(HSlideButtonLeftNum);
  742.     Buttons.KillOne;
  743.     HSlideButtonLeftNum:=0;
  744.   End;
  745. End;
  746.  
  747. Procedure GraphicWindow.DrawVertSlideBar;
  748. Begin
  749.   If VSlideBarMaxPos=0 Then Exit;
  750.   VSlideButtonPos:=Y1+Thickness+23+((VSlideBarCurPos*(Y2-Y1-10*Thickness-28)) Div VSlideBarMaxPos);
  751.   Mouse.Hide;
  752.   SetFillStyle(VSlideBarPat,VSlideBarClr);
  753.   Bar(X2-Thickness-10,Y1+Thickness+23,X2-Thickness-2,Y2-Thickness-10);
  754.   PutImage(X2-Thickness-10,VSlideButtonPos,IconSlideButtonVert^,CopyPut);
  755.   PutImage(X2-Thickness-10,Y1+Thickness+14,IconSlideButtonUp^,CopyPut);
  756.   PutImage(X2-Thickness-10,Y2-Thickness-10,IconSlideButtonDown^,CopyPut);
  757.   Mouse.Show;
  758. End;
  759.  
  760. Procedure GraphicWindow.VertSlideBar(CurPos,MaxPos:LongInt;Patrn,PatClr:Word);
  761.  
  762. Var
  763.   Dummy,
  764.   NewX,
  765.   NewY,
  766.   OldX,
  767.   OldY    :Word;
  768.  
  769. Begin
  770.   VertSlideButtonPos(OldX,OldY,Dummy,Dummy);
  771.   VSlideBarPat   :=Patrn;
  772.   VSlideBarClr   :=PatClr;
  773.   VSlideBarMaxPos:=MaxPos;
  774.   VSlideBarCurPos:=CurPos;
  775.   DrawVertSlideBar;
  776.   If VSlideButtonNum>0 Then
  777.   Begin
  778.     VertSlideButtonPos(NewX,NewY,Dummy,Dummy);
  779.     Buttons.Move(Integer(NewX)-OldX,Integer(NewY)-OldY,VSlideButtonNum);
  780.   End;
  781. End;
  782.  
  783. Procedure GraphicWindow.UpdateVertSlideBar(CurPos:LongInt);
  784.  
  785. Var
  786.   Dummy,
  787.   NewX,
  788.   NewY,
  789.   OldX,
  790.   OldY    :Word;
  791.  
  792. Begin
  793.   VertSlideButtonPos(OldX,OldY,Dummy,Dummy);
  794.   VSlideBarCurPos:=CurPos;
  795.   DrawVertSlideBar;
  796.   If VSlideButtonNum>0 Then
  797.   Begin
  798.     VertSlideButtonPos(NewX,NewY,Dummy,Dummy);
  799.     Buttons.Move(Integer(NewX)-OldX,Integer(NewY)-OldY,VSlideButtonNum);
  800.   End;
  801. End;
  802.  
  803. Procedure GraphicWindow.DrawHorzSlideBar;
  804. Begin
  805.   If HSlideBarMaxPos=0 Then Exit;
  806.   HSlideButtonPos:=X1+Thickness+12+((HSlideBarCurPos*(X2-X1-10*Thickness-28)) Div HSlideBarMaxPos);
  807.   Mouse.Hide;
  808.   SetFillStyle(HSlideBarPat,HSlideBarClr);
  809.   Bar(X1+Thickness+11,Y2-Thickness-10,X2-Thickness-21,Y2-Thickness-2);
  810.   PutImage(HSlideButtonPos,Y2-Thickness-10,IconSlideButtonHorz^,CopyPut);
  811.   PutImage(X1+Thickness+2,Y2-Thickness-10,IconSlideButtonLeft^,CopyPut);
  812.   PutImage(X2-Thickness-20,Y2-Thickness-10,IconSlideButtonRight^,CopyPut);
  813.   Mouse.Show;
  814. End;
  815.  
  816. Procedure GraphicWindow.HorzSlideBar(CurPos,MaxPos:LongInt;Patrn,PatClr:Word);
  817.  
  818. Var
  819.   Dummy,
  820.   NewX,
  821.   NewY,
  822.   OldX,
  823.   OldY    :Word;
  824.  
  825. Begin
  826.   HorzSlideButtonPos(OldX,OldY,Dummy,Dummy);
  827.   HSlideBarPat   :=Patrn;
  828.   HSlideBarClr   :=PatClr;
  829.   HSlideBarMaxPos:=MaxPos;
  830.   HSlideBarCurPos:=CurPos;
  831.   DrawHorzSlideBar;
  832.   If HSlideButtonNum>0 Then
  833.   Begin
  834.     HorzSlideButtonPos(NewX,NewY,Dummy,Dummy);
  835.     Buttons.Move(Integer(NewX)-OldX,Integer(NewY)-OldY,HSlideButtonNum);
  836.   End;
  837. End;
  838.  
  839. Procedure GraphicWindow.UpdateHorzSlideBar(CurPos:LongInt);
  840.  
  841. Var
  842.   Dummy,
  843.   NewX,
  844.   NewY,
  845.   OldX,
  846.   OldY    :Word;
  847.  
  848. Begin
  849.   HorzSlideButtonPos(OldX,OldY,Dummy,Dummy);
  850.   HSlideBarCurPos:=CurPos;
  851.   DrawHorzSlideBar;
  852.   If HSlideButtonNum>0 Then
  853.   Begin
  854.     HorzSlideButtonPos(NewX,NewY,Dummy,Dummy);
  855.     Buttons.Move(Integer(NewX)-OldX,Integer(NewY)-OldY,HSlideButtonNum);
  856.   End;
  857. End;
  858.  
  859. Procedure GraphicWindow.CloseButtonPos(Var BX1,BY1,BX2,BY2:Word);
  860. Begin
  861.   BX1:=X1+Thickness+2;
  862.   BY1:=Y1+Thickness+2;
  863.   BX2:=X1+Thickness+10;
  864.   BY2:=Y1+Thickness+10;
  865. End;
  866.  
  867. Procedure GraphicWindow.HeadingPos(Var BX1,BY1,BX2,BY2:Word);
  868. Begin
  869.   BX1:=X1+Thickness+10;
  870.   BY1:=Y1+Thickness+1;
  871.   BX2:=X2-Thickness-1;
  872.   BY2:=Y1+Thickness+10;
  873. End;
  874.  
  875. Procedure GraphicWindow.VertSlideBarPos(Var BX1,BY1,BX2,BY2:Word);
  876. Begin
  877.   BX1:=X2-Thickness-10;
  878.   BY1:=Y1+Thickness+23;
  879.   BX2:=X2-Thickness-2;
  880.   BY2:=Y2-Thickness-10;
  881. End;
  882.  
  883. Procedure GraphicWindow.VertSlideButtonPos(Var BX1,BY1,BX2,BY2:Word);
  884. Begin
  885.   BX1:=X2-Thickness-10;
  886.   BY1:=VSlideButtonPos;
  887.   BX2:=X2-Thickness-2;
  888.   BY2:=VSlideButtonPos+8;
  889. End;
  890.  
  891. Procedure GraphicWindow.VertSlideButtonUpPos(Var BX1,BY1,BX2,BY2:Word);
  892. Begin
  893.   BX1:=X2-Thickness-10;
  894.   BY1:=Y1+Thickness+14;
  895.   BX2:=X2-Thickness-2;
  896.   BY2:=Y1+Thickness+22;
  897. End;
  898.  
  899. Procedure GraphicWindow.VertSlideButtonDownPos(Var BX1,BY1,BX2,BY2:Word);
  900. Begin
  901.   BX1:=X2-Thickness-10;
  902.   BY1:=Y2-Thickness-10;
  903.   BX2:=X2-Thickness-2;
  904.   BY2:=Y2-Thickness-2;
  905. End;
  906.  
  907. Procedure GraphicWindow.HorzSlideBarPos(Var BX1,BY1,BX2,BY2:Word);
  908. Begin
  909.   BX1:=X1+Thickness+11;
  910.   BY1:=Y2-Thickness-10;
  911.   BX2:=X2-Thickness-21;
  912.   BY2:=Y2-Thickness-2;
  913. End;
  914.  
  915. Procedure GraphicWindow.HorzSlideButtonPos(Var BX1,BY1,BX2,BY2:Word);
  916. Begin
  917.   BX1:=HSlideButtonPos;
  918.   BY1:=Y2-Thickness-9;
  919.   BX2:=HSlideButtonPos+9;
  920.   BY2:=Y2-Thickness;
  921. End;
  922.  
  923. Procedure GraphicWindow.HorzSlideButtonLeftPos(Var BX1,BY1,BX2,BY2:Word);
  924. Begin
  925.   BX1:=X1+Thickness+2;
  926.   BY1:=Y2-Thickness-10;
  927.   BX2:=X1+Thickness+11;
  928.   BY2:=Y2-Thickness-1;
  929. End;
  930.  
  931. Procedure GraphicWindow.HorzSlideButtonRightPos(Var BX1,BY1,BX2,BY2:Word);
  932. Begin
  933.   BX1:=X2-Thickness-20;
  934.   BY1:=Y2-Thickness-10;
  935.   BX2:=X2-Thickness-11;
  936.   BY2:=Y2-Thickness-1;
  937. End;
  938.  
  939. Procedure GraphicWindow.Lock;
  940. Begin
  941.   SetViewPort(X1,Y1,X2,Y2,ClipOn);
  942. End;
  943.  
  944. Procedure GraphicWindow.UnLock;
  945. Begin
  946.   SetViewPort(0,0,GetMaxX,GetMaxY,ClipOn);
  947. End;
  948.  
  949. Procedure GraphicWindow.Close;
  950. Begin
  951.   Mouse.Hide;
  952.   If KeepBack Then
  953.   Begin
  954.     If (Status=Visible) Then
  955.       PutImage(X1,Y1,Save^,NormalPut);
  956.   End
  957.   Else
  958.   Begin
  959.     SetFillStyle(SolidFill,BoxBck);
  960.     Bar(X1,Y1,X2,Y2);
  961.   End;
  962.  
  963.   Mouse.Show;
  964.   FreeMem(Save,Size);
  965.   Buttons.KillAll;
  966. End;
  967.  
  968. { Copyright 1993, Michael Gallias }
  969.