home *** CD-ROM | disk | FTP | other *** search
- unit Indchart;
-
- interface
-
- uses WinTypes, WinProcs, Classes, Graphics, Forms, Controls, Buttons,
- StdCtrls, VBXCtrl, Chart2fx, ExtCtrls, DB, DBTables, Messages;
-
- type
- TfmIndustChart = class(TForm)
- Panel1: TPanel;
- Chart: TChartFX;
- BtnDiv: TSpeedButton;
- BtnBest: TSpeedButton;
- BtnWorst: TSpeedButton;
- BtnPrint: TSpeedButton;
- QIndustry: TQuery;
- QMaster: TQuery;
- DataSource: TDataSource;
- PanelHint: TPanel;
- Table: TTable;
- procedure BtnBestClick(Sender: TObject);
- procedure BtnDivClick(Sender: TObject);
- procedure BtnWorstClick(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure FormDestroy(Sender: TObject);
- procedure FormClose(Sender: TObject; var Action: TCloseAction);
- procedure DisplayHint(Sender: TObject);
- procedure FormActivate(Sender: TObject);
- procedure BtnPrintClick(Sender: TObject);
- private
- DivCalced: Boolean;
- MouseOverForm: Boolean;
- IndustList: TStringList;
- procedure SetChartToDiv;
- procedure SetCharttoBW(Best: Boolean);
- procedure GetDivValues;
- procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
- procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
- public
- procedure ShowCharts;
- end;
-
- var
- fmIndustChart: TfmIndustChart;
-
- implementation
-
- {$R *.DFM}
-
- uses Dialogs, SysUtils, ChartFX;
-
- const
- Separator = #255;
-
- BestWorstQualifiers = 4;
-
- procedure TfmIndustChart.GetDivValues;
- begin
- try
- IndustList.Clear;
- QIndustry.Open;
- QMaster.Open;
- while not QIndustry.Eof do
- begin
- DivCalced := true;
- { add a "Description #255 Value" string to list }
- if Qmaster.Fields[0].AsString = '' then
- IndustList.Add(QIndustry.Fields[2].AsString+Separator+'0')
- else
- IndustList.Add(QIndustry.Fields[2].AsString+Separator+Qmaster.Fields[0].AsString);
- QIndustry.Next;
- end;
- QIndustry.Close;
- Qmaster.Close;
- except
- MessageDlg('Unable to ascertain industry diversity',mtError,[mbOK],0);
- end;
- end;
-
- procedure TfmIndustChart.SetChartToDiv;
- var
- I: Integer;
- P: Byte;
- begin
- Screen.Cursor := CrHourGlass;
- if not DivCalced then
- GetDivValues;
- with Chart do
- begin
- Visible := false;
- Chart3D := true;
- ChartType := 5; { pie }
- { COD_VALUES defined in ChartFX }
- OpenData[COD_VALUES] := MakeLong(1,IndustList.Count);
- ThisSerie := 0; { about to define series 0 values }
- for I := 0 to pred(IndustList.Count) do
- begin
- Application.ProcessMessages;
- P := pos(Separator, IndustList[I]);
- try
- Value[I] := strtoint(copy(IndustList[I], succ(P), 255))
- except
- Value[I] := 0;
- end;
- Legend[I] := copy(IndustList[I], 1, pred(P));
- end;
- CloseData[COD_VALUES] := 0;
- LegendWidth := 150;
- Title[CHART_TOPFT] := 'Holdings by Industry';
- Visible := true;
- end;
- Screen.Cursor := CrDefault;
- end;
-
- procedure TfmIndustChart.SetCharttoBW(Best: Boolean);
- var I: integer;
- begin
- Screen.Cursor := CrHourGlass;
- with Chart do
- begin
- Chart3D := False;
- ChartType := 2; { bar }
- try
- OpenData[COD_VALUES] := MakeLong(1, BestWorstQualifiers);
- ThisSerie := 0; { about to define series 0 values }
- Table.Close;
- if Best then
- Table.IndexName := 'GrowthDesc'
- else
- Table.IndexName := 'GrowthAsc';
- Table.Open;
- for I := 0 to pred(BestWorstQualifiers) do
- begin
- try
- Value[I] := Table.FieldbyName('PROJ_GRTH').AsInteger;
- Legend[I] := Table.FieldbyName('CO_NAME').AsString;
- except
- Value[I] := 0;
- end;
- Table.Next;
- end;
- Table.Close;
- except
- MessageDlg('Unable to get chart data', mtError, [mbOK], 0);
- end;
- CloseData[COD_VALUES] := 0;
- LegendWidth := 150;
- end;
- Screen.Cursor := CrDefault;
- end;
-
- procedure TfmIndustChart.ShowCharts;
- begin
- if not Visible then
- begin
- BtnDiv.Down := True;
- SetChartToDiv;
- end;
- Show;
- end;
-
- procedure TfmIndustChart.BtnBestClick(Sender: TObject);
- begin
- SetCharttoBW(true);
- Chart.Title[CHART_TOPFT] := 'High Growth Stocks';
- end;
-
- procedure TfmIndustChart.BtnDivClick(Sender: TObject);
- begin
- SetChartToDiv;
- end;
-
- procedure TfmIndustChart.BtnWorstClick(Sender: TObject);
- begin
- SetCharttoBW(false);
- Chart.Title[CHART_TOPFT] := 'Least Growth Stocks';
- end;
-
- procedure TfmIndustChart.DisplayHint(Sender: TObject);
- begin
- if MouseOverForm and Active then { don't show other form's hints }
- PanelHint.Caption := Application.Hint;
- end;
-
- procedure TfmIndustChart.FormCreate(Sender: TObject);
- begin
- DivCalced := False;
- IndustList := tStringList.Create;
- end;
-
- procedure TfmIndustChart.FormDestroy(Sender: TObject);
- begin
- IndustList.Free;
- end;
-
- procedure TfmIndustChart.FormClose(Sender: TObject;
- var Action: TCloseAction);
- begin
- DivCalced := False; { recalc each time the dialog is opened }
- end;
-
- procedure TfmIndustChart.CMMouseEnter(var Message: TMessage);
- begin
- MouseOverForm := true;
- end;
-
- procedure TfmIndustChart.CMMouseLeave(var Message: TMessage);
- begin
- MouseOverForm := false;
- end;
-
- procedure TfmIndustChart.FormActivate(Sender: TObject);
- begin
- Application.OnHint := DisplayHint;
- end;
-
- procedure TfmIndustChart.BtnPrintClick(Sender: TObject);
- begin
- if MessageDlg(' Print this chart?', mtConfirmation, [mbYes, mbNo], 0)
- = mrYes then
- Chart.PrintIt := 0;
- end;
-
- end.
-