Membuat Kalkulator Sederhana

Sebelum mulai membaca tutorial ini, silakan buka Lazarus dan buat project baru. Setelah project barunya tersedia, tambahkan beberapa variabel sehingga bagian var-nya seperti di bawah ini!

var
  Form1: TForm1;
  ganti_angka:Boolean;
  hasil:real=0;
  tangka:real=0;
  tanda:(tsama, ttambah, tkurang, tbagi, tkali);


Kemudian, buat tampilan seperti ini!

Jika form-nya tidak cukup untuk menempatkan tombol-tombol yang diperlukan, atur lebar dari form-nya supaya ukurannya cukup untuk menambahkan tombol-tombol tersebut. Kalian bisa melihat bentuk kursornya berubah kalau kalian meletakkan kursor di bawah kanan atau tepian lain dari form. Dari situ, kalian bisa melakukan drag and drop untuk mengubah ukuran formnya. Kalian juga bisa mengubah ukuran form dengan mengubah properti width dan height di tab properti.

Setelah form sudah berisi sekumpulan tombol dan text box, kalian bisa mengubah name-nya. Silakan ubah properti name dan properti lain sesuai dengan apa yang sudah saya sebutkan di bawah ini.
Name Jenis Caption / Text
Bilangan Textbox (Kosongkan saja)
AC Button AC
CE Button C
TSQR Button SQR
TSQRT Button SQRT
Button0 Button 0
Button1 Button 1
Button2 Button 2
Button3 Button 3
Button4 Button 4
Button5 Button 5
Button6 Button 6
Button7 Button 8
Button9 Button 9
tambah Button +
Kurang Button -
Kali Button x
Bagi Button /
Sama_dengan Button =
Koma Button .
plus_min Button +/-

Koma dan plus/min

Kalian perlu mengecek keberadaan min atau koma dengan if sebelum menambahkan koma atau tanda minus. Untuk menghapus sebagian teks dari posisi tertentu dengan panjang tertentu kalian bisa menggunakan function delete. Kalian juga bisa menggunakan setlength untuk "mengurangi" panjang text.
procedure TForm1.komaClick(Sender: TObject);
VAR S:String;
    i:integer;
    ada:Boolean=false;
begin
   s:=Bilangan.Text;
   for i:=1 to length(s) do
   begin
       if(s[i]='.')then
       begin
           ada:=true;
           break;
       end;
   end;
   if(not(ada))then s:=s+'.';
   Bilangan.Text:=s;
end;

procedure TForm1.plus_minClick(Sender: TObject);
var s:string;
begin
    s:=Bilangan.Text;
    if(s<>'0') then
    begin
      if(s[1]<>'-')then
      begin
          s:='-'+s;
          Bilangan.Text:=s;
      end
      else
      begin
          delete(s, 1, 1);
          Bilangan.Text:=s;
      end;
    end;
end;

Menambahkan Angka saat Tombol Diklik

Conteng properti ReadOnly dari textbox-nya supaya nilainya true dan teks tidak bisa diketikkan secara langsung di dalamnya.

procedure TForm1.Button1Click(Sender: TObject);
var s:string;
begin
  s:=Bilangan.Text;
  if(length(s)<12)then
  begin
      s:=s+'1';
      Bilangan.Text:=s;
  end;
end;
Coba double click pada semua tombol angka. Copas dan timpa bagian di dari begin hingga "end;" pada contoh di atas. Selain itu, tambahkan juga "var s:string" sebelum begin.

Ganti angka setelah 's+' sesuai dengan angka yang ada di tombolnya. Misalnya, untuk Button2, ganti 's+1' dengan 's+2', berikan kode program berikut ini!

procedure TForm1.Button1Click(Sender: TObject);
var s:string;
begin
  s:=Bilangan.Text;
  if(length(s)<12)then
  begin
      s:=s+'2';
      Bilangan.Text:=s;
  end;
end;
Kalau kode programnya sudah benar, seharusnya kalian bisa klik tombol angka untuk menambahkan angkanya di textbox.

Operator Aritmetika

Untuk  operator aritmetika, gunakan kode program di bawah ini :

procedure TForm1.kurangClick(Sender: TObject);
var s:string;
    tmp:integer;
begin
    s:=Bilangan.Text;
    tangka:=StrToFloat(s);
    if(ganti_angka)then
    begin
      case tanda of
          ttambah:
          Begin
              hasil:=hasil+tangka;
              s:=floattostr(hasil);
              Bilangan.Text:=s;
          end;
          tkurang:
          Begin
              hasil:=hasil-tangka;
              s:=floattostr(hasil);
              Bilangan.Text:=s;
          end;

          tkali:
          Begin
              hasil:=hasil*tangka;
              s:=floattostr(hasil);
              Bilangan.Text:=s;
          end;

          tbagi:
          Begin
              hasil:=hasil / tangka;
              s:=floattostr(hasil);
              Bilangan.Text:=s;
          end;
          tsama:
          Begin
              hasil:=tangka;
          end;
      end;
      ganti_angka:=false;
    end;
    tanda:=tkurang;
end;

procedure TForm1.tambahClick(Sender: TObject);
var s:string;
    tmp:integer;
begin
    s:=Bilangan.Text;
    tangka:=StrToFloat(s);
    if(ganti_angka)then
    begin
      case tanda of
          ttambah:
          Begin
              hasil:=hasil+tangka;
              s:=floattostr(hasil);
              Bilangan.Text:=s;
          end;
          tkurang:
          Begin
              hasil:=hasil-tangka;
              s:=floattostr(hasil);
              Bilangan.Text:=s;
          end;

          tkali:
          Begin
              hasil:=hasil*tangka;
              s:=floattostr(hasil);
              Bilangan.Text:=s;
          end;

          tbagi:
          Begin
              hasil:=hasil / tangka;
              s:=floattostr(hasil);
              Bilangan.Text:=s;
          end;
          tsama:
          Begin
              hasil:=tangka;
          end;
      end;
      ganti_angka:=false;
    end;
    tanda:=ttambah;
end;

procedure TForm1.bagiClick(Sender: TObject);
var s:string;
    tmp:integer;
begin
    s:=Bilangan.Text;
    tangka:=StrToFloat(s);
    if(ganti_angka)then
    begin
      case tanda of
          ttambah:
          Begin
              hasil:=hasil+tangka;
              s:=floattostr(hasil);
              Bilangan.Text:=s;
          end;
          tkurang:
          Begin
              hasil:=hasil-tangka;
              s:=floattostr(hasil);
              Bilangan.Text:=s;
          end;

          tkali:
          Begin
              hasil:=hasil*tangka;
              s:=floattostr(hasil);
              Bilangan.Text:=s;
          end;

          tbagi:
          Begin
              hasil:=hasil / tangka;
              s:=floattostr(hasil);
              Bilangan.Text:=s;
          end;
          tsama:
          Begin
              hasil:=tangka;
          end;
      end;
      ganti_angka:=false;
    end;
    tanda:=tbagi;
end;

procedure TForm1.kaliClick(Sender: TObject);
var s:string;
    tmp:integer;
begin
    s:=Bilangan.Text;
    tangka:=StrToFloat(s);
    if(ganti_angka)then
    begin
      case tanda of
          ttambah:
          Begin
              hasil:=hasil+tangka;
              s:=floattostr(hasil);
              Bilangan.Text:=s;
          end;
          tkurang:
          Begin
              hasil:=hasil-tangka;
              s:=floattostr(hasil);
              Bilangan.Text:=s;
          end;

          tkali:
          Begin
              hasil:=hasil*tangka;
              s:=floattostr(hasil);
              Bilangan.Text:=s;
          end;

          tbagi:
          Begin
              hasil:=hasil / tangka;
              s:=floattostr(hasil);
              Bilangan.Text:=s;
          end;
          tsama:
          Begin
              hasil:=tangka;
          end;
      end;
      ganti_angka:=false;
    end;
    tanda:=tkali;
end;

procedure TForm1.TSQRTClick(Sender: TObject);
VAR S:String;
begin
   s:=Bilangan.Text;
   tangka:=StrToFloat(s);
   tangka:=sqrt(tangka);
   s:=FloatToStr(tangka);
   Bilangan.Text:=s;
end;

procedure TForm1.TSQRClick(Sender: TObject);
var s:string;
    tmp:integer;
begin
   s:=Bilangan.Text;
   tangka:=StrToFloat(s);
   tangka:=sqr(tangka);
   s:=FloatToStr(tangka);
   Bilangan.Text:=s;
end;
Tambahkan isi setiap prosedur satu persatu setelah melakukan double click pada tombol di form. Kalau kode programnya sudah benar, kalian seharusnya bisa menggunakan tombol untuk operator aritmetikanya.


Menghapus Text

Saya rasa saya tidak perlu menuliskan "event" untuk semua tombol. Selanjutnya, double click tombol Backspace (yaitu tombol yang berisi "<="). Ubah kode program dalam procedure 'TForm.BackspaceClick' yang terlihat agar terlihat seperti di bawah ini sehingga tombol tersebut berguna untuk menghapus text.

procedure TForm1.BackspaceClick(Sender: TObject);
var s:string;
begin
  s:=Bilangan.Text;
  if(length(s)>1)then
    begin
        SetLength(s, Length(s)-1);
        Bilangan.Text:=s;
    end;
end;

Untuk AC dan CE-nya, kalian bisa menambahkan kode program di bawah ini.

procedure TForm1.ACClick(Sender: TObject);
begin
   hasil:=0;
   tanda=0;
   tangka:=0;
   Bilangan.Text:='0';
end;

procedure TForm1.CEClick(Sender: TObject);
begin
   Bilangan.Text:='0';
end;

Daripada pusing dan capek ngetik, mungkin lebih baik download source code-nya dengan klik di sini.