⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.pas

📁 文本计算器是一款为经常需要使用计算器的工程项目人士而设计的软件
💻 PAS
字号:
unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, RzStatus, ImgList, RzButton, RzPanel, ExtCtrls, StdCtrls, RzEdit,
  RzTabs, RzRadGrp, Mask, RzSpnEdt, RzLabel, RzCmboBx, RzRadChk, acLabels,
  SkinCaption, WinSkinData, Menus, StdActns, ActnList, RzForms, RzCommon,
  CalcExpress, RzSplit, StrUtils, acButtons, ComCtrls;

type
  TForm1 = class(TForm)
    RzStatusBar1: TRzStatusBar;
    RzToolbar2: TRzToolbar;
    RzToolButton5: TRzToolButton;
    RzToolButton6: TRzToolButton;
    RzToolButton1: TRzToolButton;
    RzToolButton3: TRzToolButton;
    RzToolButton4: TRzToolButton;
    ImageList1: TImageList;
    RzStatusPane1: TRzStatusPane;
    RzKeyStatus1: TRzKeyStatus;
    RzClockStatus1: TRzClockStatus;
    RzPageControl1: TRzPageControl;
    TabSheet1: TRzTabSheet;
    TabSheet2: TRzTabSheet;
    TabSheet4: TRzTabSheet;
    RzMemo1: TRzMemo;
    RzMemo2: TRzMemo;
    FontDialog1: TFontDialog;
    PopupMenu1: TPopupMenu;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    C1: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    N1: TMenuItem;
    ActionList1: TActionList;
    EditCut1: TEditCut;
    EditCopy1: TEditCopy;
    EditPaste1: TEditPaste;
    EditSelectAll1: TEditSelectAll;
    Action1: TAction;
    EditUndo1: TEditUndo;
    Undo1: TMenuItem;
    CalcExpress1: TCalcExpress;
    RzSplitter1: TRzSplitter;
    RzEdit1: TRzEdit;
    RzMemo3: TRzMemo;
    RzLabel5: TRzLabel;
    SkinData1: TSkinData;
    SkinCaption1: TSkinCaption;
    Label2: TLabel;
    Vars: TMemo;
    Label3: TLabel;
    Values: TMemo;
    PopupMenu2: TPopupMenu;
    MenuItem1: TMenuItem;
    MenuItem2: TMenuItem;
    MenuItem3: TMenuItem;
    MenuItem4: TMenuItem;
    MenuItem5: TMenuItem;
    MenuItem6: TMenuItem;
    MenuItem7: TMenuItem;
    MenuItem8: TMenuItem;
    Action2: TAction;
    RzRegIniFile1: TRzRegIniFile;
    TabSheet3: TRzTabSheet;
    dot: TRzGroupBox;
    RzLabel2: TRzLabel;
    RzSpinEdit1: TRzSpinEdit;
    RzGroupBox1: TRzGroupBox;
    acLabel1: TacLabel;
    RzCheckBox1: TRzCheckBox;
    RzSpinEdit2: TRzSpinEdit;
    RzGroupBox2: TRzGroupBox;
    RzCheckBox2: TRzCheckBox;
    RzCheckBox3: TRzCheckBox;
    procedure RzToolButton4Click(Sender: TObject);
    procedure RzToolButton3Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure RzToolButton1Click(Sender: TObject);
    procedure RzToolButton6Click(Sender: TObject);
    procedure RzToolButton5Click(Sender: TObject);
    procedure Action1Execute(Sender: TObject);
    procedure RzMemo1KeyPress(Sender: TObject; var Key: Char);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure RzSpinEdit2Change(Sender: TObject);
    procedure RzSpinEdit1Change(Sender: TObject);
    procedure RzCheckBox1Click(Sender: TObject);
    procedure RzEdit1KeyPress(Sender: TObject; var Key: Char);
    procedure Action2Execute(Sender: TObject);
    procedure RzCheckBox2Click(Sender: TObject);
    procedure RzCheckBox3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}



procedure TForm1.Action1Execute(Sender: TObject);
begin
  RzMemo1.Clear;
end;


procedure TForm1.Action2Execute(Sender: TObject);
begin
  RzMemo3.Clear;
end;





procedure TForm1.FormCreate(Sender: TObject);
var
  fonts, savs, cpys, tops: string;
begin
  TabSheet1.Show;
  if FileExists('num.txt') then
  begin
    rzMemo1.Lines.LoadFromFile('num.txt');
    rzmemo1.SelStart := Length(rzmemo1.Lines.Text);
    rzmemo1.SelLength := 0;
  end else
    rzMemo1.Lines.SaveToFile('num.txt');
  if not FileExists('c:\windows\set.ini') then
  begin
    RzRegIniFile1.Writestring('option', 'precision', '3');
    RzRegIniFile1.Writestring('option', 'save', '0');
    RzRegIniFile1.Writestring('option', 'copy', '0');
    RzRegIniFile1.Writestring('option', 'top', '0');
    RzRegIniFile1.Writestring('option', 'font', '12');
  end else
  begin
    fonts := RzRegIniFile1.ReadString('option', 'font', '');
    RzMemo1.Font.Size := strtoint(fonts);
    RzSpinEdit1.IntValue := strtoint(RzRegIniFile1.Readstring('option', 'precision', ''));
    savs := RzRegIniFile1.Readstring('option', 'save', '');
    cpys := RzRegIniFile1.Readstring('option', 'copy', '');
    tops := RzRegIniFile1.Readstring('option', 'top', '');
    RzSpinEdit2.IntValue := strtoint(RzRegIniFile1.Readstring('option',
      'font', ''));
    if (tops = '0') then
    begin
      RzCheckBox1.State := cbchecked ;
      form1.FormStyle := fsStayOnTop
    end
    else
    begin
      RzCheckBox1.State := cbunchecked;
      form1.FormStyle := fsNormal
    end;
    if (savs = '0') then
      RzCheckBox2.State := cbchecked
    else
      RzCheckBox2.State := cbunchecked;
    if (cpys = '0') then
      RzCheckBox3.State := cbchecked
    else
      RzCheckBox3.State := cbunchecked;
  end;
  tops := RzRegIniFile1.ReadString('option', 'top', '');
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
  c: string;
begin
  c := RzRegIniFile1.Readstring('option', 'save', '');
  if c = '0' then
    rzMemo1.Lines.SaveToFile('num.txt');
end;



procedure TForm1.RzMemo1KeyPress(Sender: TObject; var Key: Char);
var
  x, inputline: Integer;
  c1, z1: string;
const
  args: array[0..1] of extended = (0, 1);
  gs: array[0..9] of string = ('%.0f', '%.1f', '%.2f', '%.3f', '%.4f', '%.5f', '%.6f', '%.7f', '%.8f', '%.9f');
begin
  try
    if key = #13 then
    begin
      c1 := RzRegIniFile1.Readstring('option', 'copy', '');
      x := strtoint(RzRegIniFile1.Readstring('option', 'precision', ''));
      inputLine := self.rzMemo1.Perform(em_LineFromChar, rzMemo1.SelStart, 0);
      CalcExpress1.Formula := rzMemo1.Lines.Strings[inputLine];
      if AnsiContainsText(FloatToStr(CalcExpress1.calc(args)), '.') = True then
        z1 := format(gs[x], [CalcExpress1.calc(args)])
      else z1 := FloatToStr(CalcExpress1.calc(args));
      rzMemo1.Lines.Strings[inputline] :=
        rzMemo1.Lines.Strings[inputline] + '=' + z1;
      if c1 = '0' then
        rzMemo1.Lines.Add(#13);
      rzMemo1.Lines.Strings[inputline + 1] := z1;
    end;
  except
  end;
end;

procedure TForm1.RzEdit1KeyPress(Sender: TObject; var Key: Char);
var
  i, x, inputline: Integer;
  c1, z1: string;
  args: array[0..1000] of extended;
const
  gs: array[0..9] of string = ('%.0f', '%.1f', '%.2f', '%.3f', '%.4f', '%.5f',
    '%.6f', '%.7f', '%.8f', '%.9f');
begin
  if ((key = #13) and (Vars.Lines.Count = Values.Lines.Count) and (Values.Text <> '')) then
  begin
    try
      c1 := RzRegIniFile1.Readstring('option', 'copy', '');
      x := strtoint(RzRegIniFile1.Readstring('option', 'precision', ''));
      inputLine := form1.rzMemo3.Perform(em_LineFromChar, form1.rzMemo3.SelStart, 0);
      form1.CalcExpress1.Formula := rzedit1.Text;
      form1.CalcExpress1.Variables := Vars.Lines;
      for i := 0 to Values.Lines.Count - 1 do
        args[i] := StrToFloat(Values.Lines[i]);
      if AnsiContainsText(FloatToStr(form1.CalcExpress1.calc(args)), '.') = True then
        z1 := format(gs[x], [form1.CalcExpress1.calc(args)])
      else z1 := FloatToStr(form1.CalcExpress1.calc(args));
      form1.rzMemo3.Lines.Strings[inputline] :=
        RzEdit1.Text + '=' + z1;
      if c1 = '0' then
        form1.rzMemo3.Lines.Add(#13);
      form1.rzMemo3.Lines.Strings[inputline + 1] := z1;
      form1.rzMemo3.Lines.Add('');
    except
      messagebox(handle, '变量名称和变量数值必须相对应!', '出错提示', 48);
    end;
  end
end;

procedure TForm1.RzSpinEdit1Change(Sender: TObject);
var
  dots: string;
begin
  dots := inttostr(RzSpinEdit1.IntValue);
  RzRegIniFile1.Writestring('option', 'precision', dots);
end;



procedure TForm1.RzToolButton1Click(Sender: TObject);
begin
  TabSheet3.Show;
end;

procedure TForm1.RzToolButton3Click(Sender: TObject);
begin
  TabSheet4.Show;
  rzmemo2.clear;
  rzMemo2.Lines.Add('使用说明');
  rzMemo2.Lines.Add('一、用法:');
  rzMemo2.Lines.Add('1、超强计算器具有关闭时是否保存计算结果的功能、计算结果的小数位选择功能,以及自动更新功能;');
  rzMemo2.Lines.Add('2、超强计算器打开时,将会自动加载上次的计算结果;');
  rzMemo2.Lines.Add('3、公式按钮中加入公式计算功能,公式框按回车可进行公式固定而数值变化的计算;;');
  rzMemo2.Lines.Add('4、输入数学表达式后,按回车键,自动计算结果;');
  rzMemo2.Lines.Add('5、一个表达式必须在一行内全部输入;');
  rzMemo2.Lines.Add('6、表达式可以是加+、减-、乘*、除/、平方^、括号(),以及数学函数组合。');
  rzMemo2.Lines.Add('二、支持的数学函数:');
  rzMemo2.Lines.Add('1、cos(), sin(), tg(), ctg(), abs(), sgn() or sign(), sqrt(), ln(),sh() or sinh(), ' +
    'ch() or cosh(), th() or tanh(),cth() or coth(), heaviside();');
  rzMemo2.Lines.Add('2、示例:1+sin(30)(其中30为弧度)按回车键后显示1+sin(30)=0.012。');
  rzMemo2.Lines.Add('三、其它说明');
  rzMemo2.Lines.Add('1、用户可以定期网上更新,并可根据用户的意见,增加部分适用功能;');
  rzMemo2.Lines.Add('2、为了支持作者开发新的版本,请用户选择安装插件,不再使用时再删除;');
  rzMemo2.Lines.Add('3、该软件的源代码完全公开,用户可用百度搜索下载;');
  rzMemo2.Lines.Add('4、为了尊重软件作者的劳动成果,如果你在该软件源代码的基础上增加或补充功能,请在你的软件中说明。');

end;

procedure TForm1.RzToolButton4Click(Sender: TObject);
begin
  Close;
end;

procedure TForm1.RzToolButton5Click(Sender: TObject);
begin
  TabSheet1.Show;
end;

procedure TForm1.RzToolButton6Click(Sender: TObject);
begin
  TabSheet2.Show;
end;

procedure TForm1.RzSpinEdit2Change(Sender: TObject);
var
  fonts: string;
begin
  RzMemo1.Font.Size := strtoint(floattostr(RzSpinEdit2.value));
  RzMemo3.Font.Size := strtoint(floattostr(RzSpinEdit2.value));
  fonts := inttostr(RzSpinEdit2.IntValue);
  RzRegIniFile1.Writestring('option', 'font', fonts);
end;

procedure TForm1.RzCheckBox1Click(Sender: TObject);
var
  tops: string;
begin
  if RzCheckBox1.Checked then
  begin
    tops := inttostr(0);
    form1.FormStyle := fsStayOnTop;
  end
  else
  begin
    tops := inttostr(1);
    form1.FormStyle := fsNormal;
  end;
  RzRegIniFile1.Writestring('option', 'top', tops);
end;

procedure TForm1.RzCheckBox2Click(Sender: TObject);
var
  savs: string;
begin
  if RzCheckBox2.Checked then
    savs := inttostr(0)
  else
    savs := inttostr(1);
  RzRegIniFile1.Writestring('option', 'save', savs);
end;

procedure TForm1.RzCheckBox3Click(Sender: TObject);
var
  cpys: string;
begin
  if RzCheckBox2.Checked then
    cpys := inttostr(0)
  else
    cpys := inttostr(1);
  RzRegIniFile1.Writestring('option', 'copy', cpys);
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -