home *** CD-ROM | disk | FTP | other *** search
- { FormulaBuilder }
- { YGB Software, Inc. }
- { Copyright 1995 Clayton Collie }
- { All rights reserved }
-
- { Demo of a calculator. Supports Variables }
- unit Calcfrm1;
- interface
- uses
- FBCalc, FBComp,
- SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
- Forms, Dialogs, Buttons, StdCtrls, ExtCtrls;
-
- type
- TcalcForm = class(TForm)
- Bevel1: TBevel;
- Button7: TSpeedButton;
- Button8: TSpeedButton;
- Button9: TSpeedButton;
- Button4: TSpeedButton;
- Button5: TSpeedButton;
- Button6: TSpeedButton;
- Button1: TSpeedButton;
- Button2: TSpeedButton;
- Button3: TSpeedButton;
- Button0: TSpeedButton;
- PlusMinusBtn: TSpeedButton;
- PeriodBtn: TSpeedButton;
- MultBtn: TSpeedButton;
- MinusBtn: TSpeedButton;
- DivBtn: TSpeedButton;
- PlusBtn: TSpeedButton;
- StatusPanel: TPanel;
- Bevel2: TBevel;
- LParenBtn: TSpeedButton;
- RParenBtn: TSpeedButton;
- ExponenBtn: TSpeedButton;
- EqualBtn: TSpeedButton;
- Bevel3: TBevel;
- ExitBtn: TBitBtn;
- ClearBtn: TBitBtn;
- BackBtn: TBitBtn;
- FormulaField: TComboBox;
- VariablesBtn: TBitBtn;
- Panel2: TPanel;
- FunctionNames: TListBox;
- CalcBtn: TBitBtn;
- Expression: TExpression;
- procedure Button7Click(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure PlusMinusBtnClick(Sender: TObject);
- procedure ClearBtnClick(Sender: TObject);
- procedure LParenBtnClick(Sender: TObject);
- procedure CalcBtnClick(Sender: TObject);
- procedure BackBtnClick(Sender: TObject);
- procedure VariablesBtnClick(Sender: TObject);
- procedure FormDestroy(Sender: TObject);
- procedure FunctionNamesDblClick(Sender: TObject);
- procedure EqualBtnClick(Sender: TObject);
- private
- { Private declarations }
- Procedure DoCalculation;
- public
- { Public declarations }
- end;
-
-
- Procedure DisplayCalc;
-
- Var calcForm : TCalcForm;
-
- implementation
- uses vardlg,fbmisc;
- {$R *.DFM}
-
- Procedure DisplayCalc;
- var calcFm : TCalcForm;
- begin
- CalcFm := TCalcForm.Create(NIL);
- CalcFm.ShowModal;
- CalcFm.Free;
- end;
-
- Function GetFuncNames(vname : pchar;
- vtype : byte;
- parms : pchar;
- minPrms : byte;
- EnumData : longint):integer; export;
- var proto,tmp : string[60];
- i : integer;
- list : TStringList absolute EnumData;
-
- begin
- { Were interested only in math functions }
- if not (vType in [vtInteger,vtFloat]) then exit;
- tmp := strpas(parms);
- for i := 1 to length(tmp) do
- if not (tmp[i] in ['I','F']) then exit;
- {if pos }
- Proto := ShortPrototype(strpas(vname),tmp,length(tmp),minprms);
- if not Assigned(list) then
- List := TStringList.Create;
- List.Add( proto );
- end;
-
- Function getFunctionPrototypes : TStringList;
- begin
- Result := TStringList.Create;
- FBEnumFunctions(getFuncNames,longint(Result));
- end;
-
-
- procedure TcalcForm.Button7Click(Sender: TObject);
- var s : string[4];
- begin
- s := (Sender as TSpeedButton).Caption[2];
- if pos(s,'*^+-/') > 0 then s := ' '+s+' ';
- FormulaField.text := FormulaField.text + s;
- end;
-
- procedure TcalcForm.FormCreate(Sender: TObject);
- var theList : TStringList;
- begin
- thelist := getFunctionPrototypes;
- FunctionNames.Items.AddStrings(thelist);
- thelist.free;
- end;
-
- Procedure TCalcForm.DoCalculation;
- var s : string[75];
- begin
- if (FormulaField.text = '') then exit;
- with Expression do begin
- Formula := FormulaField.Text;
- if Status = EXPR_SUCCESS then
- begin
- s := Expression.AsString;
- FormulaField.items.add(FormulaField.text);
- {StatusPanel.caption := '> ' + s;}
- FormulaField.Text := s;
- end
- else
- StatusPanel.caption := '> Error : ' + StatusText;
- end;
- end;
-
- procedure TCalcForm.PlusMinusBtnClick(Sender: TObject);
- begin
- FormulaField.text := '-1 * (' + FormulaField.text + ')';
- end;
-
- procedure TcalcForm.ClearBtnClick(Sender: TObject);
- begin
- FormulaField.text := '';
- end;
-
- procedure TcalcForm.LParenBtnClick(Sender: TObject);
- begin
- FormulaField.text := FormulaField.text + (sender as TSpeedButton).caption[1];
- end;
-
- procedure TcalcForm.CalcBtnClick(Sender: TObject);
- begin
- DoCalculation;
- end;
-
- procedure TcalcForm.BackBtnClick(Sender: TObject);
- var s : string;
- len : integer;
-
- begin
- s := FormulaField.Text;
- len := length(s);
- if (len > 0) then
- FormulaField.text := copy(s,1,pred(len));
- end;
-
-
- procedure TcalcForm.VariablesBtnClick(Sender: TObject);
- begin
- ManageVariables(Expression.Handle);
- end;
-
- procedure TcalcForm.FormDestroy(Sender: TObject);
- begin
- Expression.Free;
- end;
-
- procedure TcalcForm.FunctionNamesDblClick(Sender: TObject);
- begin
- with functionNames do
- if ItemIndex > -1 then
- FormulaField.Text := FormulaField.Text + FunctionNames.Items[ItemIndex];
-
- end;
-
- procedure TcalcForm.EqualBtnClick(Sender: TObject);
- begin
- DoCalculation;
- end;
-
- end.
-
-