|
The Form design,
calculator
Create Delphi 8 Windows Forn - calculator
Classes used in this
Form:
System.Drawing, System.Collections, System.ComponentModel,
System.Windows.Forms, System.Data, System.Globalization
Type of Controls used in this
Form: ListBox, TextBox,
Button
- On the File menu ,
click New. and then click Windows Form
- New File
name WinForm.pas appears. (Form name - TWinForm)
- On the View menu ,
click Object Inspector. In Object Inspector
modify the following ...
1, |
WinForm.pas - the File name created
|
|
|
Old |
New |
File
Name: |
WinForm.pas |
calculator.,pas |
|
|
|
|
2. |
TWinForm- Form name created
|
|
|
Old |
New |
Caption:
Name:
Icon:
Menu:
Maximizebox:
StartPosition:
Size: Text: |
WinForm
TWinForm
(Icon)
(none)
True
WindowsDefaultLocation
300,300 WinForm |
About
TAbout
(Icon)
(none)
False
CenterScreen
368,332 calculator
... |
|
|
|
|
3. |
Save this
file ... On the
File menu , click Save |
|
|
|
|
|
1. |
The calculator
design |
|
|
3. |
From the Tool palette add these
controls ...
(From the View menu, click Tool
palette)
. 1 ListBox contol, 1
TextBox contol, 21 Button contols
|
|
- Add the ListBox
control - ListBox1, Object
inspector
Name: Size
: |
ListBox1 176,
172 | |
- Add the TextBox
control - CalcField, Object
inspector:
Name: Font: Size: Text: |
CalcField Times
New Roman, 8.25pt 184,
20 | |
- Add 21 Button
controls
- Btndetail , Object
inspector
Name: BackColor: Size: Text: |
Btndetail Silver 50,
20 detail | |
- CalcPlus -
Size: 40,
32
- CalcSub -
Size: 40,
32
- CalcMul -
Size: 40,
32
- CalcDiv
- Size: 40,
32
- CalcDec
- Size: 40,
32
- CalcSign
- Size: 40,
32
- CalcRes -
Size: 40,
32
- CalcCan
- Size: 50,
32
- CalcCE
- Size: 50,
32
- CalcBS
- Size:
96, 32
- Calc0
... Calc9 (
10 Button controls
)
- Size: 40,
32
| | | |
|
The
Event and codes in Delphi ... - calculator file, the codes after modification
...
The
text
Code is
red
color, the codes added
manuel |
|
unit calculator;
interface
uses
System.Drawing, System.Collections, System.ComponentModel,
System.Windows.Forms, System.Data, System.Globalization;
type
Tcalculator = class(System.Windows.Forms.Form)
strict protected
/// <summary>
/// Clean up any resources being used.
/// </summary>
procedure Dispose(Disposing: Boolean); override;
private
procedure CalcNum_Click(sender:
System.Object; e: System.EventArgs);
procedure FormatEditField(NewChar: string);
procedure Reset();
{ Private Declarations }
public
constructor Create;
class function Showcalculator:
System.Windows.Forms.DialogResult;
end;
[assembly: RuntimeRequiredAttribute(TypeOf(Tcalculator))]
implementation
uses
mainform;
var
mOp1: Double; //Previously input operand.
mOp2: Double; //Previously input operand.
mNumOps: Integer; //Number of operands.
mLastInput: string; //Indicate type of last keypress
event.
mOpFlag: string; //Indicate pending operation.
mOpPrev: string; //Previous operation
mMinus: string; //Minus operator "-"
mDecValue: string;
mAllowBackSpace: Boolean; //Allow backspace
FirstFlag: Boolean;
Windows Form Designer
generated code
|
procedure Tcalculator.Dispose(Disposing: Boolean);
begin
if Disposing then
begin
if Components <> nil then
Components.Dispose();
end;
inherited Dispose(Disposing);
end;
constructor Tcalculator.Create;
begin
inherited Create;
//
// Required for Windows Form Designer support
//
InitializeComponent;
//
// TODO: Add any constructor code after
InitializeComponent call
//
Self.Width := Self.CalcCan.Left +
Self.CalcCan.Width +
System.Convert.ToInt16(Self.Calc6.Left* 3/2) - 2;
Self.Btndetail.Text := 'detail';
Self.Btndetail.Left := Self.CalcCan.Left +
Self.CalcCan.Width - Self.Btndetail.Width;
Self.Btndetail.Top := Self.CalcField.Top +
Self.CalcField.Height - Self.Btndetail.Height;
Self.ListBox1.Top := Self.Btndetail.Top;
Self.ListBox1.Left := Self.CalcCan.Left +
Self.CalcCan.Width + Self.Calc6.Left
;//System.Convert.ToInt16((Self.Calc6.Left * 5 / 4));
//Get decimal separator based upon machine local settings.
// mDecValue :=
System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator;
// Self.CalcDec.Text := mDecValue;
// mMinus := '-';
end;
class function
Tcalculator.Showcalculator:
System.Windows.Forms.DialogResult;
begin
with Tcalculator.Create do
Result := ShowDialog;
end;
procedure Tcalculator.Tcalculator_Activated(sender:
System.Object; e: System.EventArgs);
begin
//Get decimal separator based upon machine local settings.
mDecValue :=
System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator;
Self.CalcDec.Text := mDecValue;
mMinus := '-';
Self.ListBox1.Items.Clear();
FirstFlag := true;
end;
procedure Tcalculator.Tcalculator_Load(sender:
System.Object; e: System.EventArgs);
begin
end;
procedure Tcalculator.Calc0_Click(sender: System.Object;
e: System.EventArgs);
begin
CalcNum_Click(sender, e);
end;
procedure Tcalculator.CalcNum_Click(sender: System.Object;
e: System.EventArgs);
var
SelButton: System.Windows.Forms.Button;
begin
SelButton := System.Windows.Forms.Button.Create;
mAllowBackSpace := true; //now allow backspace
if (mLastInput <> 'Operation.Operand') then
self.CalcField.Text := '0';
SelButton := System.Windows.Forms.Button(sender);
FormatEditField(SelButton.Text);
mLastInput := 'Operation.Operand';
end;
procedure Tcalculator.FormatEditField(NewChar: string);
var
Value:string;
begin
Value := self.CalcField.Text;
//Determine if there are more than one .'s
if (NewChar = mDecValue) then
begin
//If it's found.
self.richTextData.Text := Value;
if (self.richTextData.Find(mDecValue) > -1) then //Don't
do anything.
exit;
Value := Value + mDecValue;
end
else
begin
if (Value = '0') then
begin
Value := NewChar;
end
else
begin
Value := Value + NewChar;
end;
end;
self.CalcField.Text := Value;
end;
procedure Tcalculator.Calc1_Click(sender: System.Object;
e: System.EventArgs);
begin
CalcNum_Click(sender, e);
end;
procedure Tcalculator.Calc2_Click(sender: System.Object;
e: System.EventArgs);
begin
CalcNum_Click(sender, e);
end;
procedure Tcalculator.Calc3_Click(sender: System.Object;
e: System.EventArgs);
begin
CalcNum_Click(sender, e);
end;
procedure Tcalculator.Calc4_Click(sender: System.Object;
e: System.EventArgs);
begin
CalcNum_Click(sender, e);
end;
procedure Tcalculator.Calc5_Click(sender: System.Object;
e: System.EventArgs);
begin
CalcNum_Click(sender, e);
end;
procedure Tcalculator.Calc6_Click(sender: System.Object;
e: System.EventArgs);
begin
CalcNum_Click(sender, e);
end;
procedure Tcalculator.Calc7_Click(sender: System.Object;
e: System.EventArgs);
begin
CalcNum_Click(sender, e);
end;
procedure Tcalculator.Calc8_Click(sender: System.Object;
e: System.EventArgs);
begin
CalcNum_Click(sender, e);
end;
procedure Tcalculator.Calc9_Click(sender: System.Object;
e: System.EventArgs);
begin
CalcNum_Click(sender, e);
end;
procedure Tcalculator.CalcDec_Click(sender: System.Object;
e: System.EventArgs);
begin
CalcNum_Click(sender, e);
end;
procedure Tcalculator.CalcPlus_Click(sender: System.Object;
e: System.EventArgs);
begin
CalcRes_Click(sender, e);
end;
//Handles +, -, *, /, =
procedure Tcalculator.CalcRes_Click(sender: System.Object;
e: System.EventArgs);
var
ButtonPressed: System.Windows.Forms.Button;
vstr: String;
vline: String;
i: Integer;
begin
ButtonPressed := System.Windows.Forms.Button.Create;
//Now do not allow backspace(CalcBS) actions after the
result has been
//calculated and displayed.
mAllowBackSpace := false;
if (mLastInput = 'Operation.Operand') then mNumOps :=
mNumOps + 1;
// case of
if (mNumOps = 1) then mOp1 :=
System.Double.Parse(Self.CalcField.Text);
if (mNumOps = 2) then
begin
mOp2 := System.Double.Parse(Self.CalcField.Text);
if (mOpFlag = '+') then mOp1 := mOp1 + mOp2;
if (mOpFlag = '-') then mOp1 := mOp1 - mOp2;
if (mOpFlag = '*') then mOp1 := mOp1 * mOp2;
if (mOpFlag = '/') then
begin
if (mOp2 = 0) then
messagebox.Show('Can t divide by zero! ...',
mainform.Tmainform.Title, MessageBoxButtons.OK,
System.Windows.Forms.MessageBoxIcon.Information)
else
mOp1 := mOp1 / mOp2;
end;
if (mOpFlag = '=') then mOp1 := mOp2;
//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
if (mOpFlag = '=') then
begin
end
else
begin
Self.ListBox1.Items.Add(mOpFlag);
if (mNumOps = 2) then
Self.ListBox1.Items.Add(' ' + mOp2.ToString());
end;
//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Self.CalcField.Text := mOp1.ToString();
mNumOps := 1;
//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
if (mOpFlag = '=') then
begin
vstr := ' ' + '.......... new operation ..........';
Self.ListBox1.Items.Add(vstr);
vstr := ' ' + mOp1.ToString() ;
Self.ListBox1.Items.Add(vstr);
Self.ListBox1.SelectedIndex := ListBox1.Items.Count - 1;
end
else
begin
vstr := mOp1.ToString();
for i := 0 to ((vstr.Length * 2) - 4) do
begin
vline := vline + '-';
end;
Self.ListBox1.Items.Add(' ' + vline);
Self.ListBox1.Items.Add(' ' +
System.Convert.ToString(mOp1));
Self.ListBox1.SelectedIndex := ListBox1.Items.Count - 1;
end
//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
end;
mLastInput := 'Operation.Operator';
mOpPrev := mOpFlag;
ButtonPressed := System.Windows.Forms.Button(sender);
mOpFlag := ButtonPressed.Text;
//
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
if (FirstFlag = true) then
begin
vstr := ' ' + '.......... new operation ..........';
Self.ListBox1.Items.Add(vstr);
if (mNumOps = 1) then
begin
vstr := ' ' + System.Convert.ToString(mOp1);
Self.ListBox1.Items.Add(vstr);
end
end;
FirstFlag := false;
//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
end;
procedure Tcalculator.CalcMul_Click(sender: System.Object;
e: System.EventArgs);
begin
CalcRes_Click(sender, e);
end;
procedure Tcalculator.CalcDiv_Click(sender: System.Object;
e: System.EventArgs);
begin
CalcRes_Click(sender, e);
end;
procedure Tcalculator.CalcSub_Click(sender: System.Object;
e: System.EventArgs);
begin
CalcRes_Click(sender, e);
end;
//+/- click event.
procedure Tcalculator.CalcSign_Click(sender: System.Object;
e: System.EventArgs);
begin
if (mLastInput <> 'Operation.Operand') then
Self.CalcField.Text := '0'
else
begin
if (Self.CalcField.Text.Substring(0, 1) = mMinus) then
Self.CalcField.Text := self.CalcField.Text.Substring(1)
else
begin
if (Self.CalcField.Text <> '0') then
Self.CalcField.Text := mMinus + self.CalcField.Text;
end;
end;
mLastInput := 'Operation.Operand';
end;
procedure Tcalculator.CalcCan_Click(sender: System.Object;
e: System.EventArgs);
begin
Reset();
//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Self.ListBox1.Items.Clear();
FirstFlag := true;
//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
end;
procedure Tcalculator.Reset();
begin
mOp1 := 0;
mOp2 := 0;
mNumOps := 0;
mLastInput := 'Operation.None';
mOpFlag := '';
mOpPrev := '';
Self.CalcField.Text := '0';
mAllowBackSpace := true;
end;
//Cancel entry click event.
procedure Tcalculator.CalcCE_Click(sender: System.Object;
e: System.EventArgs);
begin
if (mLastInput = 'Operation.Operand') then
Self.CalcField.Text := '0'
else
begin
if (mLastInput = 'Operation.Operator') then
mOpFlag := mOpPrev;
end;
mLastInput := 'Operation.CE';
//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Self.ListBox1.Items.Clear();
FirstFlag := true;
//'''''''''''''''''''''''''''''''''''''''''''''''''''''''''
end;
procedure Tcalculator.CalcBS_Click(sender: System.Object;
e: System.EventArgs);
var
Value: string;
begin
//Check if we can backspace before removing items from
CalcField.text.
if (mAllowBackSpace = true) then
begin
Value := Self.CalcField.Text;
if (Value.Length > 1) then
Value := Value.Substring(0, (Value.Length - 1))
else
Value := '0';
//if all we are left is the minus sign, reset.
if (Value = '-') then Value := '0';
Self.CalcField.Text := Value;
end;
end;
procedure Tcalculator.btndetail_Click(sender:
System.Object; e: System.EventArgs);
begin
if (Self.Btndetail.Text = 'detail') then
begin
Self.Width := Self.CalcCan.Left + Self.CalcCan.Width +
System.Convert.ToInt16(Self.Calc6.Left* 5/2) +
Self.ListBox1.Width;
Self.Btndetail.Text := 'hide';
end
else
begin
if (Self.Btndetail.Text = 'hide') then
begin
Self.Width := Self.CalcCan.Left + Self.CalcCan.Width +
System.Convert.ToInt16(Self.Calc6.Left* 3/2) - 2;
Self.Btndetail.Text := 'detail';
end
end;
end;
end.
| | |
|
|