iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 3
0
自我挑戰組

delphi 菜鳥入門日記系列 第 3

delphi 菜鳥入門日記-Day3簡易計算機!?

嗨~大家好!我是Kiang很抱歉這麼晚才PO文,因為上班有點忙碌,/images/emoticon/emoticon13.gif
所以回到家後才開始弄今天的東西,不過先預告一下~我可能會有一兩天中斷,
最近要出去玩、出差等等/images/emoticon/emoticon07.gif,事情有點多哈哈哈但我會盡量提前準備好內容的!!

繼昨天講解完三個小元件後,今天就是要來練習啦!!
總而言之挑了一個可以很難也可以很簡單的東西,

計算機

太久沒寫這種東西了,害我腦袋偶然間當機,/images/emoticon/emoticon46.gif
其實他還蠻考驗程式邏輯的,但我這裡只提供簡易的版本,
在此之後希望大家可以自行深入研究唷!!/images/emoticon/emoticon01.gif

總之先想辦法把介面拉出來(不知道要長怎樣的請拿出手機按出計算機)
https://ithelp.ithome.com.tw/upload/images/20171206/2010754458sBvPuDUe.png

然後把每按鍵事件先點出來,加上我們的程式碼

procedure TForm5.btn1Click(Sender: TObject);
begin
  edt1.Text:=edt1.Text+'1';     //在原有的文字+上我們的數字,並且顯示
end;

以此類推把你的1,2,3,4,5,6,7,8,9,0,+,-,x,/,通通加上去~
然後恭喜你完成了1/3的東西了/images/emoticon/emoticon34.gif
但接下來就是要考驗你的邏輯了!!

先幫我這樣做
https://ithelp.ithome.com.tw/upload/images/20171206/201075449hYSTU6uDX.png

OnShow那邊幫我點擊兩下,然後回到程式畫面

https://ithelp.ithome.com.tw/upload/images/20171206/20107544P3LYZVTIND.png

StringList是一個蠻好用的字串陣列,可以去網路上多多研究使用方法唷!!

procedure TForm5.FormShow(Sender: TObject);  //當視窗顯示時執行
begin
  NumL:=TStringList.Create; //啟動我們的Stringlist
end;

procedure TForm5.CalCheck;   //確認是否已有運算元的存在
begin
  if (Pos('+',edt1.text)>0) or      //判斷位置>0就是存在
     (Pos('-',edt1.text)>0) or
     (Pos('*',edt1.text)>0) or
     (Pos('/',edt1.text)>0)
  then
    NumC:=1
  else
    NumC:=0;
end;



procedure TForm5.CalResult;
var
  num1,num2:Integer;    //區域變數
begin
  if (Pos('+',edt1.text)>0) then	//判斷位置>0就是存在
    if Pos('+',edt1.text)<>Length(edt1.Text) then	//位置不在最後
      NumL.Delimiter:='+'
    else
      edt1.Text:=Copy(edt1.Text,1,Length(edt1.Text)-1);	//如果在最後則砍到最後面的運算值
  if (Pos('-',edt1.text)>0) then
    if Pos('-',edt1.text)<>Length(edt1.Text) then
      NumL.Delimiter:='-'
    else
      edt1.Text:=Copy(edt1.Text,1,Length(edt1.Text)-1);
  if (Pos('*',edt1.text)>0) then
    if Pos('*',edt1.text)<>Length(edt1.Text) then
      NumL.Delimiter:='*'
    else
      edt1.Text:=Copy(edt1.Text,1,Length(edt1.Text)-1);
  if (Pos('/',edt1.text)>0) then
    if Pos('/',edt1.text)<>Length(edt1.Text) then
      NumL.Delimiter:='/'
    else
      edt1.Text:=Copy(edt1.Text,1,Length(edt1.Text)-1);

  NumL.DelimitedText:=edt1.Text;

  if (NumL.Count<2) then	//判斷無第二個數值就停止
    Exit;

  num1:=StrToInt(NumL[0]);
  num2:=StrToInt(NumL[1]);
  if (Pos('+',edt1.text)>0) then
    edt1.Text:=IntToStr(num1+num2);
  if (Pos('-',edt1.text)>0) then
    edt1.Text:=IntToStr(num1-num2);
  if (Pos('*',edt1.text)>0) then
    edt1.Text:=IntToStr(num1*num2);
  if (Pos('/',edt1.text)>0) then
  begin
    edt1.Text:=FloatToStr(num1/num2);
  end;

涵式成後完,把我們+-x/的按鍵事件給打開來~

procedure TForm5.btn11Click(Sender: TObject);
begin
  CalCheck;    //先確認
  if NumC=1 then   //判斷是否存在運值
  begin
    CalResult;   //執行
  end;
  edt1.Text:=edt1.Text+'+'; 
end;

每個都給事件都補齊上去後!!
我們就大功告成啦!!!~/images/emoticon/emoticon58.gif
接下來就是F9去試試看你的簡易計算機囉!!
不曉得我這樣打和上註解有沒有人看不懂呢!?
如果看不懂的話~請在下方留言告訴我,我在添加更詳細的說明/images/emoticon/emoticon12.gif
那我們下次見囉!!See you Guys!


上一篇
delphi 菜鳥入門日記-Day2簡單的小元件
下一篇
delphi 菜鳥入門日記-Day4計算機補充說明
系列文
delphi 菜鳥入門日記4

1 則留言

0
海綿寶寶
iT邦超人 1 級 ‧ 2017-12-07 09:00:41

不過先預告一下~我可能會有一兩天中斷,

這裡要提醒你一下
鐵人賽的規則是「連續」30天
如果你中斷的話
就會從第1天開始計算

我要留言

立即登入留言