Chinaunix首页 | 论坛 | 博客
  • 博客访问: 863
  • 博文数量: 4
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 50
  • 用 户 组: 普通用户
  • 注册时间: 2025-07-13 16:46
文章分类
文章存档

2025年(4)

我的朋友
最近访客

分类: LINUX

2025-07-13 16:49:37

unit Unit1;


{$mode objfpc}{$H+}


interface


uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls,
  Menus, DividerBevel;


type


  { TForm1 }


  TForm1 = class(TForm)
    Bevel1: TBevel;
    Button1: TButton;
    Button10: TButton;
    Button11: TButton;
    Button12: TButton;
    Button13: TButton;
    Button14: TButton;
    Button15: TButton;
    Button16: TButton;
    Button17: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    DividerBevel1: TDividerBevel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    MainMenu1: TMainMenu;
    Memo1: TMemo;
    MenuItem1: TMenuItem;
    MenuItem2: TMenuItem;
    MenuItem3: TMenuItem;
    MenuItem5: TMenuItem;
    MenuItem6: TMenuItem;
    procedure Button10Click(Sender: TObject);
    procedure Button12Click(Sender: TObject);
    procedure Button13Click(Sender: TObject);
    procedure Button16Click(Sender: TObject);
    procedure Button17Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private


  public


  end;


var
  Form1: TForm1;
  A: Double; // 0-10 按键(实数型)
  B: Double; // {BANNED}中国第一次输入数字,没有点任何计算符时
  C: Char;   // 计算符
  D: Double; // 第二次输入数字,已经点击过计算符
  F: Double; // 计算结果
  G: Double; // 代表已经有 计算结果
  H: Double; // Memo1 结果追加新数值 用的
implementation


{$R *.lfm}


{ TForm1 }


procedure TForm1.FormCreate(Sender: TObject);
begin
 // 窗体 始终置顶
 form1.FormStyle := fsSystemStayOnTop;
 //限制窗体{BANNED}最佳大/{BANNED}最佳小 宽度和高度
 form1.Constraints.MaxHeight := Height;
 form1.Constraints.MinHeight := Height;
 form1.Constraints.MaxWidth := Width;
 form1.Constraints.MinWidth := Width;
 // 禁止 窗体{BANNED}最佳大化
 form1.BorderIcons := form1.BorderIcons - [biMaximize];
 // 窗体 居中显示
 form1.Position := poDesktopCenter;
 // 窗体 靠近屏幕边缘时,贴边吸附
 form1.ScreenSnap := True;
 //结果默认为 0
 F := 0;
end;


procedure TForm1.Button10Click(Sender: TObject);
begin
 //计算器 数字 0 被点击
 if (C <> #0) and (F = 0) then  // 2,如果 已经按下 计算符 并且 结果为空时
 begin
  // 清空 编辑框4 中的 运算符
   Edit4.Text := StringReplace(Edit4.Text, '+', '', [rfReplaceAll]);
   Edit4.Text := StringReplace(Edit4.Text, '-', '', [rfReplaceAll]);
   Edit4.Text := StringReplace(Edit4.Text, '×', '', [rfReplaceAll]);
   Edit4.Text := StringReplace(Edit4.Text, '÷', '', [rfReplaceAll]);


  // 增加 数字 0
   Edit4.text := Edit4.text + '0';


  // 将光标移动到 Memo1 的末尾
  Memo1.SelStart := Length(Memo1.Text);
  // 选择长度为0,即不选择任何文本
  Memo1.SelLength := 0;
  // 在光标位置不换行,插入数字 0
  Memo1.SelText := '0';
  ShowMessage('已经按下 计算符 并且 结果为空时');
 end
 else
 if (F <> 0) and (C = #0) and (G = 1) then // 检测 已经计算过结果 并且 没有按计算符
  begin
   // 清空 编辑框4 中的 运算符
    Edit4.Text := StringReplace(Edit4.Text, '+', '', [rfReplaceAll]);
    Edit4.Text := StringReplace(Edit4.Text, '-', '', [rfReplaceAll]);
    Edit4.Text := StringReplace(Edit4.Text, '×', '', [rfReplaceAll]);
    Edit4.Text := StringReplace(Edit4.Text, '÷', '', [rfReplaceAll]);
   //计算器 数字 0 被点击 插入数字 0
   Edit4.text := Edit4.text + '0';


  if H = 1 then
   begin
   // 将光标移动到 Memo1 的末尾
   Memo1.SelStart := Length(Memo1.Text);
   // 选择长度为0,即不选择任何文本
   Memo1.SelLength := 0;
   // 在光标位置不换行,插入编辑框4内容(同步MEmo1)
   Memo1.SelText := Edit4.text;
   H := 0;
   ShowMessage('已经计算过结果 并且 没有按计算符');
   end
   else
   begin
   // 结果追加新数值,插入数字 0
   Memo1.SelText := '0';
   ShowMessage('结果追加新数值 并且 没有按计算符');
   end;
 end;


 if (C = #0) and (F = 0) and (G = 0) then // 如果 没有按计算符 并且 结果也为空
  begin
   //计算器 数字 0 被点击
   Edit4.text := Edit4.text + '0';
   // 将光标移动到 Memo1 的末尾
   Memo1.SelStart := Length(Memo1.Text);
   // 选择长度为0,即不选择任何文本
   Memo1.SelLength := 0;
   // 在光标位置不换行,插入数字 0
   Memo1.SelText := '0';
   ShowMessage('没有按计算符 并且 结果也为空');
  end;


  // 已经有结果 并且 有运算符 并且 结果追加新数值
 if (G = 1) and (C <> #0)  then
  begin
   //计算器 数字 0 被点击
   Edit4.text := Edit4.text + '0';
   // 将光标移动到 Memo1 的末尾
   Memo1.SelStart := Length(Memo1.Text);
   // 选择长度为0,即不选择任何文本
   Memo1.SelLength := 0;
   // 在光标位置不换行,插入数字0
   Memo1.SelText := '0';
   ShowMessage('已经有结果 并且 有运算符 并且 结果追加新数值');
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  //计算器 数字 1 被点击
  if (C <> #0) and (F = 0) then  // 2,如果 已经按下 计算符 并且 结果为空时
  begin
   // 清空 编辑框4 中的 运算符
    Edit4.Text := StringReplace(Edit4.Text, '+', '', [rfReplaceAll]);
    Edit4.Text := StringReplace(Edit4.Text, '-', '', [rfReplaceAll]);
    Edit4.Text := StringReplace(Edit4.Text, '×', '', [rfReplaceAll]);
    Edit4.Text := StringReplace(Edit4.Text, '÷', '', [rfReplaceAll]);


   // 增加 数字 1
    Edit4.text := Edit4.text + '1';


   // 将光标移动到 Memo1 的末尾
   Memo1.SelStart := Length(Memo1.Text);
   // 选择长度为0,即不选择任何文本
   Memo1.SelLength := 0;
   // 在光标位置不换行,插入数字 1
   Memo1.SelText := '1';
   ShowMessage('已经按下 计算符 并且 结果为空时');
  end
  else
  if (F <> 0) and (C = #0) and (G = 1) then // 检测 已经计算过结果 并且 没有按计算符
   begin
    // 清空 编辑框4 中的 运算符
     Edit4.Text := StringReplace(Edit4.Text, '+', '', [rfReplaceAll]);
     Edit4.Text := StringReplace(Edit4.Text, '-', '', [rfReplaceAll]);
     Edit4.Text := StringReplace(Edit4.Text, '×', '', [rfReplaceAll]);
     Edit4.Text := StringReplace(Edit4.Text, '÷', '', [rfReplaceAll]);
    //计算器 数字 1 被点击 插入数字 1
    Edit4.text := Edit4.text + '1';


   if H = 1 then
    begin
    // 将光标移动到 Memo1 的末尾
    Memo1.SelStart := Length(Memo1.Text);
    // 选择长度为0,即不选择任何文本
    Memo1.SelLength := 0;
    // 在光标位置不换行,插入编辑框4内容(同步MEmo1)
    Memo1.SelText := Edit4.text;
    H := 0;
    ShowMessage('已经计算过结果 并且 没有按计算符');
    end
    else
    begin
    // 结果追加新数值,插入数字 1
    Memo1.SelText := '1';
    ShowMessage('结果追加新数值 并且 没有按计算符');
    end;
  end;


  if (C = #0) and (F = 0) and (G = 0) then // 如果 没有按计算符 并且 结果也为空
   begin
    //计算器 数字 1 被点击
    Edit4.text := Edit4.text + '1';
    // 将光标移动到 Memo1 的末尾
    Memo1.SelStart := Length(Memo1.Text);
    // 选择长度为0,即不选择任何文本
    Memo1.SelLength := 0;
    // 在光标位置不换行,插入数字 1
    Memo1.SelText := '1';
    ShowMessage('没有按计算符 并且 结果也为空');
   end;


   // 已经有结果 并且 有运算符 并且 结果追加新数值
  if (G = 1) and (C <> #0)  then
   begin
    //计算器 数字 1 被点击
    Edit4.text := Edit4.text + '1';
    // 将光标移动到 Memo1 的末尾
    Memo1.SelStart := Length(Memo1.Text);
    // 选择长度为0,即不选择任何文本
    Memo1.SelLength := 0;
    // 在光标位置不换行,插入数字1
    Memo1.SelText := '1';
    ShowMessage('已经有结果 并且 有运算符 并且 结果追加新数值');
   end;
end;
procedure TForm1.Button12Click(Sender: TObject);
begin

  // 点击  +加号 按钮
  if Edit4.Text = '' then // 1,检测编辑框内容,是否为空
  begin
    Exit;
  end;


  if C = #0 then  // 2,如果 计算符 从来没有按过
  begin
    // {BANNED}中国第一次按下,计算符
    try
      B := StrToFloat(Edit4.Text);  // 保存{BANNED}中国第一个操作数
      C := '+';  // 设置当前运算符
      // 先清空
      Edit4.Text := '';
      // 再写 + 号
      Edit4.Text := '+';
      // 将光标移动到 Memo1 的末尾
      Memo1.SelStart := Length(Memo1.Text);
      // 选择长度为0,即不选择任何文本
      Memo1.SelLength := 0;
      // 在光标位置插入文本,不换行
      Memo1.SelText := '+';
      ShowMessage('{BANNED}中国第一次按下,计算符 + ');
    except
      on E: EConvertError do
        ShowMessage('输入无效,请输入有效数字');
    end;
  end
  else
  begin
    ShowMessage('已经按过运算符 + ');
    C := '+'; // 设置新运算符
    // 如果已经按过,运算符,先给他计算结果
    Button17Click(Sender); // 调用等号计算
  end;
end;


procedure TForm1.Button13Click(Sender: TObject);
begin
  // 点击 -减号 按钮
  if Edit4.Text = '' then // 1,检测编辑框内容,是否为空
  begin
    Exit;
  end;
  if C = #0 then  // 2,检测是否,已经按下了,计算符
  begin
    // 如果是{BANNED}中国第一次按下,计算符
    try
      B := StrToFloat(Edit4.Text);  // 保存{BANNED}中国第一个操作数
      C := '-';  // 设置当前运算符
      Edit4.Text := '-';
      // 将光标移动到 Memo1 的末尾
      Memo1.SelStart := Length(Memo1.Text);
      // 选择长度为0,即不选择任何文本
      Memo1.SelLength := 0;
      // 在光标位置插入文本,不换行
      Memo1.SelText := '-';
    except
      on E: EConvertError do
        ShowMessage('输入无效,请输入有效数字');
    end;
  end
  else
  begin
    C := '-'; // 设置新运算符
    // 如果已经按过,运算符,先给他计算结果
    Button17Click(Sender); // 调用等号计算
  end;
end;


procedure TForm1.Button16Click(Sender: TObject);
begin
 // 点击 清空 按钮
 Edit4.text := ''; //  清空 编辑框4
 C := #0;          // 重置运算符
 F := 0;           // 结果恢复为 0
 G := 0;           // 结果标记清空
 H := 0;           // 结果追加新数值 清空
end;


procedure TForm1.Button17Click(Sender: TObject);
begin
  // 点击 等号 按钮
  if C = #0 then Exit;  // 如果没有 计算符 直接退出

减速带niecu.com
  try
    D := StrToFloat(Edit4.Text); // 把第二次输入的数字,放到 变量 D
    case C of
      '+': F := B + D;
      '-': F := B - D;
      '*': F := B * D;
      '/': F := B / D;
    end;
    Edit4.Text := FloatToStr(F); // 计算结果 放到 编辑框4 显示
    // 将光标移动到 Memo1 的末尾
    Memo1.SelStart := Length(Memo1.Text);
    // 选择长度为0,即不选择任何文本
    Memo1.SelLength := 0;
    // 在光标位置插入文本,不换行
    Memo1.SelText := '=';
    Memo1.SelText := FloatToStr(F) + #13#10; // 计算结果 放到 文本框
    C := #0; // 重置运算符
    G := 1;  // G 表示,已经有计算结果
    H := 1;  // H 表示,结果追加新数值,追加到MEMO1用的
  except
   // ShowMessage('计算错误');
  end;
end;
end.
代码没写完,不过基本也差不多了,剩下的你自己完善吧。Lazarus版本 4.0
阅读(135) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:Lazarus编程,代码区域详解

给主人留下些什么吧!~~