home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 September / Chip_2002-09_cd1.bin / zkuste / delphi / kompon / d6 / YPPARSER.ZIP / Graph / MainForm.pas < prev   
Pascal/Delphi Source File  |  2002-06-14  |  19KB  |  612 lines

  1. {********************************************************}
  2. {                                                        }
  3. {                      Graph                             }
  4. {             IMPORTANT-READ CAREFULLY:                  }
  5. {                                                        }
  6. {    This End-User License Agreement is a legal          }
  7. {    agreement between you (either an individual         }
  8. {    or a single entity) and Pisarev Yuriy for           }
  9. {    the software product identified above, which        }
  10. {    includes computer software and may include          }
  11. {    associated media, printed materials, and "online"   }
  12. {    or electronic documentation ("SOFTWARE PRODUCT").   }
  13. {    By installing, copying, or otherwise using the      }
  14. {    SOFTWARE PRODUCT, you agree to be bound by the      }
  15. {    terms of this LICENSE AGREEMENT.                    }
  16. {                                                        }
  17. {    If you do not agree to the terms of this            }
  18. {    LICENSE AGREEMENT, do not install or use            }
  19. {    the SOFTWARE PRODUCT.                               }
  20. {                                                        }
  21. {    License conditions                                  }
  22. {                                                        }
  23. {    No part of the software or the manual may be        }
  24. {    multiplied, disseminated or processed in any        }
  25. {    way without the written consent of Pisarev          }
  26. {    Yuriy. Violations of these conditions will be       }
  27. {    prosecuted in every case.                           }
  28. {                                                        }
  29. {    The use of the software is done at your own         }
  30. {    risk. The manufacturer and developer accepts        }
  31. {    no liability for any damages, either as direct      }
  32. {    or indirect consequence of the use of this          }
  33. {    product or software.                                }
  34. {                                                        }
  35. {    Only observance of these conditions allows you      }
  36. {    to use the hardware and software in your computer   }
  37. {    system.                                             }
  38. {                                                        }
  39. {    All rights reserved.                                }
  40. {    Copyright 2002 Pisarev Yuriy                        }
  41. {                                                        }
  42. {                 yuriy_mbox@hotmail.com                 }
  43. {                                                        }
  44. {********************************************************}
  45.  
  46. unit MainForm;
  47.  
  48. interface
  49.  
  50. uses
  51.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
  52.   Forms, Dialogs, ImgList, ActnList, ActnMan, ComCtrls, StdCtrls, ExtCtrls,
  53.   ToolWin, GraphBldr, ActnCtrls, ActnMenus, StdActns, Menus, AppEvnts,
  54.   ClipBrd, Printers, Registry;
  55.  
  56. type
  57.   TMain = class(TForm)
  58.     ControlBar1: TControlBar;
  59.     StandardToolBar: TToolBar;
  60.     Panel1: TPanel;
  61.     tbCalculate: TToolButton;
  62.     tbDelete: TToolButton;
  63.     tbShowGrid: TToolButton;
  64.     tbTrace: TToolButton;
  65.     tbCopy: TToolButton;
  66.     ToolButton1: TToolButton;
  67.     tbDetailLevel: TTrackBar;
  68.     ToolButton2: TToolButton;
  69.     tbGraphColor: TToolButton;
  70.     tbAxisColor: TToolButton;
  71.     ActionManager1: TActionManager;
  72.     ServiceCalculate: TAction;
  73.     ServiceShowGrid: TAction;
  74.     ServiceTracing: TAction;
  75.     ServiceCopy: TAction;
  76.     ServiceDelete: TAction;
  77.     ServiceGraphColor: TAction;
  78.     ServiceShowAxis: TAction;
  79.     HelpAbout: TAction;
  80.     ImageList1: TImageList;
  81.     ColorDialog: TColorDialog;
  82.     StatusBar: TStatusBar;
  83.     RichEdit: TRichEdit;
  84.     ActionMainMenuBar1: TActionMainMenuBar;
  85.     FileOpen: TFileOpen;
  86.     FileSaveAs: TFileSaveAs;
  87.     FileExit: TFileExit;
  88.     EditCut: TEditCut;
  89.     EditCopy: TEditCopy;
  90.     EditPaste: TEditPaste;
  91.     EditSelectAll: TEditSelectAll;
  92.     EditUndo: TEditUndo;
  93.     EditDelete: TEditDelete;
  94.     FileSave: TAction;
  95.     FilePrint: TAction;
  96.     PopupMenu1: TPopupMenu;
  97.     N1: TMenuItem;
  98.     N2: TMenuItem;
  99.     N3: TMenuItem;
  100.     N4: TMenuItem;
  101.     N5: TMenuItem;
  102.     N6: TMenuItem;
  103.     N7: TMenuItem;
  104.     N8: TMenuItem;
  105.     ViewStandard: TAction;
  106.     ViewFormat: TAction;
  107.     PopupMenu2: TPopupMenu;
  108.     N9: TMenuItem;
  109.     N10: TMenuItem;
  110.     PrintDialog: TPrintDialog;
  111.     FormatToolBar: TToolBar;
  112.     Panel2: TPanel;
  113.     edXMaxValue: TEdit;
  114.     udXMaxValue: TUpDown;
  115.     ToolButton3: TToolButton;
  116.     Panel3: TPanel;
  117.     edYMaxValue: TEdit;
  118.     udYMaxValue: TUpDown;
  119.     ToolButton4: TToolButton;
  120.     Panel4: TPanel;
  121.     edPenWidth: TEdit;
  122.     udPenWidth: TUpDown;
  123.     ToolButton5: TToolButton;
  124.     ToolButton6: TToolButton;
  125.     Panel6: TPanel;
  126.     edHorzSpacing: TEdit;
  127.     udHorzSpacing: TUpDown;
  128.     Panel7: TPanel;
  129.     edVertSpacing: TEdit;
  130.     udVertSpacing: TUpDown;
  131.     PopupMenu3: TPopupMenu;
  132.     N11: TMenuItem;
  133.     N12: TMenuItem;
  134.     N13: TMenuItem;
  135.     N14: TMenuItem;
  136.     N15: TMenuItem;
  137.     N16: TMenuItem;
  138.     N17: TMenuItem;
  139.     N18: TMenuItem;
  140.     N19: TMenuItem;
  141.     N20: TMenuItem;
  142.     ApplicationEvents1: TApplicationEvents;
  143.     GraphBldr: TGraphBldr;
  144.     ServiceRefresh: TAction;
  145.     Refresh1: TMenuItem;
  146.     procedure ViewStandardExecute(Sender: TObject);
  147.     procedure ViewStandardUpdate(Sender: TObject);
  148.     procedure ViewFormatExecute(Sender: TObject);
  149.     procedure ViewFormatUpdate(Sender: TObject);
  150.     procedure HelpAboutExecute(Sender: TObject);
  151.     procedure ServiceCalculateExecute(Sender: TObject);
  152.     procedure ServiceCalculateUpdate(Sender: TObject);
  153.     procedure ServiceShowGridExecute(Sender: TObject);
  154.     procedure ServiceShowGridUpdate(Sender: TObject);
  155.     procedure ServiceShowAxisExecute(Sender: TObject);
  156.     procedure ServiceShowAxisUpdate(Sender: TObject);
  157.     procedure ServiceTracingExecute(Sender: TObject);
  158.     procedure ServiceTracingUpdate(Sender: TObject);
  159.     procedure ServiceCopyExecute(Sender: TObject);
  160.     procedure ServiceDeleteExecute(Sender: TObject);
  161.     procedure ServiceRefreshExecute(Sender: TObject);
  162.     procedure ServiceGraphColorExecute(Sender: TObject);
  163.     procedure FileOpenAccept(Sender: TObject);
  164.     procedure FileSaveExecute(Sender: TObject);
  165.     procedure FileSaveUpdate(Sender: TObject);
  166.     procedure FileSaveAsAccept(Sender: TObject);
  167.     procedure FilePrintExecute(Sender: TObject);
  168.     procedure FormCreate(Sender: TObject);
  169.     procedure FormActivate(Sender: TObject);
  170.     procedure FormDestroy(Sender: TObject);
  171.     procedure FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
  172.       MousePos: TPoint; var Handled: Boolean);
  173.     procedure FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
  174.       MousePos: TPoint; var Handled: Boolean);
  175.     procedure ApplicationEvents1Hint(Sender: TObject);
  176.     procedure RichEditKeyDown(Sender: TObject; var Key: Word;
  177.       Shift: TShiftState);
  178.     procedure tbDetailLevelChange(Sender: TObject);
  179.     procedure edXMaxValueChange(Sender: TObject);
  180.     procedure edXMaxValueExit(Sender: TObject);
  181.     procedure edYMaxValueChange(Sender: TObject);
  182.     procedure edYMaxValueExit(Sender: TObject);
  183.     procedure edPenWidthChange(Sender: TObject);
  184.     procedure edPenWidthExit(Sender: TObject);
  185.     procedure edHorzSpacingChange(Sender: TObject);
  186.     procedure edHorzSpacingExit(Sender: TObject);
  187.     procedure edVertSpacingChange(Sender: TObject);
  188.     procedure edVertSpacingExit(Sender: TObject);
  189.     procedure EditKeyPress(Sender: TObject; var Key: Char);
  190.     procedure GraphBldrMouseMove(Sender: TObject; Shift: TShiftState; X,
  191.       Y: Integer);
  192.     procedure GraphBldrTrace(Sender: TObject; X, Y: Double);
  193.   private
  194.     FFileName: string;
  195.   public
  196.     property FileName: string read FFileName write FFileName;
  197.   end;
  198.  
  199. resourcestring
  200.   MenuFileName = 'Menu.dat';
  201.  
  202. const
  203.   WheelDelta = 1;
  204.  
  205. var
  206.   Main: TMain;
  207.  
  208. implementation
  209.  
  210. uses AboutForm;
  211.  
  212. {$R *.dfm}
  213.  
  214. procedure TMain.ViewStandardExecute(Sender: TObject);
  215. begin
  216.   ViewStandard.Checked := not ViewStandard.Checked;
  217.   StandardToolBar.Visible := ViewStandard.Checked;
  218. end;
  219.  
  220. procedure TMain.ViewStandardUpdate(Sender: TObject);
  221. begin
  222.   ViewStandard.Checked := StandardToolBar.Visible;
  223. end;
  224.  
  225. procedure TMain.ViewFormatExecute(Sender: TObject);
  226. begin
  227.   ViewFormat.Checked := not ViewFormat.Checked;
  228.   FormatToolBar.Visible := ViewFormat.Checked;
  229. end;
  230.  
  231. procedure TMain.ViewFormatUpdate(Sender: TObject);
  232. begin
  233.   ViewFormat.Checked := FormatToolBar.Visible;
  234. end;
  235.  
  236. procedure TMain.HelpAboutExecute(Sender: TObject);
  237. begin
  238.   with TAboutDlg.Create(nil) do
  239.   try
  240.     ShowModal;
  241.   finally
  242.     Free;
  243.   end;
  244. end;
  245.  
  246. procedure TMain.ServiceCalculateExecute(Sender: TObject);
  247. var
  248.   I: Integer;
  249. begin
  250.   Screen.Cursor := crHourGlass;
  251.   try
  252.     with GraphBldr do begin
  253.       Text := RichEdit.Text;
  254.       try
  255.         Calculate;
  256.         for I := 0 to StatusBar.Panels.Count - 1 do
  257.           StatusBar.Panels[I].Text := '';
  258.       except
  259.         on E: Exception do begin
  260.           Clear;
  261.           StatusBar.Panels[2].Text := E.Message;
  262.         end;
  263.       end;
  264.       Draw;
  265.     end;
  266.   finally
  267.     Screen.Cursor := crDefault;
  268.   end;
  269. end;
  270.  
  271. procedure TMain.ServiceCalculateUpdate(Sender: TObject);
  272. begin
  273.   ServiceCalculate.Enabled := RichEdit.Text <> '';
  274. end;
  275.  
  276. procedure TMain.ServiceShowGridExecute(Sender: TObject);
  277. begin
  278.   ServiceShowGrid.Checked := not ServiceShowGrid.Checked;
  279.   with GraphBldr do begin
  280.     ShowGrid := ServiceShowGrid.Checked;
  281.     Draw;
  282.   end;
  283. end;
  284.  
  285. procedure TMain.ServiceShowGridUpdate(Sender: TObject);
  286. begin
  287.   ServiceShowGrid.Checked := GraphBldr.ShowGrid;
  288. end;
  289.  
  290. procedure TMain.ServiceShowAxisExecute(Sender: TObject);
  291. begin
  292.   ServiceShowAxis.Checked := not ServiceShowAxis.Checked;
  293.   with GraphBldr do begin
  294.     ShowAxis := ServiceShowAxis.Checked;
  295.     Draw;
  296.   end;
  297. end;
  298.  
  299. procedure TMain.ServiceShowAxisUpdate(Sender: TObject);
  300. begin
  301.   ServiceShowAxis.Checked := GraphBldr.ShowAxis;
  302. end;
  303.  
  304. procedure TMain.ServiceTracingExecute(Sender: TObject);
  305. begin
  306.   ServiceTracing.Checked := not ServiceTracing.Checked;
  307.   with GraphBldr do begin
  308.     StatusBar.Panels[1].Text := '';
  309.     Tracing := ServiceTracing.Checked;
  310.     Draw;
  311.   end;
  312. end;
  313.  
  314. procedure TMain.ServiceTracingUpdate(Sender: TObject);
  315. begin
  316.   ServiceTracing.Checked := GraphBldr.Tracing;
  317. end;
  318.  
  319. procedure TMain.ServiceCopyExecute(Sender: TObject);
  320. begin
  321.   ClipBoard.Assign(GraphBldr.Picture);
  322. end;
  323.  
  324. procedure TMain.ServiceDeleteExecute(Sender: TObject);
  325. var
  326.   I: Integer;
  327. begin
  328.   with GraphBldr do begin
  329.     Clear;
  330.     for I := 0 to StatusBar.Panels.Count - 1 do
  331.       StatusBar.Panels[I].Text := '';
  332.     Draw;
  333.   end;
  334. end;
  335.  
  336. procedure TMain.ServiceRefreshExecute(Sender: TObject);
  337. begin
  338.   GraphBldr.Draw;
  339. end;
  340.  
  341. procedure TMain.ServiceGraphColorExecute(Sender: TObject);
  342. begin
  343.   ColorDialog.Color := GraphBldr.GraphPen.Color;
  344.   if ColorDialog.Execute then with GraphBldr do begin
  345.     GraphPen.Color := ColorDialog.Color;
  346.     Draw;
  347.   end;
  348. end;
  349.  
  350. procedure TMain.FileOpenAccept(Sender: TObject);
  351. begin
  352.   FFileName := FileOpen.Dialog.FileName;
  353.   with TStringList.Create do
  354.   try
  355.     LoadFromFile(FFileName);
  356.     RichEdit.Text := StringReplace(Text, #13#10, ' ', [rfReplaceAll]);
  357.     ServiceCalculate.Execute;
  358.   finally
  359.     Free;
  360.   end;
  361. end;
  362.  
  363. procedure TMain.FileSaveExecute(Sender: TObject);
  364. begin
  365.   with TStringList.Create do
  366.   try
  367.     Add(RichEdit.Text);
  368.     SaveToFile(FFileName);
  369.   finally
  370.     Free;
  371.   end;
  372. end;
  373.  
  374. procedure TMain.FileSaveUpdate(Sender: TObject);
  375. begin
  376.   FileSave.Enabled := FFileName <> '';
  377. end;
  378.  
  379. procedure TMain.FileSaveAsAccept(Sender: TObject);
  380. begin
  381.   FFileName := FileSaveAs.Dialog.FileName;
  382.   FileSave.Execute;
  383. end;
  384.  
  385. procedure TMain.FilePrintExecute(Sender: TObject);
  386. var
  387.   I: Integer;
  388. begin
  389.   with PrintDialog do if Execute then for I := 0 to Copies do
  390.     with Printer do begin
  391.       BeginDoc;
  392.       Canvas.Draw(0, 0, GraphBldr.Picture);
  393.       EndDoc;
  394.     end;
  395. end;
  396.  
  397. procedure TMain.FormCreate(Sender: TObject);
  398. begin
  399.   GraphBldr.DataEditor.AttrsManager.Add(RichEdit);
  400.   with ActionManager1 do begin
  401.     FileName := ExtractFilePath(Application.ExeName) + MenuFileName;
  402.     if FileExists(FileName) then LoadFromFile(FileName);
  403.   end;
  404. end;
  405.  
  406. procedure TMain.FormActivate(Sender: TObject);
  407. begin
  408.   OnActivate := nil;
  409.   with TRegistry.Create do
  410.   try
  411.     RootKey := HKEY_LOCAL_MACHINE;
  412.     if KeyExists('Software\Graph\Settings') and
  413.       OpenKey('Software\Graph\Settings', False) then
  414.       begin
  415.         GraphBldr.ShowGrid := ReadBool('ShowGrid');
  416.         GraphBldr.ShowAxis := ReadBool('ShowAxis');
  417.         GraphBldr.Tracing := ReadBool('Tracing');
  418.         GraphBldr.DetailLevel := ReadInteger('DetailLevel');
  419.         tbDetailLevel.Position := GraphBldr.DetailLevel;
  420.         GraphBldr.GraphPen.Color := ReadInteger('GraphColor');
  421.         GraphBldr.XMaxValue := ReadInteger('XMaxValue');
  422.         udXMaxValue.Position := GraphBldr.XMaxValue;
  423.         GraphBldr.YMaxValue := ReadInteger('YMaxValue');
  424.         udYMaxValue.Position := GraphBldr.YMaxValue;
  425.         GraphBldr.GraphPen.Width := ReadInteger('PenWidth');
  426.         udPenWidth.Position := GraphBldr.GraphPen.Width;
  427.         GraphBldr.HorzSpacing := ReadFloat('HorzSpacing');
  428.         udHorzSpacing.Position := Round(GraphBldr.HorzSpacing);
  429.         GraphBldr.VertSpacing := ReadFloat('VertSpacing');
  430.         udVertSpacing.Position := Round(GraphBldr.VertSpacing);
  431.         StandardToolBar.Visible := ReadBool('StandardToolBar');
  432.         FormatToolBar.Visible := ReadBool('FormatToolBar');
  433.       end;
  434.   finally
  435.     Free;
  436.   end;
  437. end;
  438.  
  439. procedure TMain.FormDestroy(Sender: TObject);
  440. begin
  441.   with TRegistry.Create do
  442.   try
  443.     RootKey := HKEY_LOCAL_MACHINE;
  444.     OpenKey('Software\Graph\Settings', True);
  445.     WriteBool('ShowGrid', GraphBldr.ShowGrid);
  446.     WriteBool('ShowAxis', GraphBldr.ShowAxis);
  447.     WriteBool('Tracing', GraphBldr.Tracing);
  448.     WriteInteger('DetailLevel', GraphBldr.DetailLevel);
  449.     WriteInteger('GraphColor', GraphBldr.GraphPen.Color);
  450.     WriteInteger('XMaxValue', GraphBldr.XMaxValue);
  451.     WriteInteger('YMaxValue', GraphBldr.YMaxValue);
  452.     WriteInteger('PenWidth', GraphBldr.GraphPen.Width);
  453.     WriteFloat('HorzSpacing', GraphBldr.HorzSpacing);
  454.     WriteFloat('VertSpacing', GraphBldr.VertSpacing);
  455.     WriteBool('StandardToolBar', StandardToolBar.Visible);
  456.     WriteBool('FormatToolBar', FormatToolBar.Visible);
  457.   finally
  458.     Free;
  459.   end;
  460. end;
  461.  
  462. procedure TMain.FormMouseWheelDown(Sender: TObject; Shift: TShiftState;
  463.   MousePos: TPoint; var Handled: Boolean);
  464. var
  465.   Point: TPoint;
  466. begin
  467.   Point.X := MousePos.X - ClientOrigin.X;
  468.   Point.Y := MousePos.Y - ClientOrigin.Y;
  469.   with GraphBldr do if (Point.X >= Left) and (Point.Y >= Top) and
  470.     (Point.X < Left + Width) and (Point.Y < Top + Height) then
  471.       with GraphBldr do begin
  472.         if XMaxValue > udXMaxValue.Min then begin
  473.           XMaxValue := XMaxValue - WheelDelta;
  474.           udXMaxValue.Position := XMaxValue;
  475.         end;
  476.         if YMaxValue > udYMaxValue.Min then begin
  477.           YMaxValue := YMaxValue - WheelDelta;
  478.           udYMaxValue.Position := YMaxValue;
  479.         end;
  480.         if Trim(Text) <> '' then Calculate;
  481.         Draw;
  482.       end;
  483. end;
  484.  
  485. procedure TMain.FormMouseWheelUp(Sender: TObject; Shift: TShiftState;
  486.   MousePos: TPoint; var Handled: Boolean);
  487. var
  488.   Point: TPoint;
  489. begin
  490.   Point.X := MousePos.X - ClientOrigin.X;
  491.   Point.Y := MousePos.Y - ClientOrigin.Y;
  492.   with GraphBldr do if (Point.X >= Left) and (Point.Y >= Top) and
  493.     (Point.X < Left + Width) and (Point.Y < Top + Height) then
  494.       with GraphBldr do begin
  495.         if XMaxValue < udXMaxValue.Max then begin
  496.           XMaxValue := XMaxValue + WheelDelta;
  497.           udXMaxValue.Position := XMaxValue;
  498.         end;
  499.         if YMaxValue < udYMaxValue.Max then begin
  500.           YMaxValue := YMaxValue + WheelDelta;
  501.           udYMaxValue.Position := YMaxValue;
  502.         end;
  503.         if Trim(Text) <> '' then Calculate;
  504.         Draw;
  505.       end;
  506. end;
  507.  
  508. procedure TMain.ApplicationEvents1Hint(Sender: TObject);
  509. begin
  510.   if Length(Application.Hint) > 0 then begin
  511.     StatusBar.SimplePanel := True;
  512.     StatusBar.SimpleText := Application.Hint
  513.   end else StatusBar.SimplePanel := False;
  514. end;
  515.  
  516. procedure TMain.RichEditKeyDown(Sender: TObject; var Key: Word;
  517.   Shift: TShiftState);
  518. begin
  519.   if Key = VK_RETURN then ServiceCalculate.Execute;
  520. end;
  521.  
  522. procedure TMain.tbDetailLevelChange(Sender: TObject);
  523. begin
  524.   GraphBldr.DetailLevel := tbDetailLevel.Position;
  525. end;
  526.  
  527. procedure TMain.edXMaxValueChange(Sender: TObject);
  528. begin
  529.   with GraphBldr do begin
  530.     XMaxValue := udXMaxValue.Position;
  531.     if Trim(Text) <> '' then Calculate;
  532.     Draw;
  533.   end;
  534. end;
  535.  
  536. procedure TMain.edXMaxValueExit(Sender: TObject);
  537. begin
  538.   edXMaxValue.Text := IntToStr(GraphBldr.XMaxValue);
  539. end;
  540.  
  541. procedure TMain.edYMaxValueChange(Sender: TObject);
  542. begin
  543.   with GraphBldr do begin
  544.     YMaxValue := udYMaxValue.Position;
  545.     if Trim(Text) <> '' then Calculate;
  546.     Draw;
  547.   end;
  548. end;
  549.  
  550. procedure TMain.edYMaxValueExit(Sender: TObject);
  551. begin
  552.   edYMaxValue.Text := IntToStr(GraphBldr.YMaxValue);
  553. end;
  554.  
  555. procedure TMain.edPenWidthChange(Sender: TObject);
  556. begin
  557.   with GraphBldr do begin
  558.     GraphPen.Width := udPenWidth.Position;
  559.     Draw;
  560.   end;
  561. end;
  562.  
  563. procedure TMain.edPenWidthExit(Sender: TObject);
  564. begin
  565.   edPenWidth.Text := IntToStr(GraphBldr.GraphPen.Width);
  566. end;
  567.  
  568. procedure TMain.edHorzSpacingChange(Sender: TObject);
  569. begin
  570.   with GraphBldr do begin
  571.     HorzSpacing := udHorzSpacing.Position;
  572.     Draw;
  573.   end;
  574. end;
  575.  
  576. procedure TMain.edHorzSpacingExit(Sender: TObject);
  577. begin
  578.   edHorzSpacing.Text := FloatToStr(GraphBldr.HorzSpacing);
  579. end;
  580.  
  581. procedure TMain.edVertSpacingChange(Sender: TObject);
  582. begin
  583.   with GraphBldr do begin
  584.     VertSpacing := udVertSpacing.Position;
  585.     Draw;
  586.   end;
  587. end;
  588.  
  589. procedure TMain.edVertSpacingExit(Sender: TObject);
  590. begin
  591.   edVertSpacing.Text := FloatToStr(GraphBldr.VertSpacing);
  592. end;
  593.  
  594. procedure TMain.EditKeyPress(Sender: TObject; var Key: Char);
  595. begin
  596.   if not (Key in ['0'..'9', #8]) then Key := #0;
  597. end;
  598.  
  599. procedure TMain.GraphBldrMouseMove(Sender: TObject; Shift: TShiftState; X,
  600.   Y: Integer);
  601. begin
  602.   StatusBar.Panels[0].Text := Format('%f: %f',
  603.     [GraphBldr.XCoord(X), GraphBldr.YCoord(Y)]);
  604. end;
  605.  
  606. procedure TMain.GraphBldrTrace(Sender: TObject; X, Y: Double);
  607. begin
  608.   StatusBar.Panels[1].Text := Format('Tracing: %f: %f', [X, Y]);
  609. end;
  610.  
  611. end.
  612.