Seluruh sistem operasi dalam komputer sebenarnya menggunakan kombinasi bilangan biner yaitu 0 (nol) dan 1 (satu), proses tersebut kemudian dinamakan proses digital. Komponen TChart mendukung pembuatan grafik untuk sinyal digital model ini.
Buka kembali project TChart dari artikel terdahulu atau jika tidak punya download TChart Source Code ver.1.8 dan segera ekstrak di komputer kamu.. sebelum membukanya, buat dulu driver ODBC untuk database linked (baca artikel Menampilkan Database dalam Grafik, di bagian awal artikel ini ada tulisan tentang cara membuat driver ODBC). Sesudah itu download Digital Source Code, ekstrak di komputer kamu dan tambahkan dengan meng-klik kanan mouse pada project TChart.exe, pilih menu Add.. kemudian cari file .pas yang ingin ditambahkan seperti gambar di bawah ini
Aktifkan form fmMainTChart (unit uMainTChart), kemudian klik ganda komponen popmenu pmOtherDemo.. klik ganda menu Digital Chart.. dan tambahkan kode program seperti ini
procedure TfmMainTChart.miDigitalChartClick(Sender: TObject); begin fmDigital.ShowModal; end;
Jalankan aplikasi dengan menekan tombol Run… jika muncul pesan Form ‘fmMainTChart‘ references form ‘fmDigital’ declarated in unit ‘uDigital’ which is not in your USES list. Do you wish to add it? tekan tombol Yes. Tekan kembali tombol Run.. Jika tidak ada lagi pesan yang muncul, aplikasi telah berjalan dengan baik.
1. Inisialisasi aplikasi
Umumnya grafik untuk sinyal digital ditampilkan dalam bentuk ‘tangga’, klik ganda komponen TChart, aktifkan tab Series, kemudian pilih series (misalnya Channel 1) dan aktifkan tab Format.. Perhatikan gambar di bawah, checkbox Stairs diberi tanda ‘centang’ untuk memberi efek ‘tangga’ pada series grafik yang dipilih. Property Stairs untuk keempat series diberi tanda ‘centang’..
Pada bagian public unit uDigital, dideklarasikan variabel bRunTimer dengan tipe data Boolean, variabel ini menentukan jalan tidaknya proses simulasi data grafik. Inisialisasi beberapa property komponen TChart dan variabel bRunTimer, ditentukan dalam event OnCreate dari form fmDigital. Aktifkan form fmDigital kemudian klik ganda sel di sebelah kanan event OnCreate..
procedure TfmDigital.FormCreate(Sender: TObject); begin bRunTimer:= False; Chart1.ApplyZOrder:= chOrder.Checked; Chart1.Legend.Inverted:= True; end;
Property ApplyZOrder digunakan untuk mengontrol ketika beberapa series pada komponen TChart yang sama harus ditampilkan terpisah dalam sumbu Z yang berbeda, sehingga keempat series tidak terlihat ‘menumpuk’ tetapi ada jarak untuk masing-masing series. Property ini berlaku jika grafik ditampilkan 3D dan mempunyai lebih dari satu series. Pemberian nilai True pada property Inverted dari subtab Legend untuk membalikkan urutan legend grafik, dimulai dari series berindeks terbesar ke yang terkecil.
2. Tampilan grafik
Legend grafik ditampilkan sesuai dengan prosedur Chart1GetLegendText, klik ganda sel di sebelah kanan event OnGetLegendText dari komponen TChart..
procedure TfmDigital.Chart1GetLegendText(Sender: TCustomAxisPanel;
LegendStyle: TLegendStyle; Index: Integer; var LegendText: String);
begin
if LegendStyle = lsLastValues then
LegendText:= LegendText+' --> '+Chart1.Series[Index].Title;
end;
Teks legend grafik akan diganti jika property LegendStyle komponen TChart bernilai lsLastValues (atau checkbox chLastValues diberi tanda ‘centang’). Klik ganda checkbox chLastValues..
procedure TfmDigital.chLastValuesClick(Sender: TObject);
begin
if chLastValues.Checked then
Chart1.Legend.LegendStyle:= lsLastValues
else
Chart1.Legend.LegendStyle:= lsAuto;
end;
Property LegendStyle untuk menentukan materi mana yang akan ditampilkan dalam legend grafik. Jika diberi nilai Automatic (atau lsAuto) maka secara otomatis ‘judul’ series akan menjadi legend grafik. Dan jika diberi nilai Last Values (atau lsLastValues) maka legend grafik sesuai dengan prosedur Chart1GetLegendText di atas.
Dua prosedur untuk kedua komponen checkbox yang lain, checkbox chView untuk menampilkan grafik dalam wujud 3 Dimensi sedang checkbox chOrder untuk mengontrol ada tidaknya sumbu Z grafik. Klik ganda pada masing-masing komponen tersebut..
procedure TfmDigital.chViewClick(Sender: TObject); begin Chart1.View3D:= chView.Checked; end; procedure TfmDigital.chOrderClick(Sender: TObject); begin Chart1.ApplyZOrder:= chOrder.Checked; Chart1.Repaint; end;
3. Simulasi data
Untuk simulasi aplikasi, data sinyal digital berupa data random dengan range 2 data (0 dan 1) di-plot pada keempat series dengan menggunakan komponen timer Timer1. Klik ganda komponen tersebut..
procedure TfmDigital.Timer1Timer(Sender: TObject);
var
iGainData: Longint;
begin
for iGainData:= 0 to Chart1.SeriesCount-1 do
with Chart1.Series[iGainData] do
Add(2*iGainData+Random(2), '', clTeeColor);
with Chart1.BottomAxis do
begin
Automatic := False;
Maximum := Series1.XValues.Last;
Minimum := Maximum - 100;
end;
end;
Variabel iGainData untuk menaikkan series pada posisi tertentu sehingga keempat series tersebut tidak saling tumpang tindih. Plot data pada masing-masing series menggunakan metode Add dengan syntax :
function Add(Const AValue:Double; Const ALabel:String;
AColor:TColor):Longint; virtual;
Metode Add digunakan untuk menambahkan data pada series jika nilai sumbu horisontal grafik (x) secara otomatis ditentukan ketika nilai sumbu vertikal (y) akan di-plot. Varibel ALabel dan AColor merupakan parameter pilihan seperti pada metode AddXY.
Nilai Y grafik untuk series kedua bergeser secara vertikal sebanyak 2 (dua) kalinya. Sedang yang ketiga bergeser 4 (empat) kalinya dan yang keempat bergeser sebanyak 6 (enam) kalinya.
Kode program selanjutnya untuk menggeser grafik ke kiri setiap ada data yang di-plot dalam series. Nilai skala maksimum sumbu bawah grafik mengambil nilai terakhir yang telah di-plot dalam series. Dan range sumbu horisontal grafik yang ingin ditampilkan adalah 100 data. Kode untuk menentukan sumbu horisontal ini dapat ditulis dalam event OnAfterAdd pada keempat series.
Untuk mengendalikan bekerja/tidaknya timer simulasi data, digunakan komponen button btRun. Klik ganda komponen ini..
procedure TfmDigital.btRunClick(Sender: TObject);
begin
bRunTimer:= not bRunTimer;
Timer1.Enabled:= bRunTimer;
if bRunTimer then
btRun.Caption:= 'Stop'
else
btRun.Caption:= '&Run';
end;
Proses akan bekerja ketika variabel bRunTimer bernilai True, jika sebaliknya timer akan terhenti.
Nuwun..
Daftar download untuk artikel ini:
1. TChart Source Code ver.1.8 - 183.54 kB
2. Digital Source Code - 2.3 kB
3. TChart Application ver.1.8 - 825.36 kB


Asskum
Pak, mo tanya.
sy pny program aplikasi buat search data keluaran sensor gas. semua button bisa dioperasikan. tp ada 1 radiobutton yg klo diklik keluar message ‘acces violation at address 000.. in module project1.exe. Read of “…”. Process stopped.
berikut source codenya:
procedure TForm2.RadioButton1Click(Sender: TObject);
begin
edit2.Text:=”;
Adoquery1.SQL.Text := ‘Select jam As Waktu, metana From tb_data’;
Series1.DataSource := Adoquery1 ;
Series1.XLabelsSource := ‘Waktu’ ;
series1.YValues.ValueSource := ‘metana’ ;
adoquery1.Active :=true;
dbchart1.Title.Text.Clear;
dbchart1.Title.Text.Add(‘Grafik metana’);
end;
procedure TForm2.RadioButton2Click(Sender: TObject);
begin
edit2.Text:=”;
adoquery1.SQL.Text:=’Select jam As Waktu, karbon From tb_data’;
series1.DataSource:=adoquery1;
series1.XLabelsSource :=’waktu’;
series1.YValues.ValueSource := ‘karbon’;
adoquery1.Active := true;
dbchart1.Title.Text.Clear;
dbchart1.Title.Text.Add(‘Grafik Karbon’);
end;
procedure TForm2.RadioButton3Click(Sender: TObject);
begin
edit2.Text:=”;
Adoquery1.SQL.Text:= ‘SELECT jam as waktu, ROUND(oksigen,0) as oksigen FROM tb_data’;
Series1.DataSource := Adoquery1;
Series1.XLabelsSource := ‘Waktu’;
series1.YValues.ValueSource:=’oksigen’;
adoquery1.Active :=true;
dbchart1.Title.Text.Clear;
dbchart1.Title.Text.Add(‘Grafik Oksigen’);
end;
yg bermasalah radio button2. misal pengukuran hari ini tanggal 27-6-2011 klo diklik dan TEdit diisi tanggal2 sebelumnya,grafik bisa muncul. Tapi begitu TEdit diisi tanggal 27-6-2011, grafik tdk bs muncul dan malahan keluar message seperti di atas.Mhn sulusinya secepatnya.Urgent nich!Trims.
Karena pakai komponen yang sama (adoquery1) untuk ketiga operasi maka sebelumnya kamu harus menon-aktifkan dulu komponen tersebut sebelum mengganti perintahnya dan mengaktifkannya lagi. Ringkasnya, pada ketiga prosedur tersebut berikan kode
adoquery1.Active := false;
adoquery1.SQL.Clear;
sebelum kode adoquery1.SQL.Text:=…. Ingat ditulis di ketiga prosedur tersebut…
Sebagai catatan saya biasanya menggunakan kode adoquery1.SQL.Add(‘….’); dibandingkan dengan adoquery1.SQL.Text:= ‘…’;
Nuwun..