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

📄 exexpru.pas

📁 条码控件: 一维条码控件 二维条码控件 PDF417Barcode MaxiCodeBarcode
💻 PAS
字号:
(* ***** BEGIN LICENSE BLOCK *****
 * Version: MPL 1.1
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is TurboPower SysTools
 *
 * The Initial Developer of the Original Code is
 * TurboPower Software
 *
 * Portions created by the Initial Developer are Copyright (C) 1996-2002
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 *
 * ***** END LICENSE BLOCK ***** *)

unit ExExprU;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls,
  Forms, Dialogs, ExtCtrls, Buttons, StdCtrls,

  StBase, StConst, StExpr;

type
  TStDlg = class(TForm)
    Label1: TLabel;
    ResultEdit: TEdit;
    Label2: TLabel;
    EvaluateBtn: TBitBtn;
    ClearBtn: TBitBtn;
    Panel1: TPanel;
    Panel2: TPanel;
    ExprEdit: TStExpressionEdit;
    DivBtn: TBitBtn;
    MulBtn: TBitBtn;
    MinusBtn: TBitBtn;
    PlusBtn: TBitBtn;
    EBtn: TBitBtn;
    Nr3Btn: TBitBtn;
    Nr6Btn: TBitBtn;
    Nr9Btn: TBitBtn;
    DotBtn: TBitBtn;
    Nr2Btn: TBitBtn;
    Nr5Btn: TBitBtn;
    Nr8Btn: TBitBtn;
    Nr0Btn: TBitBtn;
    Nr1Btn: TBitBtn;
    Nr4Btn: TBitBtn;
    Nr7Btn: TBitBtn;
    SqrtBtn: TBitBtn;
    PiBtn: TBitBtn;
    ExpBtn: TBitBtn;
    PowerBtn: TBitBtn;
    CommaBtn: TBitBtn;
    CosBtn: TBitBtn;
    LnBtn: TBitBtn;
    SqrBtn: TBitBtn;
    RParBtn: TBitBtn;
    ArctanBtn: TBitBtn;
    IntBtn: TBitBtn;
    SinBtn: TBitBtn;
    LParBtn: TBitBtn;
    AbsBtn: TBitBtn;
    FracBtn: TBitBtn;
    RoundBtn: TBitBtn;
    BSBtn: TBitBtn;
    procedure LParBtnClick(Sender: TObject);
    procedure RParBtnClick(Sender: TObject);
    procedure CommaBtnClick(Sender: TObject);
    procedure PowerBtnClick(Sender: TObject);
    procedure AbsBtnClick(Sender: TObject);
    procedure ArctanBtnClick(Sender: TObject);
    procedure CosBtnClick(Sender: TObject);
    procedure ExpBtnClick(Sender: TObject);
    procedure FracBtnClick(Sender: TObject);
    procedure IntBtnClick(Sender: TObject);
    procedure LnBtnClick(Sender: TObject);
    procedure PiBtnClick(Sender: TObject);
    procedure RoundBtnClick(Sender: TObject);
    procedure SinBtnClick(Sender: TObject);
    procedure SqrBtnClick(Sender: TObject);
    procedure SqrtBtnClick(Sender: TObject);
    procedure Nr0BtnClick(Sender: TObject);
    procedure Nr1BtnClick(Sender: TObject);
    procedure Nr2BtnClick(Sender: TObject);
    procedure Nr3BtnClick(Sender: TObject);
    procedure Nr4BtnClick(Sender: TObject);
    procedure Nr5BtnClick(Sender: TObject);
    procedure Nr6BtnClick(Sender: TObject);
    procedure Nr7BtnClick(Sender: TObject);
    procedure Nr8BtnClick(Sender: TObject);
    procedure Nr9BtnClick(Sender: TObject);
    procedure DotBtnClick(Sender: TObject);
    procedure EBtnClick(Sender: TObject);
    procedure PlusBtnClick(Sender: TObject);
    procedure MinusBtnClick(Sender: TObject);
    procedure MulBtnClick(Sender: TObject);
    procedure DivBtnClick(Sender: TObject);
    procedure EvaluateBtnClick(Sender: TObject);
    procedure ClearBtnClick(Sender: TObject);
    procedure ExprEditError(Sender: TObject; ErrorNumber: Longint;
      const ErrorStr: String);
    procedure BSBtnClick(Sender: TObject);
  private
    procedure AddExpr(Add : string; Parens : Boolean);
  end;

var
  StDlg: TStDlg;

implementation

{$R *.DFM}

procedure TStDlg.AddExpr(add : string; parens : boolean);
var
  position, sellen : integer;
  temp : string;
begin
  position := ExprEdit.SelStart+1;
  sellen := ExprEdit.SelLength;
  temp := ExprEdit.Text;

  if (parens) then begin
    add := add+'(';
    if (sellen > 0) then
      {surround the selection with the parentheses}
      insert(')', temp, position+sellen)
    else
      add := add+')';
  end;
  insert(add, temp, position);

  ExprEdit.Text := temp;
  ExprEdit.SetFocus;

  if (parens) then begin
    if (sellen > 0) then
      {position after the add}
      ExprEdit.SelStart := position+sellen+length(add)
    else
      {position before last parenthesis}
      ExprEdit.SelStart := position+length(add)-2;
  end else
    {position after the add}
    ExprEdit.SelStart := position+length(add)-1;
  ExprEdit.SelLength := 0;
end;

procedure TStDlg.LParBtnClick(Sender: TObject);
begin
  AddExpr('(', False);
end;

procedure TStDlg.RParBtnClick(Sender: TObject);
begin
  AddExpr(')', False);
end;

procedure TStDlg.CommaBtnClick(Sender: TObject);
begin
  AddExpr(ListSeparator, False);
end;

procedure TStDlg.PowerBtnClick(Sender: TObject);
begin
  AddExpr('^', False);
end;

procedure TStDlg.AbsBtnClick(Sender: TObject);
begin
  AddExpr('abs', True);
end;

procedure TStDlg.ArctanBtnClick(Sender: TObject);
begin
  AddExpr('arctan', True);
end;

procedure TStDlg.CosBtnClick(Sender: TObject);
begin
  AddExpr('cos', True);
end;

procedure TStDlg.ExpBtnClick(Sender: TObject);
begin
  AddExpr('exp', True);
end;

procedure TStDlg.FracBtnClick(Sender: TObject);
begin
  AddExpr('frac', True);
end;

procedure TStDlg.IntBtnClick(Sender: TObject);
begin
  AddExpr('int', True);
end;

procedure TStDlg.LnBtnClick(Sender: TObject);
begin
  AddExpr('ln', True);
end;

procedure TStDlg.PiBtnClick(Sender: TObject);
begin
  AddExpr('pi', False);
end;

procedure TStDlg.RoundBtnClick(Sender: TObject);
begin
  AddExpr('round', True);
end;

procedure TStDlg.SinBtnClick(Sender: TObject);
begin
  AddExpr('sin', True);
end;

procedure TStDlg.SqrBtnClick(Sender: TObject);
begin
  AddExpr('sqr', True);
end;

procedure TStDlg.SqrtBtnClick(Sender: TObject);
begin
  AddExpr('sqrt', True);
end;

procedure TStDlg.Nr0BtnClick(Sender: TObject);
begin
  AddExpr('0', False);
end;

procedure TStDlg.Nr1BtnClick(Sender: TObject);
begin
  AddExpr('1', False);
end;

procedure TStDlg.Nr2BtnClick(Sender: TObject);
begin
  AddExpr('2', False);
end;

procedure TStDlg.Nr3BtnClick(Sender: TObject);
begin
  AddExpr('3', False);
end;

procedure TStDlg.Nr4BtnClick(Sender: TObject);
begin
  AddExpr('4', False);
end;

procedure TStDlg.Nr5BtnClick(Sender: TObject);
begin
  AddExpr('5', False);
end;

procedure TStDlg.Nr6BtnClick(Sender: TObject);
begin
  AddExpr('6', False);
end;

procedure TStDlg.Nr7BtnClick(Sender: TObject);
begin
  AddExpr('7', False);
end;

procedure TStDlg.Nr8BtnClick(Sender: TObject);
begin
  AddExpr('8', False);
end;

procedure TStDlg.Nr9BtnClick(Sender: TObject);
begin
  AddExpr('9', False);
end;

procedure TStDlg.DotBtnClick(Sender: TObject);
begin
  AddExpr(DecimalSeparator, False);
end;

procedure TStDlg.EBtnClick(Sender: TObject);
begin
  AddExpr('E', False);
end;

procedure TStDlg.PlusBtnClick(Sender: TObject);
begin
  AddExpr('+', False);
end;

procedure TStDlg.MinusBtnClick(Sender: TObject);
begin
  AddExpr('-', False);
end;

procedure TStDlg.MulBtnClick(Sender: TObject);
begin
  AddExpr('*', False);
end;

procedure TStDlg.DivBtnClick(Sender: TObject);
begin
  AddExpr('/', False);
end;

procedure TStDlg.EvaluateBtnClick(Sender: TObject);
var
  res : double;
begin
  res := ExprEdit.Evaluate;
  if ExprEdit.Expr.LastError = 0 then
    ResultEdit.Text := FloatToStr(res);
  ExprEdit.SetFocus;
end;

procedure TStDlg.ClearBtnClick(Sender: TObject);
begin
  ExprEdit.Text := '';
  ResultEdit.Text := '';
  ExprEdit.SetFocus;
end;

procedure TStDlg.ExprEditError(Sender: TObject; ErrorNumber: Longint;
  const ErrorStr: String);
begin
  ResultEdit.Text := 'Error ' + IntToStr(ErrorNumber) + ': ' + ErrorStr;
end;

procedure TStDlg.BSBtnClick(Sender: TObject);
begin
  ExprEdit.Perform(WM_CHAR, VK_BACK, 0);
end;

end.

⌨️ 快捷键说明

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