home *** CD-ROM | disk | FTP | other *** search
/ PC Format Collection 48 / SENT14D.ISO / tech / delphi / disk15 / stocks.pak / CSTCHART.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1995-08-24  |  7.3 KB  |  272 lines

  1. unit Cstchart;
  2.  
  3. interface
  4.  
  5. uses WinTypes, WinProcs, Classes, Graphics, Forms, Controls, Buttons,
  6.   StdCtrls, ExtCtrls, VBXCtrl, Chart2fx, DBTables, DB, DBCtrls;
  7.  
  8. type
  9.   TfmCustChart = class(TForm)
  10.     Panel1: TPanel;
  11.     BtnPort: TSpeedButton;
  12.     Panel4: TPanel;
  13.     BtnArea: TSpeedButton;
  14.     SpeedButton3: TSpeedButton;
  15.     BtnPie: TSpeedButton;
  16.     SpeedButton6: TSpeedButton;
  17.     SpeedButton7: TSpeedButton;
  18.     SpeedButton8: TSpeedButton;
  19.     Btn3D: TSpeedButton;
  20.     BtnPrint: TSpeedButton;
  21.     Panel2: TPanel;
  22.     Chart: TChartFX;
  23.     DataSrcCust: TDataSource;
  24.     TableCust: TTable;
  25.     ComboName: TComboBox;
  26.     QMaster: TQuery;
  27.     BtnInfo: TSpeedButton;
  28.     BtnBHS: TSpeedButton;
  29.     BtnHML: TSpeedButton;
  30.     BtnABC: TSpeedButton;
  31.     QHoldings: TQuery;
  32.     procedure Btn3DClick(Sender: TObject);
  33.     procedure BtnPrintClick(Sender: TObject);
  34.     procedure GButtonClick(Sender: TObject);
  35.     procedure FormCreate(Sender: TObject);
  36.     procedure FormDestroy(Sender: TObject);
  37.     procedure BtnPortClick(Sender: TObject);
  38.     procedure BtnInfoClick(Sender: TObject);
  39.     procedure BtnBHSClick(Sender: TObject);
  40.     procedure BtnHMLClick(Sender: TObject);
  41.     procedure BtnABCClick(Sender: TObject);
  42.     procedure ComboNameChange(Sender: TObject);
  43.   private
  44.     AcntNums: TStringList;
  45.     procedure DisplayPortfolio;
  46.     procedure DisplayCategory(const Fld,Cat1,Cat2,Cat3:string);
  47.     procedure QueryHoldings;
  48.     procedure QueryMaster(const Field,Val:string);
  49.   public
  50.     procedure ShowCharts;
  51.   end;
  52.  
  53. var
  54.   fmCustChart: TfmCustChart;
  55.  
  56. implementation
  57.  
  58. {$R *.DFM}
  59.  
  60. uses Dialogs, CustText, SysUtils, ChartFX;
  61.  
  62. procedure TfmCustChart.QueryHoldings;
  63. {gets all records which match the selected customer}
  64. begin
  65.   QHoldings.Close;
  66.   QHoldings.SQL.Clear;
  67.   QHoldings.SQL.Add('select * from holdings');
  68.   QHoldings.SQL.Add('where Acct_Nbr='+AcntNums[ComboName.ItemIndex]);
  69.   QHoldings.Open;
  70. end;
  71.  
  72. procedure TfmCustChart.QueryMaster(const Field,Val:string);
  73. {gets all records which match the selected customer}
  74. begin
  75.   QMaster.Close;
  76.   QMaster.SQL.Clear;
  77.   QMaster.SQL.Add('select * from Master');
  78.   QMaster.SQL.Add('where '+Field+'="'+Val+'"');
  79.   QMaster.Open;
  80. end;
  81.  
  82.  
  83. procedure TfmCustChart.DisplayPortfolio;
  84. var Counter: integer;
  85. begin
  86.   Screen.Cursor := CrHourGlass;
  87.   QueryHoldings;
  88.   with Chart do
  89.   begin
  90.     Visible := false;
  91.     BtnPie.Down := true;
  92.     ChartType := BtnPie.Tag;
  93.     { COD_VALUES defined in ChartFX }
  94.     OpenData[COD_VALUES] := MakeLong(1,QHoldings.RecordCount);
  95.     ThisSerie := 0;
  96.     Counter := 0;
  97.     fmChartText.ClearText;
  98.     fmChartText.AddLine('Current portfolio by company showing');
  99.     fmChartText.AddLine('number of shares and current price');
  100.     fmChartText.AddLine('');
  101.     while not QHoldings.Eof do
  102.     begin
  103.       QueryMaster('SYMBOL',QHoldings.FieldByname('SYMBOL').AsString);
  104.       if QMaster.EOF then
  105.          continue;  {symbol not found}
  106.       try
  107.         Value[Counter] := QHoldings.FieldbyName('SHARES').AsInteger
  108.                           * QMaster.FieldByname('CUR_Price').AsFloat;
  109.         fmChartText.AddLine(QMaster.FieldByname('CO_NAME').AsString + ' ('+
  110.                             QHoldings.FieldByname('SYMBOL').AsString + ') '+
  111.                             QHoldings.FieldbyName('SHARES').AsString + ' @ '+
  112.                             QMaster.FieldByname('CUR_Price').AsString);
  113.       except
  114.         Value[Counter] := 0;
  115.       end;
  116.       Legend[Counter] := QMaster.FieldByname('CO_NAME').AsString;
  117.       inc(Counter);
  118.       QHoldings.Next;
  119.     end;
  120.     CloseData[COD_VALUES] := 0;
  121.     LegendWidth := 150;
  122.     Title[CHART_TOPFT] := 'Portfolio by Company';
  123.     Visible := true;
  124.   end;
  125.   Screen.Cursor := CrDefault;
  126. end;
  127.  
  128. procedure TfmCustChart.DisplayCategory(const Fld,Cat1,Cat2,Cat3:string);
  129. var
  130.    Count1,Count2,Count3: integer;
  131.    StatusStr: string;
  132. begin
  133.   Screen.Cursor := CrHourGlass;
  134.   QueryHoldings;
  135.   Count1 := 0;
  136.   Count2 := 0;
  137.   Count3 := 0;
  138.   fmChartText.ClearText;
  139.   fmChartText.AddLine('Current portfolio rated by '+Fld);
  140.   fmChartText.AddLine('');
  141.   while not QHoldings.Eof do
  142.   begin
  143.     try
  144.       QueryMaster('Symbol',QHoldings.FieldByname('SYMBOL').AsString);
  145.       if QMaster.EOF then
  146.          continue;  {symbol not found}
  147.       StatusStr := Uppercase(QMaster.FieldByname(FLD).AsString);
  148.       if StatusStr = Cat1 then
  149.          inc(Count1)
  150.       else if StatusStr = Cat2 then
  151.          inc(Count2)
  152.       else if StatusStr = Cat3 then
  153.          inc(Count3);
  154.       fmChartText.AddLine(QMaster.FieldByname('CO_NAME').AsString + ' ('+
  155.                           QHoldings.FieldByname('SYMBOL').AsString + ') '+' status '+
  156.                           QMaster.FieldByname(FLD).AsString);
  157.     except
  158.        MessageDlg('Error reading stock status',mtError,[mbOK],0);
  159.     end;
  160.     QHoldings.Next;
  161.   end;
  162.   with Chart do
  163.   begin
  164.     Visible := false;
  165.     OpenData[COD_VALUES] := MakeLong(1,3);
  166.     ThisSerie := 0;
  167.     Value[0] := Count1;
  168.     Value[1] := Count2;
  169.     Value[2] := Count3;
  170.     Legend[0] := Cat1;
  171.     Legend[1] := Cat2;
  172.     Legend[2] := Cat3;
  173.     LegendWidth := 150;
  174.     Title[CHART_TOPFT] := 'Holdings by '+Fld;
  175.     CloseData[COD_VALUES] := 0;
  176.     LegendWidth := 75;
  177.     Visible := true;
  178.   end;
  179.   Screen.Cursor := CrDefault;
  180. end;
  181.  
  182. procedure TfmCustChart.ShowCharts;
  183. begin
  184.    AcntNums.Clear;
  185.    ComboName.Items.Clear;
  186.    try
  187.      TableCust.Open;
  188.      while not TableCust.Eof do
  189.      begin
  190.        ComboName.Items.Add(TableCust.Fields[1].AsString+' '+TableCust.Fields[0].AsString);
  191.        AcntNums.Add(TableCust.Fields[2].AsString);
  192.        TableCust.Next;
  193.      end;
  194.      TableCust.First;
  195.    except
  196.      MessageDlg('Error loading customer names',mtError,[mbOk],0);
  197.    end;
  198.    ComboName.ItemIndex := 0;
  199.    DisplayPortfolio;
  200.    BtnPort.Down := true;
  201.    Show;
  202. end;
  203.  
  204. procedure TfmCustChart.Btn3DClick(Sender: TObject);
  205. begin
  206.   Chart.Chart3D := Btn3d.Down;
  207. end;
  208.  
  209. procedure TfmCustChart.BtnPrintClick(Sender: TObject);
  210. begin
  211.   if MessageDlg('   Print this chart?',mtConfirmation,[mbYes,mbNo],0) = mrYes then
  212.     Chart.PrintIt := 0;
  213. end;
  214.  
  215. procedure TfmCustChart.GButtonClick(Sender: TObject);
  216. begin
  217.   Chart.ChartType := (Sender as TSpeedButton).Tag;
  218. end;
  219.  
  220. procedure TfmCustChart.FormCreate(Sender: TObject);
  221. begin
  222.   BtnArea.Down := true;
  223.   Btn3d.Down := true;
  224.   Btn3DClick(nil);
  225.   Chart.ChartType := 6;
  226.   AcntNums := TStringList.Create;
  227. end;
  228.  
  229. procedure TfmCustChart.FormDestroy(Sender: TObject);
  230. begin
  231.    AcntNums.Free;
  232. end;
  233.  
  234. procedure TfmCustChart.BtnPortClick(Sender: TObject);
  235. begin
  236.    DisplayPortfolio;
  237. end;
  238.  
  239. procedure TfmCustChart.BtnInfoClick(Sender: TObject);
  240. begin
  241.    fmChartText.Show;
  242. end;
  243.  
  244. procedure TfmCustChart.BtnBHSClick(Sender: TObject);
  245. begin
  246.   DisplayCategory('RCMNDATION','BUY','HOLD','SELL');
  247. end;
  248.  
  249. procedure TfmCustChart.BtnHMLClick(Sender: TObject);
  250. begin
  251.   DisplayCategory('RISK','HI','MED','LOW');
  252. end;
  253.  
  254. procedure TfmCustChart.BtnABCClick(Sender: TObject);
  255. begin
  256.   DisplayCategory('RATING','A','B','C');
  257. end;
  258.  
  259. procedure TfmCustChart.ComboNameChange(Sender: TObject);
  260. begin
  261.    if BtnPort.Down then
  262.       BtnPortClick(nil)
  263.    else if BtnBHS.Down then
  264.       BtnBHSClick(nil)
  265.    else if BtnHML.Down then
  266.       BtnHMLClick(nil)
  267.    else
  268.       BtnABCClick(nil)
  269. end;
  270.  
  271. end.
  272.