📄 comput.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 + -