home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / Pascal / Samples / MCUNIT10.ARJ / MCGRAF10.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1993-01-16  |  9.7 KB  |  289 lines

  1. {*******************************************************************************
  2. *   Unit name: MCGRAF10 interface
  3. *      Author: Martin CEKAL
  4. *        Date: January 15, 1993
  5. *     Version: 1.0
  6. *     Purpose: Draw line and bar charts
  7. ********************************************************************************}
  8. UNIT GRAF10;
  9.  
  10. interface
  11.  
  12. type  hd = record
  13.            case u:boolean of
  14.              true:(t:string[35];);  {axis's labels}
  15.       end;
  16.  
  17.       it = record                  {axis characteristics}
  18.            case u:boolean of
  19.              true:(x,y:word;
  20.                    ns:1..10;       {number of ticks}
  21.                    d:shortint;     {decimals of labels}
  22.                    m:real;         {scale}
  23.                    ni:2..10;       {number of tick's labels}
  24.                    min,max:real;   {min and max value}
  25.                    nh:0..3;        {number of axis's labels}
  26.                    c:byte;         {color}
  27.                    hds:array [1..3] of hd); {axis's labels}
  28.       end;
  29.  
  30.       axis = record                 {Definitions of axis}
  31.             x,y,w,h:word;           {x,y:upper left corner
  32.                                      w:width; h:hight}
  33.             nit:1..2;               {number of axis}
  34.             rec:boolean;            {draw a rectangle}
  35.             its:array[1..2] of it;  {axis's characteristics}
  36.       end;
  37.  
  38.       gbar = record
  39.              x,y,w,h:integer;             {x,y:upper left corner
  40.                                            w:width; h:hight}
  41.              d:shortint;                  {decimals of labels}
  42.              m,min,max,xi:real;           {m:scale; min and max value
  43.                                            xi:label in front of bar}
  44.              c:byte;                      {color}
  45.              p:string[5];                 {title in front of bar}
  46.              i:array[1..3] of string[10]; {array of titles}
  47.              nh:0..2;                     {number of headers}
  48.              hds:array[1..2] of hd;       {headers}
  49.       end;
  50.  
  51.  
  52. {*******************************************************************************
  53. *        Name: igraf_a
  54. *  Parametres: o: Definition of chart
  55. *        Date: January 14, 1993
  56. *     Version: 1.0
  57. *     Purpose: Initialization of line chart
  58. ********************************************************************************}
  59. procedure igraf_a(var o:axis);
  60.  
  61. {*******************************************************************************
  62. *        Name: graf_a
  63. *  Parametres: xo,yo values on step I
  64. *              xn,yn values on step I+1
  65. *              o: Definition of chart
  66. *        Date: January 14, 1993
  67. *     Version: 1.0
  68. *     Purpose: Line chart drawing
  69. ********************************************************************************}
  70. procedure graf_a(xo,yo,xn,yn:real;o:axis);
  71.  
  72. {*******************************************************************************
  73. *        Name: igraf_b
  74. *  Parametres: b: Definition of bar chart
  75. *              xi value of label
  76. *              xx displayed value
  77. *        Date: January 14, 1993
  78. *     Version: 1.0
  79. *     Purpose: Initialization of bar chart
  80. ********************************************************************************}
  81. procedure igraf_b(var b:gbar;xi,xx:real);
  82.  
  83. {*******************************************************************************
  84. *        Name: graf_b
  85. *  Parametres: b: Definition of bar chart
  86. *              xi value of label
  87. *              xx displayed value
  88. *        Date: January 14, 1993
  89. *     Version: 1.0
  90. *     Purpose: Bar chart drawing
  91. ********************************************************************************}
  92. procedure graf_b(var b:gbar;xi,xx:real);
  93.  
  94.  
  95. {*******************************************************************************
  96. *   Unit name: MCGRAF10 implementation
  97. *      Author: Martin CEKAL
  98. *        Date: January 15, 1993
  99. *     Version: 1.0
  100. *     Purpose: Draw line and bar charts
  101. ********************************************************************************}
  102. implementation
  103.  
  104. uses graph;
  105.  
  106. const fh=12;
  107.  
  108. {*******************************************************************************
  109. *        Name: igraf_a
  110. *  Parametres: o: Definition of chart
  111. *        Date: January 14, 1993
  112. *     Version: 1.0
  113. *     Purpose: Initialization of line chart
  114. ********************************************************************************}
  115. procedure igraf_a(var o:axis);
  116. var oi,j,lght:integer;
  117.     xi,si,hs,hi:real;
  118.     vals:string[10];
  119.     cl:byte;
  120.  
  121. begin
  122.  setviewport(0,0,getmaxx,getmaxy,clipon);
  123.  if o.rec then begin
  124.    setviewport(o.x,o.y-o.h,o.x+o.w,o.y,clipon);
  125.    clearviewport;
  126.    rectangle(0,0,o.w,o.h);
  127.  end;
  128.  {vertical axis}
  129.  if o.its[1].u then begin
  130.    o.its[1].m:=o.h/(o.its[1].max-o.its[1].min);
  131.    si:=(o.its[1].max-o.its[1].min)/(o.its[1].ni-1);
  132.    hs:=o.h/o.its[1].ns;
  133.    hi:=o.h/(o.its[1].ni-1);
  134.    lght:=0;
  135.    settextstyle(0,0,1);
  136.    settextjustify(2,1);
  137.    setviewport(o.its[1].x-80,o.its[1].y-o.h-5,
  138.                o.its[1].x-2,o.its[1].y+5,clipon);
  139.    clearviewport;
  140.    setviewport(o.its[1].x,o.its[1].y-o.h,o.its[1].x+5,o.its[1].y,clipoff);
  141.    cl:=getcolor;
  142.    setcolor(o.its[1].c);
  143.    line(0,0,0,o.h);
  144.    for j:=1 to (o.its[1].ns+1) do
  145.       line(0,round(hs*(j-1)),-3,round(hs*(j-1)));
  146.    for j:=1 to o.its[1].ni do begin
  147.       xi:=o.its[1].min+(j-1)*si;
  148.       str(xi:0:o.its[1].d,vals);
  149.       outtextxy(-5,o.h-round(hi*(j-1)),vals);
  150.       if length(vals) > lght then lght:=length(vals);
  151.    end;
  152.    settextstyle(0,1,0);
  153.    for j:=1 to o.its[1].nh do
  154.       outtextxy((-fh*(o.its[1].nh-j)-(lght*8+12)),
  155.                   round(o.h/2),o.its[1].hds[j].t);
  156.    setcolor(cl);
  157.  end;
  158. {horizontal axis}
  159.  if o.its[2].u then begin
  160.    o.its[2].m:=o.w/(o.its[2].max-o.its[2].min);
  161.    si:=(o.its[2].max-o.its[2].min)/(o.its[2].ni-1);
  162.    hs:=o.w/o.its[2].ns;
  163.    hi:=o.w/(o.its[2].ni-1);
  164.    settextstyle(0,0,0);
  165.    settextjustify(1,0);
  166.    setviewport(o.its[2].x-60,o.its[2].y+5,
  167.                o.its[2].x+o.w+30,o.its[2].y+15,clipon);
  168.    clearviewport;
  169.    setviewport(o.its[2].x,o.its[2].y,o.its[2].x+o.w,o.its[2].y+5,clipoff);
  170.    cl:=getcolor;
  171.    setcolor(o.its[2].c);
  172.    line(0,0,o.w,0);
  173.    for j:=1 to (o.its[2].ns+1) do
  174.       line(round(hs*(j-1)),0,round(hs*(j-1)),3);
  175.    for j:=1 to o.its[2].ni do begin
  176.       xi:=o.its[2].min+(j-1)*si;
  177.       str(xi:0:o.its[2].d,vals);
  178.       outtextxy(round(hi*(j-1)),14,vals);
  179.    end;
  180.    for j:=1 to o.its[2].nh do
  181.       outtextxy(round(o.w/2),2+fh*(j+1),o.its[2].hds[j].t);
  182.  end;
  183.  setcolor(cl);
  184.  settextstyle(0,0,0);
  185.  settextjustify(0,0);
  186.  setviewport(0,0,getmaxx,getmaxy,clipon);
  187. end; {*** end konec IGRAF_A ***}
  188.  
  189. {*******************************************************************************
  190. *        Name: graf_a
  191. *  Parametres: xo,yo values on step I
  192. *              xn,yn values on step I+1
  193. *              o: Definition of chart
  194. *        Date: January 14, 1993
  195. *     Version: 1.0
  196. *     Purpose: Line chart drawing
  197. ********************************************************************************}
  198. procedure graf_a(xo,yo,xn,yn:real;o:axis);
  199. var cl:byte;
  200. begin
  201.   setviewport(o.x,o.y-o.h,o.x+o.w,o.y,clipon);
  202.   cl:=getcolor;
  203.   setcolor(o.its[1].c);
  204.   line(round((xo-o.its[2].min)*o.its[2].m),
  205.               o.h-round((yo-o.its[1].min)*o.its[1].m),
  206.            round((xn-o.its[2].min)*o.its[2].m),
  207.            o.h-round((yn-o.its[1].min)*o.its[1].m));
  208.   setviewport(0,0,getmaxx,getmaxy,clipon);
  209.   setcolor(cl);
  210. end; {*** end GRAF_A ***}
  211.  
  212. {*******************************************************************************
  213. *        Name: igraf_b
  214. *  Parametres: b: Definition of bar chart
  215. *              xi value of label
  216. *              xx displayed value
  217. *        Date: January 14, 1993
  218. *     Version: 1.0
  219. *     Purpose: Initialization of bar chart
  220. ********************************************************************************}
  221. procedure igraf_b(var b:gbar;xi,xx:real);
  222. var j:integer;
  223.     vals:string[10];
  224.     co:byte;
  225. begin
  226.   setviewport(b.x,b.y,b.x+b.w,b.y+b.h,clipoff);
  227.   rectangle(0,0,b.w,b.h);
  228.   line(round(b.w/2),b.h-2,round(b.w/2),b.h);
  229.   settextjustify(1,0);
  230.   for j:=1 to 3 do
  231.     outtextxy(round(b.w*(j-1)/2),b.h+fh,b.i[j]);
  232.   for j:=1 to b.nh do
  233.     outtextxy(round(b.w/2),-fh*(b.nh-j)-4,b.hds[j].t);
  234.   settextjustify(2,0);
  235.   co:=getcolor;
  236.   setcolor(b.c);
  237.   setfillstyle(1,b.c);
  238.   b.xi:=xi;
  239.   str(xi:0:b.d,vals);
  240.   outtextxy(-5,round(b.h/2)+5,vals);
  241.   outtextxy(-10-ord(vals[0])*8,round(b.h/2)+5,b.p);
  242.   b.m:=(b.max-b.min)/b.w;
  243.   j:=round((xx-b.min)/b.m);
  244.   if j=0 then j:=1;
  245.   bar(1,3,j,b.h-3);
  246.   setcolor(co);
  247.   setviewport(0,0,getmaxx,getmaxy,clipon);
  248. end; {*** end IGRAF_B ***}
  249.  
  250. {*******************************************************************************
  251. *        Name: graf_b
  252. *  Parametres: b: Definition of bar chart
  253. *              xi value of label
  254. *              xx displayed value
  255. *        Date: January 14, 1993
  256. *     Version: 1.0
  257. *     Purpose: Bar chart drawing
  258. ********************************************************************************}
  259. procedure graf_b(var b:gbar;xi,xx:real);
  260. var cl,j:word;
  261.     vals:string[10];
  262.     co:byte;
  263. begin
  264.   co:=getcolor;
  265.   setcolor(b.c);
  266.   setviewport(b.x+1,b.y+3,b.x+b.w-1,b.y+b.h-3,clipon);
  267.   clearviewport;
  268.   setfillstyle(1,b.c);
  269.   j:=round((xx-b.min)/b.m);
  270.   if j=0 then j:=1;
  271.   bar(1,0,j,b.h-6);
  272.   setviewport(b.x,b.y,b.x+b.w,b.y+b.h,clipoff);
  273.   settextjustify(2,0);
  274.   cl:=getcolor;
  275.   setcolor(getbkcolor);
  276.   for j:=1 to 2 do begin
  277.     str(b.xi:0:b.d,vals);
  278.     outtextxy(-5,b.h div 2+5,vals);
  279.     outtextxy(-10-ord(vals[0])*8,b.h div 2+5,b.p);
  280.     setcolor(cl);
  281.     b.xi:=xi;
  282.   end;
  283.   setcolor(co);
  284.   setviewport(0,0,getmaxx,getmaxy,clipon);
  285.   settextjustify(0,0);
  286. end; {*** end GRAF_B ***}
  287.  
  288. End. {*****konec UNIT GRAF10*****}
  289.