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

📄 comput.pas

📁 delphi的学习资料
💻 PAS
字号:
unit Comput;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons, ExtCtrls;
type
  TfmA3 = class(TForm)
    gboxColor: TGroupBox;   gboxStyl: TGroupBox;
    rbtnR: TRadioButton;    rbtnG: TRadioButton;    rbtnB: TRadioButton;
    ckbBold: TCheckBox;     ckbItali: TCheckBox;
    edtD1: TEdit;      edtD2: TEdit;
    edtRes: TEdit;
    cmbOp: TComboBox;
    btnDo: TBitBtn;
    LbAnsw: TLabel;
    Panel1: TPanel;    Label1: TLabel;    Label2: TLabel;
    Label3: TLabel;    Label4: TLabel;
    procedure FormActivate(Sender: TObject);
    procedure cmbOpChange(Sender: TObject);
    procedure btnDoClick(Sender: TObject);
    procedure edtD_KeyPress(Sender: TObject; var Key: Char);
    procedure edtD_Change(Sender: TObject);
    procedure edtResEnter(Sender: TObject);
    procedure edtResExit(Sender: TObject);
    procedure rbtn_chk_Click(Sender: TObject);
  private    { Private declarations }
    procedure Init();         //
    procedure QuestDo();      //
    procedure SetFont();      //
  public     { Public declarations }
  end;
var
  fmA3: TfmA3;
const T=True;   F=False;

///////////////////////////////////////////////////////////////////
implementation
{$R *.DFM}

procedure TfmA3.Init();
begin
  LbAnsw.Visible:=F;     btnDo.Enabled:=F;
end;

procedure TfmA3.QuestDo();
var IsFill: Boolean;  //必要的Edit是否填有数据
begin
  if cmbOp.Text = '^2' then
    IsFill:=(Trim(edtD1.Text)<>'') and (Trim(edtRes.Text)<>'')
  else
    IsFill:=(Trim(edtD1.Text)<>'') and (Trim(edtD2.Text)<>'') and (Trim(edtRes.Text)<>'');
  btnDo.Enabled:=IsFill;    //本句的作用 ???
end;

procedure TfmA3.SetFont();
begin
  if rbtnR.Checked then
    LbAnsw.Font.Color:=clRed
  else
    if rbtnG.Checked then
      LbAnsw.Font.Color:=clGreen
    else
      LbAnsw.Font.Color:=clBlue;

  LbAnsw.Font.Style:=[];
  if ckbBold.Checked then
    LbAnsw.Font.Style:=LbAnsw.Font.Style+[fsBold];
  if ckbItali.Checked then
    LbAnsw.Font.Style:=LbAnsw.Font.Style+[fsItalic];
  LbAnsw.Refresh;   // 刷新 LbAnsw 的文字
end;

procedure TfmA3.FormActivate(Sender: TObject);
begin
  LbAnsw.Visible:=F;    btnDo.Enabled:=F;     rbtnR.Checked:=T;
  cmbOp.ItemIndex:=2;   //本句的作用 ???
  edtD1.Text:='';   edtD2.Text:='';   edtRes.Text:='';
  edtD1.SetFocus;   // 强迫 edtD1 得到焦点
end;

procedure TfmA3.cmbOpChange(Sender: TObject);
begin
  LbAnsw.Visible:=F;
  QuestDo();
  edtD2.Visible:=(cmbOp.Text <> '^2');  //???
end;

procedure TfmA3.edtResEnter(Sender: TObject);
begin
  edtRes.Text:='';
end;

procedure TfmA3.btnDoClick(Sender: TObject);
var
  d1, d2: Single;   //操作数
  res: Single;      //运算结果
  Op: Char;         //运算符
begin
  d1:=StrToInt(Trim(edtD1.Text));
  if cmbOp.Text <> '^2' then
    d2:=StrToInt(Trim(edtD2.Text));
  Op:=cmbOp.Text[1];    //***
  case Op of
    '+': res:=d1+d2;
    '-': res:=d1-d2;
    '*': res:=d1*d2;
    '/': res:=d1/d2;
    '^': res:=d1*d1;
  end;
  LbAnsw.Visible:=T;
  if FormatFloat('#0.#',strToFloat(Trim(edtRes.Text)))=FormatFloat('#0.#',res) then
    LbAnsw.Caption:='正确'
  else
    LbAnsw.Caption:='错! 答案应为:' + FormatFloat('#0.#',res);
end;

// 3个 Edit 共用
procedure TfmA3.edtD_KeyPress(Sender: TObject; var Key: Char);
begin
  if (Key=#13) then
    Perform(WM_NextDLGCTL,0,0)  // 焦点转移
  else
    if not (Key in [ '0'..'9','-','.',#8{退格键}]) then
      Key:=#0;
end;

// 3个 RadioButton 及 2个CheckBod 共用
procedure TfmA3.rbtn_chk_Click(Sender: TObject);
begin
  SetFont();
end;

// Edit内容变化时触发。    3个 Edit 共用
procedure TfmA3.edtD_Change(Sender: TObject);
begin
  Init();
  QuestDo();
end;

procedure TfmA3.edtResExit(Sender: TObject);
begin
  if btnDo.Enabled then
    btnDoClick(Self);     // 用语句模拟点击 btnDo
end;


end.

⌨️ 快捷键说明

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