Nah berikut ini adalah salah satu implementasi sederhananya.
Fungsi utama yang digunakan untuk menyelesaikan hal ini adalah Readkey. Sekarang singkat, Readkey adalah sebuah fungsi untuk berguna untuk menangkap dan mengembalikan karakter dari tombol keyboard yang ditekan.
Algoritma umumnya adalah sebagai berikut. Selama user belum menekan tombol enter atau tombol lain yang anda inginkan, maka tangkap semua karakter yang diketik oleh user, tambahkan karakter tersebut ke dalam suatu variable, lalu tampilkan karakter *.
Baik, sekarang kita coba untuk mengimplementasikannya ke dalam program. Seperti biasa, silahkan buat project baru berupa aplikasi console. Kali ini saya memilih tipe Simple program.
Hal pertama-tama yang perlu anda tambahkan adalah menambahkan unit crt ke dalam uses. Hal ini dikarenakan kita akan sedikit beroperasi dengan layar dan keyboard. Untuk informasi lebih lengkap tentang unit crt, silahkan cek langsung ke dokumentasinya.
program Project1;
uses crt;
begin
end.
Kemudian tambahkan 2 buah variable yang masing-masing berfungsi untuk menampung password dengan tipe string, dan menampung karakter hasil Readkey dengan tipe char.program Project1;
uses crt;
var
pass : String = '';
ch : char = #0;
begin
end.
Pada bagian awal tampilan program, silahkan anda berkreasi sesuai dengan yang anda inginkan. Contohnya adalah seperti di bawah ini.
begin
writeln('Contoh aplikasi password');
writeln('========================');
write('Password : ');
end.
Kemudian, sesuai dengan algoritma yang kita tulis di atas, maka kita memerlukan sebuah looping yang dapat dilakukan dengan repeat until maupun while do. Kali ini kita coba dengan menggunakan while do.
while true do
begin
// baca semua tombol yang diketikkan user
ch :=ReadKey;
// jika user menekan tombol return, maka hentikan looping
if (ch=#13) then
break;
end;
Potongan kode di atas artinya adalah, lakukan looping terus (selama true), sampai user menekan tombol return/enter (kode ascii-nya adalah 13). Selama itu, baca tombol yang ditekan user ke dalam suatu variable, dalam hal ini adalah variable ch. Untuk keluar dari looping di atas, kita menggunakan procedure Break.Selanjutnya, tambahkan statement untuk menyimpan karakter yang diketikkan user ke dalam password, dan tampikan karakter *.
if (ch=#13) then
break
else
begin
// tambahkan karakter yang diketikkan user ke dalam
// variable password
pass :=pass + ch;
// tampaikan karakter * ke layar
write('*')
end;
Pada bagian akhir, tambahkan sedikit informasi untuk menampilkan password untuk menunjukkan apakah program sudah betul dalam menyimpan password.
writeln();
writeln('Password anda : ',pass);
Sampai di sini, program sudah 90% selesai. Silahkan build aplikasi anda dan coba jalankan.
Kenapa baru 90%, karena program ini masih bermasalah yaitu jika user menekan tombol backspace, bukannya menghapus karakter paling akhir di layar akan tetapi malah tetap menambah karakter baru.
Oleh karena itu, kita perlu memodifikasi program di atas agar dapat membaca karakter backspace yang kode ASCII-nya adalah 8 . Pada saat user menekan tombol backspace, maka huruf terakhir dai password akan dihapus sekaligus menghapus karakter * terakhir dari layar.
if (ch=#13) then
break
else
begin
// jika user menekan tombol backspace, maka hapus karakter
// terakhir dari password dan * dari layar
// kode ASCII backspace adalah 8
if (ch=#8) then
begin
// jika semua karakter sudah terhapus
// jangan lakukan apapun, cukup skip ke next loop
if (Length(pass)=0) then
continue;
// hapus karakter terakhir dari password
// INGAT, di pascal, index string dimulai dari 1, bukan dari 0
Delete(pass,Length(pass),1);
// tulis karakter backspace ke layar
// agar kursor bergerak 1 karakter ke kiri
write(ch);
// hapus karakter * terakhir di layar
ClrEol;
// lanjutkan next looping
Continue;
end;
// tambahkan karakter yang diketikkan user ke dalam
// variable password
pass :=pass + ch;
// tampaikan karakter * ke layar
write('*')
end;
Hal yang sedikit tricky adalah bagaimana menghapus karakter * terakhir dari layar. Kuncinya adalah, menulis karakter backspace ke layar dengan write dimana akan membuat cursor bergerak 1 kotak/karakter ke kiri. Kemudian menghapus karakter dari posisi kursor terakhir sampai dengan akhir baris dengan ClrEof.
ClrEol clears the current line, starting from the cursor position, to the end of the window. The cursor doesn't moveSilahkan coba build lagi, kemudian coba lagi. Kali ini dengan kombinasi tombol backspace.
Dengan ini maka program ini sudah selesai. Berikut ini adalah kode lengkapnya.
program Project1;
uses crt;
var
pass : String = '';
ch : char = #0;
begin
writeln('Contoh aplikasi password');
writeln('========================');
write('Password : ');
while true do
begin
// baca semua tombol yang diketikkan user
ch :=ReadKey;
// jika user menekan tombol return, maka hentikan looping
if (ch=#13) then
break
else
begin
// jika user menekan tombol backspace, maka hapus karakter
// terakhir dari password dan layar
// kode ASCII backspace adalah 8
if (ch=#8) then
begin
// jika semua karakter sudah terhapus
// jangan lakukan apapun, cukup skip ke next loop
if (Length(pass)=0) then
continue;
// hapus karakter terakhir dari password
// INGAT, di pascal, index string dimulai dari 1, bukan dari 0
Delete(pass,Length(pass),1);
// tulis karakter backspace ke layar
// agar kursor bergerak 1 karakter ke kiri
write(ch);
// hapus karakter * terakhir di layar
ClrEol;
// lanjutkan next looping
Continue;
end;
// tambahkan karakter yang diketikkan user ke dalam
// variable password
pass :=pass + ch;
// tampaikan karakter * ke layar
write('*')
end;
end;
writeln();
writeln('Password anda : ',pass);
end.
Silahkan anda lakukan optimasi atau modifikasi atau penyesuaian yang anda rasa perlu. Misalkan dengan mengganti looping dari while menjadi repeat.
Sekian tip/trik kali ini, semoga yang sedikit ini bermanfaat.
Source code.