Delphi telah menyediakan fungsi ROUND untuk membulatkan sebuah bilangan. Dengan fungsi round ini sebuah bilangan seperti 23.4 dapat dibulatkan menjadi 23 atau 23.6 dibulatkan menjadi 24.
Sekarang bagaimana kalau kasusnya membulatkan bilangan desimal seperti 23 menjadi 20 atau 24 menjadi 25..??
Buat saja fungsi round sendiri, berikut ini saya sertakan contoh fungsi untuk membulatkan sebuah bilangan desimal.
Cara menggunakan cukup ketik CUSTOMROUND(23,'d',1) atau CUSTOMROUND(24,'u',1) dimana 'd' untuk pembulatan ke bawah dan 'u' untuk pembulatan keatas. Mudah-mudahan dengan fungsi ini bisa bermanfaat, khususnya untuk membangun aplikasi financial.
function GenerateZeros(iCount: Int64): string;
function CustomRound(rValue: Extended; cRoundType: char; iNumofDigits: Integer): Int64;
function GenerateZeros(iCount: Int64): string;
var i: Int64;
sTemp: string;
begin
i := 1;
sTemp := '';
while i <= i Count do
begin
sTemp := sTemp + '0';
i := i + 1;
end;
Result := sTemp;
end;
function CustomRound(rValue: Extended; cRoundType: char; iNumofDigits: Integer): Int64;
var sTemp, sFirstPart, sSecondPart: string;
iTemp1, iTemp2: Int64;
iFirstNumOfSecondPart: byte;
begin
//buang angka desimal
sTemp := IntToStr(Trunc(rValue));
if Length(sTemp)>iNumofDigits then
begin
sFirstPart := Copy(sTemp, 1, Length(sTemp)-iNumofDigits);
sSecondPart := Copy(sTemp, Length(sTemp)-iNumofDigits+1, iNumofDigits);
iFirstNumOfSecondPart := StrToInt(sSecondPart[1]);
if cRoundType = 'U' then
begin
if (StrToInt(sSecondPart)<>0) then
begin
if (iFirstNumOfSecondPart>=1) and (iFirstNumOfSecondPart<=5) then
begin
sSecondPart := '5' + GenerateZeros(Length(sSecondPart)-1);
end
else
if (iFirstNumOfSecondPart>=6) and (iFirstNumOfSecondPart<=9) then
begin
sFirstPart := IntToStr(StrToInt(sFirstPart)+1);
sSecondPart := GenerateZeros(Length(sSecondPart));
end;
end;
end
else
if cRoundType = 'D' then
begin
if (StrToInt(sSecondPart)<>0) then
begin
if (iFirstNumOfSecondPart>=1) and (iFirstNumOfSecondPart<=5) then
begin
sSecondPart := GenerateZeros(Length(sSecondPart));
end
else
if (iFirstNumOfSecondPart>=6) and (iFirstNumOfSecondPart<=9) then
begin
sSecondPart := '5' + GenerateZeros(Length(sSecondPart)-1);
end;
end;
end;
Result := StrToInt(sFirstPart + sSecondPart);
end
else
begin
Result := StrToInt(FormatFloat('#,#',rValue));
end;
end;
Selasa, 28 September 2010
Senin, 27 September 2010
Membuat File Help untuk aplikasi Delphi
Ketika membuat sebuah aplikasi Professional maka file Help (petunjuk online penggunaan aplikasi) merupakan bagian yang penting dan bermanfaat agar Pengguna tidak kesulitan dalam mengoperasikan aplikasi yang kita buat. Secara default komponen delphi bisa dihubungkan langsung dengan file help yang mengacu pada sebuah keyword/context ID melalui Property dari masing-masing komponen, sehingga kita bisa membuat sebuah panduan yang sangat mendetail pada aplikasi yang kita buat hanya dengan menggunakan keyword/context ID.
Walaupun sekarang ini file Help berformat *.hlp bukan lagi menjadi standard pembuatan help (digantikan *.chm), namun sayang apabila kita tidak bisa memanfaatkannya, karena untuk membuatnya sudah tersedia tool bawaan langsung dari program Delphi yang biasanya file hcw.exe terinstall pada direktori [$DELPHI]\help\tool. Ditambah program Word Processing yang professional seperti OpenOffice (MS-Word) untuk membuat file *.rtf nya.
Keuntungan aplikasi help dengan format file *.hlp
1. Mudah digunakan, karena tiap komponen2 Delphi bisa dihubungkan langsung melalui property komponennya, dengan menggunakan keyword ataupun context file help yang kita buat.
2. Sudah tersedia program pembuatnya (hcw.exe :: satu paket dengan apliksai Delphi)
3. mendukung penggunaan help context dan help keyword
4. file help relatif kecil
5. tersedia built in macro yang banyak dan bermanfaat (± 100 jenis macro), untuk memperlengkap dan memanipulasi help.
Silakan Download Project File help ini lengkap di sini.
http://www.savefile.com/files/1205245
Walaupun sekarang ini file Help berformat *.hlp bukan lagi menjadi standard pembuatan help (digantikan *.chm), namun sayang apabila kita tidak bisa memanfaatkannya, karena untuk membuatnya sudah tersedia tool bawaan langsung dari program Delphi yang biasanya file hcw.exe terinstall pada direktori [$DELPHI]\help\tool. Ditambah program Word Processing yang professional seperti OpenOffice (MS-Word) untuk membuat file *.rtf nya.
Keuntungan aplikasi help dengan format file *.hlp
1. Mudah digunakan, karena tiap komponen2 Delphi bisa dihubungkan langsung melalui property komponennya, dengan menggunakan keyword ataupun context file help yang kita buat.
2. Sudah tersedia program pembuatnya (hcw.exe :: satu paket dengan apliksai Delphi)
3. mendukung penggunaan help context dan help keyword
4. file help relatif kecil
5. tersedia built in macro yang banyak dan bermanfaat (± 100 jenis macro), untuk memperlengkap dan memanipulasi help.
Silakan Download Project File help ini lengkap di sini.
http://www.savefile.com/files/1205245
Mengakses Perangkat Luar Melalui Serial Port Menggunakan Borland Delphi
Mengenal Port di Komputer
Serial port merupakan standar interface untuk komputer, selain serial port ada juga paralel port yang dapat digunakan untuk mengakses hardware. Perbedaan antara serial dan paralel port tersebut yaitu cara port tersebut untuk mengirim dan menerima data. Serial port pada komputer sering digunakan untuk mouse (model lama), modem dan lain-lain sedangkan paralel port sering digunakan untuk printer, scanner dan lain sebagainya.
Perbedaan serial dan paralel port
Metode Pengaksesan Perangkat Luar
Disini saya akan menggolongkan metode akses perangkat luar dengan 2 (dua) golongan yaitu Aktif dan Pasif ditinjau dari komputer yang mengaksesnya.
- Aktif
Metode ini mengharuskan komputer untuk mengirim data ke perangkat luar terlebih dahulu sebelum perangkat luar mengirimkan datanya ke komputer.Data yang dikirimkan komputer dapat berupa kata atau huruf. Kata atau huruf yang akan dikirim ke perangkat luar ini tidak memiliki standar baku karena tiap perangkat luar memiliki susunan masing, untuk dapat mengetahui kata atau huruf yang akan dikirimkan dapat dilihat dalam buku manual yang telah disertakan oleh tiap perangkat. Contohnya PH meter digital, beberapa model barcode, instrumen pengendalian dan lain-lain.
- Pasif
Metode ini perangkat luarlah yang aktif mengirimkan data sedangkan komputer hanya menerima data. Contohnya mouse.
Konfigurasi
Untuk dapat mengakses perangkat lunak kita harus mengetahui terlebih dahulu konfigurasi dari perangkat luar tersebut antara lain:
- Port yang akan digunakan, komputer yang sekarang terdapat 2 port serial
- Baud rate, kecepatan data yang akan digunakan
- Data bit, bit data
- Stop bit, bit untuk memisahkan data
- Parity, bit untuk validasi data yang telah dikirim
- Flow control
Konfigurasi tiap perangkat berbeda-beda sehingga kita harus memiliki buku manual untuk dapat mengaksesnya.
Studi Kasus
Disini studi kasus yang dihadapi yaitu mengakses DO (Dissolved Oxygen) meter yaitu alat yang digunakan untuk mengetahui kadar oksigen di dalam larutan dengan konfigurasi sebagai berikut.
- Port: COM 1
- Baud Rate: 9600
- Data Bit: 8
- Stop Bit: 1
- Parity: odd
- Flow Control: software
Perangkat ini menggunakan metode aktif dengan pengaktifan data dengan huruf D (perangkat akan mengirimkan data jika komputer mengirimkan huruf D). Perangkat DO ini akan menampilkan struktur data sebagai berikut:
Data ke + spasi + nilai DO + % +'DO' + suhu + C + tanggal perangkat
Contohnya: 218 30%DO25%C08/11/04
Software yang diinginkan dapat menampilkan data pada sebuah grid dan grafik dengan interval waktu 1 detik.
Software yang akan digunakan untuk mengakses perangkat luar yaitu:
- Borland Delphi 7
- Comport, component ini bersifat freeware dan dapat Anda download pada situs www.sourceforge.net/projects/comport (besarnya sekitar 224 KB). Thank's to Dejan Crnila
Pembuatan Software
Setelah kita install Component Comport, akan terlihat seperti dibawah ini:
Design Tampilan
Langkah petama kita akan membuat procedure untuk setting konfigurasi.
procedure TForm1.Button_SettingsClick(Sender: TObject);
begin
ComPort.ShowSetupDialog;
end;
Hal tersebut akan memunculkan form sebagai berikut.
Procedure Timer
procedure TForm1.Timer1Timer(Sender: TObject);
var
Str: String;
begin
edit1.text :='';
Str := 'D';
Str := Str + #13#10;
ComPort.WriteStr(Str);
end;
Waktu pengambilan data dapat kita tempatkan pada ComboBox.
Untuk Tombol Proses
Algoritma dari event ini yaitu:
- Menghapus suluruh data yang telah ditampilkan
- Mengaktifkan comport
- Mengaktifkan timer
procedure TForm1.BitBtn1Click(Sender: TObject);
var a : integer;
begin
TabSheet2.show;
Timer1.Interval := strtoint(ComboBox1.text);
if BitBtn1.Caption = 'Proses' then
begin
if y > 0 then
for a := 1 to y do
begin
StringGrid1.Cells[0,a]:= ' ';
StringGrid1.Cells[1,a]:= ' ';
StringGrid1.Cells[2,a]:= ' ';
StringGrid1.Cells[3,a]:= ' ';
end;
y:=0;
Chart1.SeriesList.Series[0].Clear;
ComPort.Open;
Timer1.Enabled := true;
BitBtn1.Caption := 'Stop';
end
else
begin
ComPort.Close;
Timer1.Enabled := false;
BitBtn1.Caption := 'Proses'
end;
end;
Untuk menerima data dari perangkat dapat kita ambil pada event RXChart.
Algoritma dari event ini yaitu:
- Mengetahui struktur data dan mengetahui bahwa data terakhir adalah #13, #13 dipakai sebagai acuan bahwa 1 (satu) data secara keseluruhan telah terkirim
- Memecah data dan mengambil data yang kita inginkan dalam hal ini data DO dan suhu
- Menampilkan data di StringGrid dan Chart
procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer);
var
Str,dtinput,kata,data: String;
z:integer;
a,b :integer;
suhu,panas,data_piece : string;
FData,FSuhu : single;
begin
ComPort.ReadStr(Str, Count);
edit1.text := edit1.text+str;
data_com := edit1.text;
if str=#13 then
begin
dtinput := trim(edit1.Text);
a := pos(' ',dtinput);
b := pos('%',dtinput);
data := copy(dtinput,a+1,b-a-1);
Fdata := StrToFloat(trim(data));
a := pos('O',dtinput);
b := pos('C',dtinput);
suhu := copy(dtinput,a+3,b-a-4);
FSuhu := StrToFloat(trim(suhu));
inc(y);
StringGrid1.Cells[1,y]:= FormatDateTime('dd/mm/yyyy',date)+' '+FormatDateTime('hh:mm:ss',time);
StringGrid1.Cells[2,y]:= FloatToStr(Fdata);
StringGrid1.Cells[3,y]:= trim(suhu);
StringGrid1.Cells[0,y]:= inttostr(y);
if y=StringGrid1.RowCount then
StringGrid1.RowCount := StringGrid1.RowCount+1;
Label10.caption := suhu;
Chart1.SeriesList.Series[0].AddY(FData);
end;
end;
procedure make_decision(a: integer; b: string);
begin
if data = '5' then
begin
writeln('hebat banget');
writecommand('hebat sekali');
for i := 1 to 5 do
begin
a := i + n;
end;
end;
end;
Demikianlah tulisan sederhana mengenai pengaksesan serial port dengan menggunakan Borland Delphi. Semoga bermanfaat bagi Anda semua.
Serial port merupakan standar interface untuk komputer, selain serial port ada juga paralel port yang dapat digunakan untuk mengakses hardware. Perbedaan antara serial dan paralel port tersebut yaitu cara port tersebut untuk mengirim dan menerima data. Serial port pada komputer sering digunakan untuk mouse (model lama), modem dan lain-lain sedangkan paralel port sering digunakan untuk printer, scanner dan lain sebagainya.
Perbedaan serial dan paralel port
Metode Pengaksesan Perangkat Luar
Disini saya akan menggolongkan metode akses perangkat luar dengan 2 (dua) golongan yaitu Aktif dan Pasif ditinjau dari komputer yang mengaksesnya.
- Aktif
Metode ini mengharuskan komputer untuk mengirim data ke perangkat luar terlebih dahulu sebelum perangkat luar mengirimkan datanya ke komputer.Data yang dikirimkan komputer dapat berupa kata atau huruf. Kata atau huruf yang akan dikirim ke perangkat luar ini tidak memiliki standar baku karena tiap perangkat luar memiliki susunan masing, untuk dapat mengetahui kata atau huruf yang akan dikirimkan dapat dilihat dalam buku manual yang telah disertakan oleh tiap perangkat. Contohnya PH meter digital, beberapa model barcode, instrumen pengendalian dan lain-lain.
- Pasif
Metode ini perangkat luarlah yang aktif mengirimkan data sedangkan komputer hanya menerima data. Contohnya mouse.
Konfigurasi
Untuk dapat mengakses perangkat lunak kita harus mengetahui terlebih dahulu konfigurasi dari perangkat luar tersebut antara lain:
- Port yang akan digunakan, komputer yang sekarang terdapat 2 port serial
- Baud rate, kecepatan data yang akan digunakan
- Data bit, bit data
- Stop bit, bit untuk memisahkan data
- Parity, bit untuk validasi data yang telah dikirim
- Flow control
Konfigurasi tiap perangkat berbeda-beda sehingga kita harus memiliki buku manual untuk dapat mengaksesnya.
Studi Kasus
Disini studi kasus yang dihadapi yaitu mengakses DO (Dissolved Oxygen) meter yaitu alat yang digunakan untuk mengetahui kadar oksigen di dalam larutan dengan konfigurasi sebagai berikut.
- Port: COM 1
- Baud Rate: 9600
- Data Bit: 8
- Stop Bit: 1
- Parity: odd
- Flow Control: software
Perangkat ini menggunakan metode aktif dengan pengaktifan data dengan huruf D (perangkat akan mengirimkan data jika komputer mengirimkan huruf D). Perangkat DO ini akan menampilkan struktur data sebagai berikut:
Data ke + spasi + nilai DO + % +'DO' + suhu + C + tanggal perangkat
Contohnya: 218 30%DO25%C08/11/04
Software yang diinginkan dapat menampilkan data pada sebuah grid dan grafik dengan interval waktu 1 detik.
Software yang akan digunakan untuk mengakses perangkat luar yaitu:
- Borland Delphi 7
- Comport, component ini bersifat freeware dan dapat Anda download pada situs www.sourceforge.net/projects/comport (besarnya sekitar 224 KB). Thank's to Dejan Crnila
Pembuatan Software
Setelah kita install Component Comport, akan terlihat seperti dibawah ini:
Design Tampilan
Langkah petama kita akan membuat procedure untuk setting konfigurasi.
procedure TForm1.Button_SettingsClick(Sender: TObject);
begin
ComPort.ShowSetupDialog;
end;
Hal tersebut akan memunculkan form sebagai berikut.
Procedure Timer
procedure TForm1.Timer1Timer(Sender: TObject);
var
Str: String;
begin
edit1.text :='';
Str := 'D';
Str := Str + #13#10;
ComPort.WriteStr(Str);
end;
Waktu pengambilan data dapat kita tempatkan pada ComboBox.
Untuk Tombol Proses
Algoritma dari event ini yaitu:
- Menghapus suluruh data yang telah ditampilkan
- Mengaktifkan comport
- Mengaktifkan timer
procedure TForm1.BitBtn1Click(Sender: TObject);
var a : integer;
begin
TabSheet2.show;
Timer1.Interval := strtoint(ComboBox1.text);
if BitBtn1.Caption = 'Proses' then
begin
if y > 0 then
for a := 1 to y do
begin
StringGrid1.Cells[0,a]:= ' ';
StringGrid1.Cells[1,a]:= ' ';
StringGrid1.Cells[2,a]:= ' ';
StringGrid1.Cells[3,a]:= ' ';
end;
y:=0;
Chart1.SeriesList.Series[0].Clear;
ComPort.Open;
Timer1.Enabled := true;
BitBtn1.Caption := 'Stop';
end
else
begin
ComPort.Close;
Timer1.Enabled := false;
BitBtn1.Caption := 'Proses'
end;
end;
Untuk menerima data dari perangkat dapat kita ambil pada event RXChart.
Algoritma dari event ini yaitu:
- Mengetahui struktur data dan mengetahui bahwa data terakhir adalah #13, #13 dipakai sebagai acuan bahwa 1 (satu) data secara keseluruhan telah terkirim
- Memecah data dan mengambil data yang kita inginkan dalam hal ini data DO dan suhu
- Menampilkan data di StringGrid dan Chart
procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer);
var
Str,dtinput,kata,data: String;
z:integer;
a,b :integer;
suhu,panas,data_piece : string;
FData,FSuhu : single;
begin
ComPort.ReadStr(Str, Count);
edit1.text := edit1.text+str;
data_com := edit1.text;
if str=#13 then
begin
dtinput := trim(edit1.Text);
a := pos(' ',dtinput);
b := pos('%',dtinput);
data := copy(dtinput,a+1,b-a-1);
Fdata := StrToFloat(trim(data));
a := pos('O',dtinput);
b := pos('C',dtinput);
suhu := copy(dtinput,a+3,b-a-4);
FSuhu := StrToFloat(trim(suhu));
inc(y);
StringGrid1.Cells[1,y]:= FormatDateTime('dd/mm/yyyy',date)+' '+FormatDateTime('hh:mm:ss',time);
StringGrid1.Cells[2,y]:= FloatToStr(Fdata);
StringGrid1.Cells[3,y]:= trim(suhu);
StringGrid1.Cells[0,y]:= inttostr(y);
if y=StringGrid1.RowCount then
StringGrid1.RowCount := StringGrid1.RowCount+1;
Label10.caption := suhu;
Chart1.SeriesList.Series[0].AddY(FData);
end;
end;
procedure make_decision(a: integer; b: string);
begin
if data = '5' then
begin
writeln('hebat banget');
writecommand('hebat sekali');
for i := 1 to 5 do
begin
a := i + n;
end;
end;
end;
Demikianlah tulisan sederhana mengenai pengaksesan serial port dengan menggunakan Borland Delphi. Semoga bermanfaat bagi Anda semua.
Langganan:
Komentar (Atom)