<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Together.. &#187; Aplikasi Sederhana</title>
	<atom:link href="http://www.havetogether.com/category/komputer/delphi-tutorial/aplikasi-sederhana/feed" rel="self" type="application/rss+xml" />
	<link>http://www.havetogether.com</link>
	<description></description>
	<lastBuildDate>Tue, 04 Oct 2011 08:13:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Koneksi Database MySQL dengan Delphi</title>
		<link>http://www.havetogether.com/koneksi-database-mysql-dengan-delphi.html</link>
		<comments>http://www.havetogether.com/koneksi-database-mysql-dengan-delphi.html#comments</comments>
		<pubDate>Thu, 17 Mar 2011 12:13:06 +0000</pubDate>
		<dc:creator>rumono</dc:creator>
				<category><![CDATA[Aplikasi Sederhana]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[aplikasi delphi]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[dbexpress]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[odbc]]></category>

		<guid isPermaLink="false">http://www.havetogether.com/?p=468</guid>
		<description><![CDATA[Database MySQL merupakan sistem basis data gratisan yang cukup handal, banyak digunakan baik personal maupun instansi, dalam aplikasi berbasis internet, intranet maupun lokal..]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Database MySQL merupakan sistem basis data gratisan yang cukup handal, banyak digunakan baik personal maupun instansi, dalam aplikasi berbasis internet, intranet maupun lokal. Tidak sedikit <em>programmer </em>yang membuat aplikasi database memakai MySQL sebagai basis datanya.</p>
<p style="text-align: justify;">Dalam aplikasi database yang dibangun dengan Borland Delphi 6, untuk mengakses database MySQL kamu bisa menggunakan semua komponen database seperti ADO, BDE maupun dbExpress. Koneksi database MySQL dengan komponen BDE tidak jauh berbeda dengan komponen ADO atau dbExpress. Sebagai contoh download <a href="http://www.havetogether.com/downloads/ConnMySQL_Code.zip" title="Downloaded 495 hits"><span style="text-decoration: underline;">Connect MySQL Source Code</span></a>, ekstrak dalam komputer kamu dan buka dengan Delphi. <em>Source code</em> untuk aplikasi ini memakai database <strong>linked</strong>, buat dulu database tersebut sekalian driver ODBC-nya, caranya baca kembali artikel <a title="Membuat Driver ODBC untuk Database MySQL" href="http://www.havetogether.com/membuat-driver-odbc-untuk-database-mysql.html" target="_blank">Membuat Driver ODBC untuk Database MySQL</a><strong> </strong></p>
<p style="text-align: justify;"><strong>Koneksi dengan komponen ADO</strong></p>
<p style="text-align: justify;">Biasanya koneksi database dengan ADO melalui driver ODBC, komponen yang digunakan tidak sebanyak jika dengan komponen dbExpress, perhatikan gambar di bawah ini</p>
<p style="text-align: justify;"><a href="http://www.havetogether.com/wp-content/uploads/2011/03/connmysql1_componentuses.jpg"><img class="alignnone size-full wp-image-1970" title="Perbandingan komponen ADO dan dbExpress yang digunakan" src="http://www.havetogether.com/wp-content/uploads/2011/03/connmysql1_componentuses.jpg" alt="" width="561" height="322" /></a></p>
<p style="text-align: justify;">Komponen TADOConnection berfungsi untuk koneksi dengan sumber data, bisa langsung dari file databasenya (misalnya database Ms Access) atau melalui driver ODBC. Pastikan driver ODBC untuk database MySQL telah dibuat, dan untuk mengubah koneksinya klik ganda komponen bernama <strong>adocConnMySQL </strong>sehingga muncul kotak dialog seperti di bawah ini, klik tombol Build.. kemudian lakukan langkah-langkahnya</p>
<p style="text-align: justify;"><a href="http://www.havetogether.com/wp-content/uploads/2011/03/connmysql2_adoconnect.jpg"><img class="alignnone size-full wp-image-1975" title="Koneksi ADO melalui driver ODBC" src="http://www.havetogether.com/wp-content/uploads/2011/03/connmysql2_adoconnect.jpg" alt="" width="583" height="350" /></a></p>
<p style="text-align: justify;">Untuk menguji koneksi bisa dilakukan atau tidak tekan tombol Test Connection, jika berhasil akan muncul pesan &#8220;<em>Test connection succeeded</em>&#8220;.</p>
<p>Pada <em>source code</em>, perintah koneksi dengan komponen ADO dieksekusi ketika pengguna meng-klik menu koneksi -&gt; ODBC-ADO, dan dikodekan dalam prosedur <strong>miODBCClick </strong>seperti di bawah ini</p>
<pre style="padding-left: 30px;"><strong>procedure </strong>TfmConnMySQL.miODBCClick(Sender: TObject);
<strong>begin</strong>
  <strong>if </strong>sqlcConnMySQL.Connected = True <strong>then</strong>
    sqlcConnMySQL.Close;

  dsCustomer.DataSet:= tbCustomer;
  dsOrders.DataSet:= tbOrders;
  Series1.DataSource:= tbOrders;

  adocConnMySQL.Open;
  <strong>if </strong>adocConnMySQL.Connected = True <strong>then</strong>
  <strong>begin</strong>
    tbCustomer.Open;
    tbOrders.Open;
    fmConnMySQL.Caption:= 'Koneksi Database MySQL dengan ODBC-ADO';
  <strong>end</strong>;
<strong>end</strong>;
</pre>
<p style="text-align: justify;">Karena aplikasi ini bisa koneksi database dengan menggunakan dua komponen, yaitu komponen ADO dan dbExpress, salah satu komponen harus di-<em>disconnect</em>. Komponen <strong>sqlcConnMySQL</strong>, fungsinya sebagai media koneksi dengan komponen dbExpress, jika dalam kondisi <em>connect </em>maka di&#8217;tutup&#8217; dulu. Untuk menampilkan data hasil koneksi dengan ADO, pastikan <em>property </em><strong>DataSet </strong>dari komponen TDBGrid, <strong>dsCustomer </strong>dan <strong>dsOrders</strong>, diisi dengan komponen TADOTable yang bersesuaian. Setelah itu baru koneksi dengan komponen <strong>adocConnMySQL</strong> dilakukan berikut komponen TADOTable-nya.</p>
<p style="text-align: justify;"><strong>Koneksi dengan komponen dbExpress</strong></p>
<p style="text-align: justify;">Klik ganda komponen <strong>sqlcConnMySQL</strong>, di layar monitor akan muncul kotak dialog seperti gambar di bawah.. kemudian coba klik tombol Test Connection, disimbolkan dengan tanda &#8216;conteng&#8217;</p>
<p style="text-align: justify;"><a href="http://www.havetogether.com/wp-content/uploads/2011/03/connmysql3_dbexfailconn.jpg"><img class="alignnone size-full wp-image-1996" title="Koneksi dbExpress gagal" src="http://www.havetogether.com/wp-content/uploads/2011/03/connmysql3_dbexfailconn.jpg" alt="" width="564" height="263" /></a></p>
<p style="text-align: justify;">Jika muncul pesan seperti di atas, artinya Borland Delphi kamu belum bisa koneksi langsung dengan database MySQL. Cari file <strong>dbexpmys.dll</strong>, biasanya di C:\Program Files\Borland\Delphi6\Bin, kemudian <em>copy </em>file tersebut ke C:\Windows\system. Tekan tombol Continue jika muncul pesan &#8220;<em>You&#8217;ll need to provide administrator permission to copy to this folder</em>&#8220;. Setelah itu buka file <strong>dbxdrivers.ini</strong>, di folder  C:\Program Files\Common Files\Borland Shared\DBExpress, dengan notepad. Bagian di bawah [MYSQL] harus seperti berikut, biasanya sih sama..</p>
<pre style="text-align: justify; padding-left: 30px;">[MYSQL]
GetDriverFunc=getSQLDriverMYSQL
LibraryName=dbexpmys.dll
VendorLib=LIBMYSQL.dll
BlobSize=-1
Database=DBNAME
ErrorResourceFile=
HostName=ServerName
LocaleCode=0000
Password=password
User_Name=user</pre>
<p style="text-align: justify;">Perhatikan pada kode <strong>VendorLib=LIBMYSQL.dll</strong>, artinya di <em>system </em>kamu harus ada file dll tersebut, file ini sudah saya sertakan pada <em>source code</em> yang tadi kamu download. Copy file <strong>libmySQL.dll</strong> ke folder C:\Windows\system, jika muncul pesan  &#8220;<em>You&#8217;ll need to provide administrator permission to copy to this folder</em>&#8221; tekan tombol Continue.</p>
<p style="text-align: justify;">Sekarang klik ganda lagi komponen <strong>sqlcConnMySQL</strong>, dan tekan tombol Test Connection. Pesan &#8220;<em>Succesfully Connected</em>&#8221; seharusnya muncul di layar monitor kamu. Mulai sekarang Borland Delphi kamu sudah bisa koneksi langsung dengan database MySQL, dan bisa membuat aplikasi lain dengan komponen dbExpress tanpa melakukan langkah-langkah di atas.</p>
<p style="text-align: justify;">Seperti koneksi dengan komponen ADO, untuk koneksi dengan komponen dbExpress juga menggunakan menu. <em>Source code</em>-nya pun tidak jauh berbeda</p>
<pre style="padding-left: 30px;"><strong>procedure </strong>TfmConnMySQL.midbExpressClick(Sender: TObject);
<strong>begin</strong>
  <strong>if </strong>adocConnMySQL.Connected = True <strong>then</strong>
    adocConnMySQL.Close;

  dsCustomer.DataSet:= cdsCustomer;
  dsOrders.DataSet:= cdsConnDetail;
  Series1.DataSource:= cdsConnDetail;

  sqlcConnMySQL.Open;
  cdsCustomer.Active:= sqlcConnMySQL.Connected;
  fmConnMySQL.Caption:= 'Koneksi Database MySQL dengan dbExpress';
<strong>end</strong>;</pre>
<p style="text-align: justify;"><strong>Menampilkan data dari database MySQL dalam grafik</strong></p>
<p style="text-align: justify;">Tema ini sebenarnya sudah dibahas dalam artikel <a title="Menampilkan Database dalam Grafik" href="http://www.havetogether.com/menampilkan-database-dalam-grafik.html" target="_blank">Menampilkan Database dalam Grafik</a>, kamu bisa baca kembali artikel ini. Bedanya, kali ini diletakkan dalam tab tersendiri, tab grafik, dan karena ada dua jenis koneksi maka nilai <em>property </em><strong>DataSource </strong>dari komponen <strong>Series1</strong> ditentukan dalam prosedur <strong>miODBCClick </strong>dan <strong>midbExpressClick</strong>.</p>
<p style="text-align: justify;">Sedikit tambahan biasanya setiap saya membuat aplikasi yang melibatkan komponen untuk akses data, misal TADOTable atau TClientDataset, saya selalu memastikan komponen-komponen ini dalam keadaan tidak aktif ketika aplikasi ini di&#8217;tutup&#8217;.  Sehingga <em>memory </em>komputer terbebaskan dan tidak dipenuhi oleh operasi yang sudah tidak diperlukan lagi. Perintah ini dikodekan dalam <em>events </em><strong>OnClose </strong>pada <em>form </em><strong>fmConnMySQL</strong></p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmConnMySQL.FormClose(Sender: TObject;
 <strong>var </strong>Action: TCloseAction);
<strong>begin</strong>
  adocConnMySQL.Close;
  tbCustomer.Close;
  tbOrders.Close;
  sqlcConnMySQL.Close;
  cdsCustomer.Close;
  cdsConnDetail.Close;
<strong>end</strong>;</pre>
<p style="text-align: justify;">Nuwun..</p>
<p style="text-align: justify;">Daftar  download untuk artikel ini:<br />
1. <a href="http://www.havetogether.com/downloads/ConnMySQL_Code.zip" title="Downloaded 495 hits"><span style="text-decoration: underline;">Connect MySQL Source Code - 73.87 kB</span></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.havetogether.com/koneksi-database-mysql-dengan-delphi.html/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Membuat About yang Atraktif</title>
		<link>http://www.havetogether.com/membuat-about-yang-atraktif.html</link>
		<comments>http://www.havetogether.com/membuat-about-yang-atraktif.html#comments</comments>
		<pubDate>Sat, 03 Apr 2010 22:09:22 +0000</pubDate>
		<dc:creator>rumono</dc:creator>
				<category><![CDATA[Aplikasi Sederhana]]></category>
		<category><![CDATA[aplikasi delphi]]></category>

		<guid isPermaLink="false">http://www.havetogether.com/?p=403</guid>
		<description><![CDATA[Setiap aplikasi biasanya dilengkapi dengan about yang merupakan informasi ringkas tentang aplikasi atau credit title dari aplikasi..]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Setiap aplikasi biasanya dilengkapi dengan <em>about </em>yang merupakan informasi ringkas tentang aplikasi atau <em>credit title</em> dari aplikasi. Untuk membuat <em>form about </em>yang menarik, kamu bisa memanfaatkan komponen-komponen standar Delphi.</p>
<p style="text-align: justify;">Buka kembali project TChart dari artikel terdahulu atau jika tidak punya download <a href="http://www.havetogether.com/downloads/TChart_Code.1.9.zip" title="Downloaded 49 hits"><span style="text-decoration: underline;">TChart Source Code ver.1.9</span></a> dan segera ekstrak di komputer kamu.. sebelum membukanya, buat dulu driver  ODBC untuk database linked (baca artikel <a href="../menampilkan-database-dalam-grafik.html" target="_blank">Menampilkan  Database dalam Grafik</a>, di bagian awal artikel ini ada tulisan tentang cara membuat driver ODBC).  Sesudah itu download <a href="http://www.havetogether.com/downloads/About_Code.zip" title="Downloaded 65 hits"><span style="text-decoration: underline;">About Source Code</span></a>, 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</p>
<p style="text-align: justify;"><a href="http://www.havetogether.com/wp-content/uploads/2010/11/about1_addproject.jpg"><img class="alignnone size-full wp-image-1622" title="Menambahkan unit uAbout ke project TChart" src="http://www.havetogether.com/wp-content/uploads/2010/11/about1_addproject.jpg" alt="" width="579" height="300" /></a></p>
<p style="text-align: justify;">Untuk memanggilnya melalui <em>form </em>fmMainTChart (unit uMainTChart),  klik ganda pada sel di sebelah kanan <em>event </em>OnClick komponen label1.. dan tambahkan kode program seperti ini</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmMainTChart.Label1Click(Sender: TObject);
<strong>begin</strong>
  Chart4.BevelOuter:= bvRaised;
  fmAbout.ShowModal;
<strong>end</strong>;</pre>
<p style="text-align: justify;">Jalankan aplikasi dengan menekan tombol Run… jika muncul pesan <em>Form    ‘fmMainTChart‘ references form ‘fmAbout&#8217; declarated in unit  ‘uAbout’   which is not in your USES list. Do you wish to add it?</em> tekan tombol   Yes. Tekan kembali tombol Run..</p>
<p style="text-align: justify;">Ketika <em>form about </em>ini  ditampilkan, teks informasi akan bergerak naik per baris sampai baris terakhir setelah itu baris pertama akan dimunculkan lagi demikian seterusnya. Efek ini hanya menggunakan komponen <em>memo </em>Memo1 dan komponen <em>timer </em>Timer1. Tuliskan isi teks <em>about </em>pada <em>property </em>Lines komponen Memo1, kemudian klik ganda komponen Timer1..</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmAbout.Timer1Timer(Sender: TObject);
<strong>begin</strong>
  Memo1.Top := Memo1.Top-1;
  <strong>if </strong>Memo1.Top = -Memo1.Height <strong>then</strong>
    Memo1.Top := Panel1.Height;
<strong>end</strong>;</pre>
<p style="text-align: justify;">Selama komponen Timer1 dijalankan (aktif) maka posisi atas komponen Memo1 (<em>property </em>Top) secara terus menerus digeser vertikal sebanyak 1 pixel. Dan pada saat posisi atasnya mencapai batas maksimal komponen Memo1 (<em>property</em> Height) maka posisi atasnya akan dikembalikan ke keadaan semula (sama dengan nilai <em>property </em>Height komponen Panel1), demikian seterusnya. Jika teks yang bergerak terlalu lambat/cepat, kamu bisa mengubah nilai <em>property</em> Interval komponen Timer1.</p>
<p style="text-align: justify;">Komponen Timer1 ini akan aktif ketika <em>form about </em>ditampilkan dan tidak aktif ketika <em>form about </em>ditutup. Klik ganda sel di sebelah kanan <em>event </em>OnShow dan OnClose dari <em>form </em>fmAbout..</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmAbout.FormShow(Sender: TObject);
<strong>begin</strong>
  Memo1.Top := Panel1.Height;
  Timer1.Enabled := True;
<strong>end</strong>;

<strong>procedure </strong>TfmAbout.FormClose(Sender: TObject; <strong>var </strong>Action: TCloseAction);
<strong>begin</strong>
  Timer1.Enabled := False;
<strong>end</strong>;</pre>
<p style="text-align: justify;">Posisi awal komponen Memo1 pada saat <em>form about </em>ditampilkan sama dengan nilai <em>property </em>Height komponen Panel1.</p>
<p style="text-align: justify;">Nuwun..</p>
<p style="text-align: justify;">Daftar  download untuk artikel ini:<br />
1. <a href="http://www.havetogether.com/downloads/TChart_Code.1.9.zip" title="Downloaded 49 hits"><span style="text-decoration: underline;">TChart Source Code ver.1.9 - 185.88 kB</span></a><br />
2. <a href="http://www.havetogether.com/downloads/About_Code.zip" title="Downloaded 65 hits"><span style="text-decoration: underline;">About Source Code - 12.66 kB</span></a><br />
3. <a href="http://www.havetogether.com/downloads/TChart_Application.1.9.zip" title="Downloaded 42 hits"><span style="text-decoration: underline;">TChart Application ver.1.9 - 838.75 kB</span></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.havetogether.com/membuat-about-yang-atraktif.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Grafik Sinyal Digital</title>
		<link>http://www.havetogether.com/grafik-sinyal-digital.html</link>
		<comments>http://www.havetogether.com/grafik-sinyal-digital.html#comments</comments>
		<pubDate>Sat, 03 Apr 2010 21:05:46 +0000</pubDate>
		<dc:creator>rumono</dc:creator>
				<category><![CDATA[Aplikasi Sederhana]]></category>
		<category><![CDATA[aplikasi delphi]]></category>
		<category><![CDATA[chart]]></category>
		<category><![CDATA[grafik]]></category>

		<guid isPermaLink="false">http://www.havetogether.com/?p=399</guid>
		<description><![CDATA[Seluruh sistem operasi dalam komputer sebenarnya menggunakan kombinasi bilangan biner yaitu 0 (nol) dan 1 (satu), proses tersebut kemudian dinamakan proses digital..]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">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.</p>
<p style="text-align: justify;">Buka kembali project TChart dari artikel terdahulu atau jika tidak punya download <a href="http://www.havetogether.com/downloads/TChart_Code.1.8.zip" title="Downloaded 38 hits"><span style="text-decoration: underline;">TChart Source Code ver.1.8</span></a> dan segera ekstrak di komputer kamu.. sebelum membukanya, buat dulu driver  ODBC untuk database linked (baca artikel <a href="../menampilkan-database-dalam-grafik.html" target="_blank">Menampilkan  Database dalam Grafik</a>, di bagian awal artikel ini ada tulisan tentang cara membuat driver ODBC).  Sesudah itu download <a href="http://www.havetogether.com/downloads/Digital_Code.zip" title="Downloaded 28 hits"><span style="text-decoration: underline;">Digital Source Code</span></a>, 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</p>
<p style="text-align: justify;"><a href="http://www.havetogether.com/wp-content/uploads/2010/11/digital1_addproject.jpg"><img class="alignnone size-full wp-image-1510" title="Menambahkan unit uDigital ke project TChart" src="http://www.havetogether.com/wp-content/uploads/2010/11/digital1_addproject.jpg" alt="" width="590" height="293" /></a></p>
<p style="text-align: justify;">Aktifkan <em>form </em>fmMainTChart (unit uMainTChart), kemudian klik  ganda  komponen <em>popmenu</em> pmOtherDemo.. klik ganda menu Digital Chart.. dan tambahkan kode program seperti ini</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmMainTChart.miDigitalChartClick(Sender: TObject);
<strong>begin</strong>
  fmDigital.ShowModal;
<strong>end</strong>;</pre>
<p style="text-align: justify;">Jalankan aplikasi dengan menekan tombol Run… jika muncul pesan <em>Form   ‘fmMainTChart‘ references form ‘fmDigital’ declarated in unit ‘uDigital’   which is not in your USES list. Do you wish to add it?</em> tekan tombol   Yes. Tekan kembali tombol Run.. Jika tidak ada lagi pesan yang muncul, aplikasi telah berjalan dengan baik.</p>
<p style="text-align: justify;">1. <strong>Inisialisasi aplikasi</strong></p>
<p style="text-align: justify;">Umumnya grafik untuk sinyal digital ditampilkan dalam bentuk &#8216;tangga&#8217;, klik ganda komponen TChart, aktifkan tab Series, kemudian pilih series (misalnya Channel 1) dan aktifkan tab Format.. Perhatikan gambar di bawah, <em>checkbox</em> Stairs diberi tanda &#8216;centang&#8217; untuk memberi efek &#8216;tangga&#8217; pada series grafik yang dipilih. <em>Property </em>Stairs untuk keempat series diberi tanda &#8216;centang&#8217;..</p>
<p><a href="http://www.havetogether.com/wp-content/uploads/2010/11/digital2_stairs.jpg"><img class="size-full wp-image-1511 alignnone" title="checkbox Stairs" src="http://www.havetogether.com/wp-content/uploads/2010/11/digital2_stairs.jpg" alt="" width="431" height="352" /></a></p>
<p style="text-align: justify;">Pada bagian <strong>public </strong>unit uDigital, dideklarasikan variabel <strong>bRunTimer </strong>dengan tipe data Boolean, variabel ini menentukan jalan tidaknya proses simulasi data grafik. Inisialisasi beberapa <em>property </em>komponen TChart dan variabel <strong>bRunTimer</strong>, ditentukan dalam <em>event </em>OnCreate dari form fmDigital. Aktifkan form fmDigital kemudian klik ganda sel di sebelah kanan <em>event </em>OnCreate..</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmDigital.FormCreate(Sender: TObject);
<strong>begin</strong>
  bRunTimer:= False;
  Chart1.ApplyZOrder:= chOrder.Checked;
  Chart1.Legend.Inverted:= True;
<strong>end</strong>;</pre>
<p style="text-align: justify;"><em>Property </em>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 &#8216;menumpuk&#8217; tetapi ada jarak untuk masing-masing series. <em>Property</em> ini berlaku jika grafik ditampilkan 3D dan mempunyai lebih dari satu series. Pemberian nilai True pada <em>property </em>Inverted dari subtab Legend untuk membalikkan urutan <em>legend </em>grafik, dimulai dari series berindeks terbesar ke yang terkecil.</p>
<p style="text-align: justify;">2. <strong>Tampilan grafik </strong></p>
<p style="text-align: justify;"><em>Legend </em>grafik ditampilkan sesuai dengan prosedur Chart1GetLegendText, klik ganda sel di sebelah kanan <em>event</em> OnGetLegendText dari komponen TChart..</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmDigital.Chart1GetLegendText(Sender: TCustomAxisPanel;
 LegendStyle: TLegendStyle; Index: Integer; <strong>var </strong>LegendText: <strong>String</strong>);
<strong>begin</strong>
  <strong>if </strong>LegendStyle = lsLastValues <strong>then</strong>
    LegendText:= LegendText+' --&gt; '+Chart1.Series[Index].Title;
<strong>end</strong>;</pre>
<p style="text-align: justify;">Teks <em>legend </em>grafik akan diganti jika <em>property </em>LegendStyle komponen TChart bernilai lsLastValues (atau <em>checkbox </em>chLastValues diberi tanda &#8216;centang&#8217;). Klik ganda <em>checkbox </em>chLastValues..</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmDigital.chLastValuesClick(Sender: TObject);
<strong>begin</strong>
  <strong>if </strong>chLastValues.Checked <strong>then</strong>
    Chart1.Legend.LegendStyle:= lsLastValues
  <strong>else</strong>
    Chart1.Legend.LegendStyle:= lsAuto;
<strong>end</strong>;</pre>
<p style="text-align: justify;"><em>Property </em>LegendStyle untuk menentukan materi mana yang akan ditampilkan dalam <em>legend </em>grafik. Jika diberi nilai <strong>Automatic </strong>(atau lsAuto) maka secara otomatis &#8216;judul&#8217; series akan menjadi <em>legend </em>grafik. Dan jika diberi nilai <strong>Last Values </strong>(atau lsLastValues) maka <em>legend </em>grafik sesuai dengan prosedur Chart1GetLegendText di atas.</p>
<p style="text-align: justify;">Dua prosedur untuk kedua komponen <em>checkbox </em>yang lain, <em>checkbox </em>chView untuk menampilkan grafik dalam wujud 3 Dimensi sedang <em>checkbox </em>chOrder untuk mengontrol ada tidaknya sumbu Z grafik. Klik ganda pada masing-masing komponen tersebut..</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmDigital.chViewClick(Sender: TObject);
<strong>begin</strong>
  Chart1.View3D:= chView.Checked;
<strong>end</strong>;

<strong>procedure </strong>TfmDigital.chOrderClick(Sender: TObject);
<strong>begin</strong>
  Chart1.ApplyZOrder:= chOrder.Checked;
  Chart1.Repaint;
<strong>end</strong>;
</pre>
<p style="text-align: justify;">3. <strong>Simulasi data</strong></p>
<p style="text-align: justify;">Untuk simulasi aplikasi, data sinyal digital berupa data random dengan range 2 data (0 dan 1) di-<em>plot </em>pada keempat series dengan menggunakan komponen <em>timer </em>Timer1. Klik ganda komponen tersebut..</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmDigital.Timer1Timer(Sender: TObject);
<strong>var</strong>
  iGainData: Longint;
<strong>begin</strong>
  <strong>for </strong>iGainData:= 0 <strong>to </strong>Chart1.SeriesCount-1 <strong>do</strong>
  <strong>with </strong>Chart1.Series[iGainData] <strong>do</strong>
    Add(2*iGainData+Random(2), '', clTeeColor);

  <strong>with </strong>Chart1.BottomAxis <strong>do </strong>
  <strong>begin</strong>
    Automatic := False;
    Maximum := Series1.XValues.Last;
    Minimum := Maximum - 100;
  <strong>end</strong>;
<strong>end</strong>;</pre>
<p style="text-align: justify;">Variabel <strong>iGainData </strong>untuk menaikkan series pada posisi tertentu sehingga keempat series tersebut tidak saling tumpang tindih. <em>Plot </em>data pada masing-masing series menggunakan metode <strong>Add </strong>dengan syntax :</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>function </strong>Add(<strong>Const </strong>AValue:Double; <strong>Const </strong>ALabel:<strong>String</strong>;
             AColor:TColor):Longint; virtual;</pre>
<p style="text-align: justify;">Metode <strong>Add </strong>digunakan untuk menambahkan data pada series jika nilai sumbu horisontal grafik (x) secara otomatis ditentukan ketika nilai sumbu vertikal (y) akan di-<em>plot</em>. Varibel <strong>ALabel </strong>dan <strong>AColor </strong>merupakan parameter pilihan seperti pada metode <strong>AddXY</strong>.</p>
<p style="text-align: justify;">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.</p>
<p style="text-align: justify;">Kode program selanjutnya untuk menggeser grafik ke kiri setiap ada data yang di-<em>plot </em>dalam series. Nilai skala maksimum sumbu bawah grafik mengambil nilai terakhir yang telah di-<em>plot </em>dalam series. Dan range sumbu horisontal grafik yang ingin ditampilkan adalah 100 data. Kode untuk menentukan sumbu horisontal ini dapat ditulis dalam <em>event</em> OnAfterAdd pada keempat series.</p>
<p style="text-align: justify;">Untuk mengendalikan bekerja/tidaknya <em>timer </em>simulasi data, digunakan komponen <em>button </em>btRun. Klik ganda komponen ini..</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmDigital.btRunClick(Sender: TObject);
<strong>begin</strong>
  bRunTimer:= <strong>not </strong>bRunTimer;
  Timer1.Enabled:= bRunTimer;
  <strong>if </strong>bRunTimer <strong>then</strong>
    btRun.Caption:= 'Stop'
  <strong>else</strong>
    btRun.Caption:= '&amp;Run';
<strong>end</strong>;</pre>
<p style="text-align: justify;">Proses akan bekerja ketika variabel <strong>bRunTimer </strong>bernilai True, jika sebaliknya <em>timer </em>akan terhenti.</p>
<p style="text-align: justify;">Nuwun..</p>
<p style="text-align: justify;">Daftar  download untuk artikel ini:<br />
1. <a href="http://www.havetogether.com/downloads/TChart_Code.1.8.zip" title="Downloaded 38 hits"><span style="text-decoration: underline;">TChart Source Code ver.1.8 - 183.54 kB</span></a><br />
2. <a href="http://www.havetogether.com/downloads/Digital_Code.zip" title="Downloaded 28 hits"><span style="text-decoration: underline;">Digital Source Code - 2.3 kB</span></a><br />
3. <a href="http://www.havetogether.com/downloads/TChart_Application.1.8.zip" title="Downloaded 25 hits"><span style="text-decoration: underline;">TChart Application ver.1.8 - 825.36 kB</span></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.havetogether.com/grafik-sinyal-digital.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Grafik Mini yang Resizeable dan Garis Divider</title>
		<link>http://www.havetogether.com/grafik-mini-yang-resizeable-dan-garis-divider.html</link>
		<comments>http://www.havetogether.com/grafik-mini-yang-resizeable-dan-garis-divider.html#comments</comments>
		<pubDate>Mon, 22 Mar 2010 21:48:36 +0000</pubDate>
		<dc:creator>rumono</dc:creator>
				<category><![CDATA[Aplikasi Sederhana]]></category>
		<category><![CDATA[aplikasi delphi]]></category>
		<category><![CDATA[chart]]></category>
		<category><![CDATA[grafik]]></category>

		<guid isPermaLink="false">http://www.havetogether.com/?p=375</guid>
		<description><![CDATA[Ukuran grafik dapat diubah sesuai dengan perubahan ukuran form induknya, dan garis divider merupakan garis pembatas antara titik baru dan titik lama yang di-plot dalam grafik..]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Ukuran grafik dapat diubah sesuai dengan perubahan ukuran <em>form </em>induknya, dan garis <em>divider </em>merupakan garis pembatas antara titik baru dan titik lama yang di-<em>plot</em> dalam grafik.</p>
<p style="text-align: justify;">Masih dalam project TChart, buka kembali atau jika tidak punya download <a href="http://www.havetogether.com/downloads/TChart_Code.1.7.zip" title="Downloaded 24 hits"><span style="text-decoration: underline;">TChart Source Code ver.1.7</span></a> dan segera ekstrak di komputer kamu.. sebelumnya buat dulu driver  ODBC database linked (baca artikel <a href="../menampilkan-database-dalam-grafik.html" target="_blank">Menampilkan  Database dalam Grafik</a>, terutama tentang cara membuat driver ODBC).  Sesudah itu download <a href="http://www.havetogether.com/downloads/Mini_Code.zip" title="Downloaded 23 hits"><span style="text-decoration: underline;">Mini Chart Source Code</span></a>, ekstrak di komputer kamu dan tambahkan pada project  TChart.. Caranya klik kanan mouse  pada project TChart.exe, pilih menu Add..  kemudian cari  file .pas yang ingin  ditambahkan seperti gambar di bawah  ini</p>
<p style="text-align: justify;"><a href="http://www.havetogether.com/wp-content/uploads/2010/11/mini1_addproject.jpg"><img class="alignnone size-full wp-image-1432" title="Menambahkan unit uMini ke project TChart" src="http://www.havetogether.com/wp-content/uploads/2010/11/mini1_addproject.jpg" alt="" width="590" height="261" /></a></p>
<p style="text-align: justify;">Aktifkan <em>form </em>fmMainTChart (unit uMainTChart), kemudian klik ganda  komponen <em>popmenu</em> pmOtherDemo.. klik ganda menu Mini Small Charts.. dan tambahkan kode program seperti ini</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmMainTChart.miMiniSmallChartsClick(Sender: TObject);
<strong>begin</strong>
  fmMini.ShowModal;
<strong>end</strong>;
</pre>
<p style="text-align: justify;">Jalankan aplikasi dengan menekan tombol Run… jika muncul pesan <em>Form  ‘fmMainTChart‘ references form ‘fmMini’ declarated in unit ‘uMini’  which is not in your USES list. Do you wish to add it?</em> tekan tombol  Yes. Tekan kembali tombol Run..</p>
<p style="text-align: justify;">1. <strong>Inisialisasi aplikasi</strong></p>
<p style="text-align: justify;">Pada bagian <strong>Public</strong> unit dideklarasikan variabel <strong>iValueXChart2 </strong>dan <strong>iValueXChart4 </strong>bertipe Longint. Variabel pertama digunakan untuk menggambar garis <em>divider </em>vertikal pada komponen Chart2 dan variabel yang kedua pada Chart4. Dan Banyaknya data yang akan di-<em>plot </em>pada beberapa series berdasarkan nilai dari konstanta <strong>NumData</strong>, yaitu 30.</p>
<p style="text-align: justify;">Seperti umumnya aplikasi, beberapa nilai awal ditentukan pada saat  kontsruktor <em>Create </em>dipanggil. Klik ganda <em>event</em> OnCreate dari <em>form </em>fmMini..</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmMini.FormCreate(Sender: TObject);
<strong>begin</strong>
  iValueXChart2:= -1;
  iValueXChart4:= NumData <strong>div </strong>2;

  BarSeries1.FillSampleValues(6);
  PieSeries1.FillSampleValues(8);
  LineSeries1.FillSampleValues(NumData);
  AreaSeries1.FillSampleValues(NumData);
  LineSeries2.FillSampleValues(NumData);
  LineSeries3.FillSampleValues(NumData);
<strong>end</strong>;</pre>
<p style="text-align: justify;">Posisi awal garis <em>divider </em>vertikal pada komponen Chart2 berada di luar kotak grafik. Sedang pada Chart4 berada tepat di tengah karena banyaknya data yang di-<em>plot </em>pada series AreaSeries1 dan LineSeries3 berdasarkan nilai konstanta <strong>NumData </strong>(30 data). Metode <strong>FillSampleValues </strong>akan mem-<em>plot </em>nilai random pada suatu series dengan rentang data sebanyak angka dalam tanda kurung.</p>
<p style="text-align: justify;">Ketika aplikasi ini diperbesar/diperkecil, grafik yang terpasang di dalamnya perlu disesuaikan dengan perubahan yang terjadi. Klik ganda <em>event </em>OnResize dari <em>form </em>fmMini..</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmMini.FormResize(Sender: TObject);
<strong>begin</strong>
  Panel1.Width:= ClientWidth <strong>div </strong>2;
  Chart1.Height:= ClientHeight <strong>div </strong>2;
  Chart3.Height:= ClientHeight <strong>div </strong>2;
<strong>end</strong>;</pre>
<p style="text-align: justify;"><em>Property Align</em> komponen Panel1 bernilai alLeft, sehingga jika <em>form </em>di-<em>resize </em>maka <em>property Height</em> akan mengikuti perubahan ukuran <em>form</em>. Sedang <em>property Width</em>-nya ditentukan setengah dari perubahan nilai <em>property ClientWidth</em> form. Ukuran komponen Panel2 secara otomatis akan mengikuti perubahan ukuran <em>form </em>dan komponen Panel1 karena <em>property Align</em>-nya bernilai alClient.</p>
<p style="text-align: justify;">Begitu juga dengan ukuran komponen Chart2 akan mengikuti perubahan ukuran Panel1 dan komponen Chart1. Ukuran Chart4 juga akan mengikuti perubahan ukuran Panel2 dan komponen Chart3. Karena <em>property Align</em> kedua komponen TChart tersebut (Chart2 dan Chart4) bernilai alClient. Pada komponen Chart1 dan Chart3, nilai <em>property Align</em>-nya alTop, perubahan ukuran Panel1 dan Panel2 hanya akan mengubah lebar (<em>property Width</em>) kedua komponen TChart tersebut sementara tingginya (<em>property Height</em>) tetap. Untuk menyesuaikan ukurannya, <em>property Height </em>komponen Chart1 ditentukan setengah dari nilai <em>property ClientHeight</em> komponen Panel1 dan <em>property Height </em>komponen Chart3 juga ditentukan setengah dari nilai <em>property ClientHeight</em> komponen Panel2.</p>
<p style="text-align: justify;">2. <strong>Membuat garis <em>Divider</em></strong></p>
<p style="text-align: justify;">Setelah data di-<em>plot </em>pada series LineSeries2 dan LineSeries3, sebuah garis <em>divider </em>vertikal segera digambar pada komponen TChart dimana kedua series tersebut berada (Chart2 dan Chart4). Klik ganda sel di sebelah kanan <em>event</em> OnAfterDrawValue pada masing-masing series tersebut..</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmMini.LineSeries2AfterDrawValues(Sender: TObject);
<strong>begin</strong>
  <strong>if </strong>iValueXChart2 &gt;= 0 <strong>then</strong>
  <strong>begin</strong>
    <strong>with </strong>Chart2, Canvas <strong>do</strong>
    <strong>begin</strong>
      Pen.Color:= clRed;
      DoVertLine(Series[0].CalcXPos(iValueXChart2),
                 ChartRect.Top+1,
                 ChartRect.Bottom-1);
    <strong>end</strong>;
  <strong>end</strong>;
<strong>end</strong>;

<strong>procedure </strong>TfmMini.LineSeries3AfterDrawValues(Sender: TObject);
<strong>begin</strong>
  <strong>if </strong>iValueXChart4 &gt;= 0 <strong>then</strong>
  <strong>begin</strong>
    <strong>with </strong>Chart4,Canvas <strong>do</strong>
    <strong>begin</strong>
      Pen.Color:= clBlue;
      DoVertLine(Series[0].CalcXPos(iValueXChart4),
                 ChartRect.Top+1,
                 ChartRect.Bottom-1);
    <strong>end</strong>;
  <strong>end</strong>;
<strong>end</strong>;</pre>
<p style="text-align: justify;">Garis <em>divider </em>vertikal berwarna merah digambar pada series LineSeries2 dan berwarna biru pada series LineSeries3 dengan menggunakan metode <strong>DoVertLine</strong>, dengan <em>syntax </em>:</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>DoVertLine (X,Y0,Y1:Integer); virtual; abstract;</pre>
<p style="text-align: justify;">Metode ini akan menggambar garis vertikal dari Y0 sampai Y1 pada posisi horisontal X. Pada kedua prosedur di atas Variabel <strong>Y0 </strong>merupakan posisi atas kotak grafik ditambah 1 pixel, variabel <strong>Y1 </strong>diisi dari nilai posisi bawah kotak grafik setelah dikurangi 1 pixel dan posisi horisontal X diperoleh dengan menggunakan metode <strong>CalXPos </strong>berdasarkan nilai x masing-masing series.</p>
<p style="text-align: justify;">3. <strong>Simulasi data grafik</strong></p>
<p style="text-align: justify;">Untuk simulasi data yang di-<em>plot </em>pada series digunakan komponen <em>timer </em>Timer1, klik ganda komponen <em>timer </em>tersebut..</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmMini.Timer1Timer(Sender: TObject);

  <strong>Procedure </strong>RefreshChart(AOwner: TChart; <strong>var </strong>iValueXChart: Longint);
  <strong>var</strong>
    a: Longint;
    dLastValue: Double;
  <strong>begin</strong>
    Inc(iValueXChart);
    <strong>if </strong>iValueXChart &gt;= NumData <strong>then</strong>
      iValueXChart:= 0;

    <strong>for </strong>a:= 0 <strong>to </strong>AOwner.SeriesCount-1 <strong>do</strong>
    <strong>begin</strong>
      <strong>if </strong>iValueXChart = 0 <strong>then</strong>
      <strong>begin</strong>
        <strong>with </strong>AOwner <strong>do</strong>
        <strong>begin</strong>
          LeftAxis.Automatic:= True;
          LeftAxis.SetMinMax(MinYValue(LeftAxis), MaxYValue(LeftAxis));
        <strong>end</strong>;
        dLastValue:= AOwner.Series[a].YValues.Last;
      <strong>end</strong>
      <strong>else</strong>
        dLastValue:= AOwner.Series[a].YValue[iValueXChart-1];

      AOwner.Series[a].YValue[iValueXChart]:= dLastValue+Random(ChartSamplesMax)-
                                              (ChartSamplesMax <strong>div </strong>2);
    <strong>end</strong>;
  <strong>end</strong>;

<strong>var</strong>
  iDataBar: Longint;
<strong>begin</strong>
  RefreshChart(Chart2, iValueXChart2);
  RefreshChart(Chart4, iValueXChart4);

  <strong>with </strong>PieSeries1 <strong>do</strong>
    RotationAngle:= (RotationAngle+1) <strong>mod </strong>359;

  <strong>with </strong>BarSeries1 <strong>do</strong>
  <strong>begin</strong>
    iDataBar:= Random(Count);
    YValue[iDataBar]:= YValue[iDataBar]*(80.0+Random(40))/100.0;
  <strong>end</strong>;
<strong>end</strong>;</pre>
<p style="text-align: justify;">Prosedur lokal <strong>RefreshChart </strong>untuk mengubah nilai suatu series setiap detik berdasarkan posisi nilai x-nya (variabel <strong>iValueXChart</strong>). Setiap detik nilai variabel <strong>iValueXChart </strong>akan bertambah 1 (satu) dengan prosedur <strong>Inc</strong>. Nilai variabel tersebut di-<em>reset </em>(bernilai 0) jika telah sama dengan banyaknya data (konstanta NumData). Jika posisi x grafik kembali ke awal (bernilai 0) maka dengan mengunakan metode <strong>SetMinMax</strong>, nilai skala minimum dan maksimum sumbu kiri grafik diisi dengan nilai minimum dan maksimum sumbu kiri grafik tersebut. Dan nilai y yang terakhir, disimpan dalam variabel <strong>dLastValue</strong>. Jika posisi x grafik tidak 0 (nol) maka nilai variabel <strong>dLastValue </strong>sama dengan nilai y pada posisi x saat itu. Nilai variabel <strong>dLastValue </strong>tersebut ditambah dengan suatu nilai random menjadi nilai y grafik pada posisi x yang sekarang.</p>
<p style="text-align: justify;">Seluruh series yang terdapat pada komponen Chart2 dan Chart4 akan di-<em>plot </em>dengan mengunakan prosedur lokal <strong>RefreshChart</strong>, dimana nilai x untuk series pada Chart2 berasal dari nilai variabel <strong>iValueXChart2 </strong>sedang pada Chart4 dari nilai variabel <strong>iValueXChart4</strong>. Dengan kata lain variabel <strong>iValueXChart </strong>pada prosedur lokal <strong>RefreshChart </strong>diganti dengan <strong>iValueXChart2 </strong>atau <strong>iValueXChart4 </strong>tergantung nilai variabel <strong>AOwner</strong>-nya.</p>
<p style="text-align: justify;">Untuk series bertipe Pie yang terdapat dalam Chart1 akan terus berputar dengan sudut putar sama dengan nilai sisa pembagian sudut putar saat itu (setelah ditambah 1 derajat) dengan 359 derajat. Sedang nilai y yang di-<em>plot </em>pada series bertipe Bar berasal dari nilai y saat itu dikalikan dengan 80 % nilai random antar 0 sampai 39.</p>
<p style="text-align: justify;">4. <strong>Mengaktifkan/me-non aktif-kan proses simulasi data grafik</strong></p>
<p style="text-align: justify;">Proses simulasi data grafik dengan komponen <em>timer </em>akan aktif ketika aplikasi ini dipanggil, dikodekan melalui <em>event </em>OnShow <em>form </em>fmMini. Dan non aktif  ketika aplikasi ini ditutup, dikodekan dalam <em>event </em>OnClose pada <em>form </em>fmMini. Klik ganda kedua <em>event </em>ini..</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmMini.FormShow(Sender: TObject);
<strong>begin</strong>
  Timer1.Enabled:= True;
<strong>end</strong>;

<strong>procedure </strong>TfmMini.FormClose(Sender: TObject; <strong>var </strong>Action: TCloseAction);
<strong>begin</strong>
  Timer1.Enabled:= False;
<strong>end</strong>;</pre>
<p style="text-align: justify;">Nuwun..</p>
<p style="text-align: justify;">Daftar  download untuk artikel ini:<br />
1. <a href="http://www.havetogether.com/downloads/TChart_Code.1.7.zip" title="Downloaded 24 hits"><span style="text-decoration: underline;">TChart Source Code ver.1.7 - 181.05 kB</span></a><br />
2. <a href="http://www.havetogether.com/downloads/Mini_Code.zip" title="Downloaded 23 hits"><span style="text-decoration: underline;">Mini Chart Source Code - 2.48 kB</span></a><br />
3. <a href="http://www.havetogether.com/downloads/TChart_Application.1.7.zip" title="Downloaded 17 hits"><span style="text-decoration: underline;">TChart Application ver.1.7 - 825.89 kB</span></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.havetogether.com/grafik-mini-yang-resizeable-dan-garis-divider.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Membagi Grafik dalam Beberapa Halaman</title>
		<link>http://www.havetogether.com/membagi-grafik-dalam-beberapa-halaman.html</link>
		<comments>http://www.havetogether.com/membagi-grafik-dalam-beberapa-halaman.html#comments</comments>
		<pubDate>Sun, 21 Mar 2010 15:08:22 +0000</pubDate>
		<dc:creator>rumono</dc:creator>
				<category><![CDATA[Aplikasi Sederhana]]></category>
		<category><![CDATA[aplikasi delphi]]></category>
		<category><![CDATA[chart]]></category>
		<category><![CDATA[grafik]]></category>

		<guid isPermaLink="false">http://www.havetogether.com/?p=368</guid>
		<description><![CDATA[Data yang telah di-plot dalam grafik dapat dibagi dalam beberapa halaman tergantung jumlah total data dan banyaknya data per halaman..]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Data yang telah di-<em>plot </em>dalam grafik dapat dibagi dalam beberapa halaman tergantung jumlah total data dan banyaknya data per halaman. Halaman-halaman itu kemudian dapat ditelusuri dengan metode-metode <em>scroll </em>grafik.</p>
<p style="text-align: justify;">Buka lagi project TChart dalam artikel yang lalu, atau download  <a href="http://www.havetogether.com/downloads/TChart_Code.1.6.zip" title="Downloaded 31 hits"><span style="text-decoration: underline;">TChart Source Code ver.1.6</span></a> dan segera ekstrak di komputer kamu, sebelum membukanya buat dulu driver  ODBC database linked (baca artikel <a href="../menampilkan-database-dalam-grafik.html" target="_blank">Menampilkan Database dalam Grafik</a>, terutama tentang cara membuat driver ODBC). Sesudah itu download <a href="http://www.havetogether.com/downloads/Paging_Code.zip" title="Downloaded 34 hits"><span style="text-decoration: underline;">Paging Source Code</span></a>, ekstrak di komputer kamu.. Dan seperti artikel-artikel yang lalu  tambahkan pada project  TChart dengan cara klik kanan mouse  pada project TChart.exe. Pilih menu Add.. kemudian cari  file .pas yang ingin  ditambahkan seperti gambar di bawah ini</p>
<p style="text-align: justify;"><a href="http://www.havetogether.com/wp-content/uploads/2010/11/paging1_addproject.jpg"><img class="alignnone size-full wp-image-1417" title="Menambahkan unit uPaging ke project TChart" src="http://www.havetogether.com/wp-content/uploads/2010/11/paging1_addproject.jpg" alt="" width="590" height="300" /></a></p>
<p style="text-align: justify;">Aktifkan form fmMainTChart (unit uMainTChart), kemudian klik ganda komponen pmOtherDemo.. klik ganda menu Paging Chart..</p>
<p style="text-align: justify;"><a href="http://www.havetogether.com/wp-content/uploads/2010/11/paging2_popmenupaging.jpg"><img class="alignnone size-full wp-image-1418" title="Menu Paging Chart" src="http://www.havetogether.com/wp-content/uploads/2010/11/paging2_popmenupaging.jpg" alt="" width="590" height="282" /></a></p>
<p style="text-align: justify;">Ketikkan kode seperti di bawah ini..</p>
<pre style="padding-left: 30px;"><strong>procedure </strong>TfmMainTChart.miPagingChartClick(Sender: TObject);
<strong>begin </strong>
  fmPaging.ShowModal;
<strong>end</strong>;</pre>
<p style="text-align: justify;">Tekan tombol Run untuk menjalankan aplikasi ini… jika muncul pesan <em>Form ‘fmMainTChart‘ references form ‘fmPaging’ declarated in unit ‘uPaging’ which is not in your USES list. Do you wish to add it?</em> tekan tombol Yes. Tekan kembali tombol Run..</p>
<p style="text-align: justify;">1. <strong>Membuat halaman grafik</strong></p>
<p><strong> </strong></p>
<p style="text-align: justify;">Data yang di-plot dalam series grafik dilakukan pada saat <em>form </em>dibangun dengan kontruktor <em>Create</em>, aktifkan <em>form</em> fmPaging, klik ganda sel di sebelah kanan event <strong>OnCreate</strong>..</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmPaging.FormCreate(Sender: TObject);
<strong>begin</strong>
  Series1.FillSampleValues(100);
  sePaging.Value:= 18;
  ctPagingPageChange(ctPaging);
<strong>end</strong>;</pre>
<p style="text-align: justify;">Data sebanyak 100 data di-<em>plot </em>dalam Series1 dengan metode <strong>FillSampleValues</strong>. Dan <em>property Value</em> komponen sePaging diinisialisasikan dengan nilai 18. Nilai <em>property </em>tersebut menunjukkan banyaknya data per halaman, sebagai pengganti <em>SpinEdit</em><strong> </strong>Points per Page pada sub tab Paging dari komponen TChart (atau <em>property MaxPointsPerPage</em>) yang nilainya bisa diubah ketika aplikasi dijalankan. Perhatikan gambar di bawah ini</p>
<p style="text-align: justify;"><a href="http://www.havetogether.com/wp-content/uploads/2010/11/paging3_subtabpaging.jpg"><img class="alignnone size-full wp-image-1419" title="sub tab Paging" src="http://www.havetogether.com/wp-content/uploads/2010/11/paging3_subtabpaging.jpg" alt="" width="431" height="351" /></a></p>
<p style="text-align: justify;">Prosedur <strong>ctPagingPageChange </strong>dipanggil untuk menginisialisasi beberapa komponen.. <em>Event </em><strong>OnPageChange </strong>ini terjadi ketika <em>property Page</em> komponen TChart telah diubah dan sebelum halaman grafik tersebut  berubah. <em>Property MaxPointsPerPage</em> (atau <em>SpinEdit</em> Points  per Page pada sub tab Paging) harus lebih besar dari 0 (nol) untuk  mengaktifkan mekanisme pemberian nomor halaman secara otomatis. Klik ganda sel di sebelah kanan <em>event </em>OnPageChange pada komponen TChart ctPaging..</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmPaging.ctPagingPageChange(Sender: TObject);
<strong>begin</strong>
  ctPaging.UndoZoom;
  lCurrent.Caption:= 'Current/Total : '+IntToStr(ctPaging.Page)+
                     '/'+IntToStr(ctPaging.NumPages);
  btFirst.Enabled:= btPrevious.Enabled;
  btPrevious.Enabled:= ctPaging.Page &gt; 1;
  btNext.Enabled:= ctPaging.Page &lt; ctPaging.NumPages;
  btLast.Enabled:= btNext.Enabled;
<strong>end</strong>;</pre>
<p style="text-align: justify;">Untuk menghitung banyaknya halaman grafik dengan benar, komponen TChart harus tidak dalam keadaan diperbesar/diperkecil yaitu dengan memanggil metode <strong>UndoZoom</strong>. Informasi suatu halaman terhadap total halaman grafik ditampilkan melalui <em>property Caption</em> komponen lCurrent. <em>Property Page</em> komponen TChart menge-<em>set </em>halaman grafik saat ini sedang <em>property NumPages</em> menunjukkan total halaman grafik.</p>
<p style="text-align: justify;">Untuk grafik yang mempunyai halaman lebih dari satu, komponen <em>button </em>btFirst dapat diakses tergantung aktif/tidaknya <em>button </em>btPrevious. Komponen <em>button </em>btPrevious akan aktif jika halaman grafik yang sekarang ditampilkan bukan halaman pertama. Dan <em>button </em>btNext akan aktif jika halaman grafik yang sekarang ditampilkan bukan halaman terakhirnya, sedang aktif/tidaknya <em>button </em>btLast tergantung pada aktif/tidaknya <em>button</em> btNext. Jika grafik hanya terdiri atas satu halaman maka keempat komponen <em>button </em>tersebut tidak aktif.</p>
<p style="text-align: justify;">2. <strong>Mengubah setting halaman grafik</strong></p>
<p style="text-align: justify;">Perhatikan kembali gambar sub tab Paging di atas.. nilai <em>SpinEdit</em> Points  per Page dan <em>checkbox </em>Scale Last Page bisa diubah melalui komponen sePaging dan chScale. Klik ganda pada komponen sePaging..</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmPaging.sePagingClick(Sender: TObject);
<strong>begin</strong>
  ctPaging.MaxPointsPerPage:= sePaging.Value;
  ctPagingPageChange(ctPaging);
<strong>end</strong>;</pre>
<p style="text-align: justify;">Komponen sePaging ini merupakan pengganti <em>SpinEdit </em>Points per Page, perubahan nilainya akan mempengaruhi banyaknya data per halaman (nilai <em>property MaxPointsPerPage</em> komponen TChart sama dengan nilai <em>property Value </em>komponen sePaging). Banyaknya halaman grafik mungkin akan berubah setiap kali ada perubahan nilai komponen sePaging sehingga prosedur ctPagingPageChange perlu dipanggil kembali untuk menyesuaikan keadaan beberapa komponen.</p>
<p style="text-align: justify;">Jika pada saat mengedit komponen TChart, <em>checkbox </em>Scale Last Page pada sub tab Paging tidak di&#8217;centang&#8217; maka halaman terakhir akan ditampilkan dengan range sumbu horisontal grafik sama dengan halaman yang lain. Jika sebaliknya maka skala halaman terakhir grafik akan diatur berdasarkan pada banyaknya titik yang tampak pada halaman terakhir tersebut. Untuk mengontrol <em>property </em>ini, digunakan chScale, klik ganda komponen ini..</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmPaging.chScaleClick(Sender: TObject);
<strong>begin</strong>
  ctPaging.ScaleLastPage:= chScale.Checked;
<strong>end</strong>;</pre>
<p style="text-align: justify;">3. <strong>Mengontrol halaman grafik</strong></p>
<p style="text-align: justify;">Keempat komponen <em>button </em>digunakan untuk menampilkan suatu halaman ke halaman lain, klik ganda pada salah satu komponen <em>button </em>tersebut. Keempatnya menggunakan sebuah prosedur  ButtonClick..</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmPaging.ButtonClick(Sender: TObject);
<strong>begin</strong>
  <strong>if </strong>Sender = btFirst <strong>then</strong>
    ctPaging.Page:= 1
  <strong>else</strong>
  <strong>if </strong>Sender = btPrevious <strong>then</strong>
    ctPaging.PreviousPage
  <strong>else</strong>
  <strong>if </strong>Sender = btNext then
    ctPaging.NextPage
  <strong>else</strong>
    ctPaging.Page:= ctPaging.NumPages;
<strong>end</strong>;</pre>
<p style="text-align: justify;">Jika user menekan <em>button </em>btFirst maka halaman pertama grafik akan ditampikan. Jika btPrevious ditekan maka metode <strong>PreviousPage </strong>akan membawa ke halaman sebelumnya sedang untuk menampilkan halaman selanjutnya panggil metode <strong>NextPage </strong>yaitu ketika pengguna menekan <em>button </em>btNext. Dan halaman yang terakhir akan ditampilkan ketika user menekan <em>button </em>btLast.</p>
<p style="text-align: justify;">Nuwun..</p>
<p style="text-align: justify;">Daftar  download untuk artikel ini:<br />
1. <a href="http://www.havetogether.com/downloads/TChart_Code.1.6.zip" title="Downloaded 31 hits"><span style="text-decoration: underline;">TChart Source Code ver.1.6 - 178.32 kB</span></a><br />
2. <a href="http://www.havetogether.com/downloads/Paging_Code.zip" title="Downloaded 34 hits"><span style="text-decoration: underline;">Paging Source Code - 2.71 kB</span></a><br />
3. <a href="http://www.havetogether.com/downloads/TChart_Application.1.6.zip" title="Downloaded 27 hits"><span style="text-decoration: underline;">TChart Application ver.1.6 - 824.68 kB</span></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.havetogether.com/membagi-grafik-dalam-beberapa-halaman.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mengubah Background Grafik</title>
		<link>http://www.havetogether.com/mengubah-background-grafik.html</link>
		<comments>http://www.havetogether.com/mengubah-background-grafik.html#comments</comments>
		<pubDate>Sat, 20 Mar 2010 13:41:42 +0000</pubDate>
		<dc:creator>rumono</dc:creator>
				<category><![CDATA[Aplikasi Sederhana]]></category>
		<category><![CDATA[aplikasi delphi]]></category>
		<category><![CDATA[chart]]></category>
		<category><![CDATA[grafik]]></category>

		<guid isPermaLink="false">http://www.havetogether.com/?p=361</guid>
		<description><![CDATA[Mungkin di antara kamu ada yang suka menambahkan gambar sebagai latar belakang grafik sehingga tampilan grafik akan lebih menarik..]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Mungkin di antara kamu ada yang suka menambahkan gambar sebagai latar belakang grafik sehingga tampilan grafik akan lebih menarik.</p>
<p style="text-align: justify;">Artikel ini masih merupakan bagian dari project TChart, buka  kembali project sebelumnya, atau kalau nggak ada download  <a href="http://www.havetogether.com/downloads/TChart_Code.1.5.zip" title="Downloaded 23 hits"><span style="text-decoration: underline;">TChart Source Code ver.1.5</span></a>, kemudian ekstrak di komputer kamu, jangan lupa untuk  membuat driver ODBC database linked (atau baca kembali artikel <a href="http://www.havetogether.com/menampilkan-database-dalam-grafik.html" target="_blank">Menampilkan Database dalam Grafik</a>). Selanjutnya  download <a href="http://www.havetogether.com/downloads/BackImage_Code.zip" title="Downloaded 23 hits"><span style="text-decoration: underline;">Back Image Source Code</span></a>, kemudian ekstrak dan seperti biasa tambahkan pada project  TChart tersebut dengan meng-klik kanan mouse pada project TChart.exe.  Pada menu yang muncul klik Add.. kemudian cari file .pas yang ingin  ditambahkan seperti gambar di bawah ini</p>
<p><a title="Menambahkan unit BackImage" href="http://www.havetogether.com/wp-content/uploads/2010/11/backimage1_addproject.jpg"><img class="alignnone size-full wp-image-1370" title="Menambahkan unit uBackImage ke project TChart" src="http://www.havetogether.com/wp-content/uploads/2010/11/backimage1_addproject.jpg" alt="Menambahkan unit BackImage" width="590" height="300" /></a></p>
<p style="text-align: justify;">Agar  bisa dipanggil melalui aplikasi TChart, aktifkan <em>form </em>fmMainTChart, kemudian klik ganda komponen <em>popupmenu</em> bernama pmOtherDemo.. pada popmenu yang muncul klik ganda  menu Background Image..</p>
<p><a href="http://www.havetogether.com/wp-content/uploads/2010/11/backimage2_popmenuback.jpg"><img class="alignnone size-full wp-image-1371" title="Menu Background Image" src="http://www.havetogether.com/wp-content/uploads/2010/11/backimage2_popmenuback.jpg" alt="Menu Background Image" width="590" height="282" /></a></p>
<p>Kemudian  tambahkan <em>code </em>berikut</p>
<pre style="padding-left: 30px;"><strong>procedure </strong>TfmMainTChart.miBackImageClick(Sender: TObject);
<strong>begin </strong>
  fmBackImage.ShowModal;
<strong>end</strong>;</pre>
<p style="text-align: justify;">Tekan tombol Run untuk menjalankan aplikasi ini… jika muncul pesan <em>Form   ‘fmMainTChart ‘ references form ‘fmBackImage’ declarated in unit   ‘uBackImage’ which is not in your USES list. Do you wish to add it?</em> tekan tombol Yes kemudian Tekan kembali tombol Run..</p>
<p style="text-align: justify;">1. <strong>Inisialisasi aplikasi</strong></p>
<p style="text-align: justify;">Inisialisasi aplikasi untuk menentukan nilai awal dikodekan<em> </em>dalam event <strong>OnCreate </strong>form, klik ganda sel di sebelah kanan  event OnCreate dari form  fmBackImage..</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmBackImage.FormCreate(Sender: TObject);
<strong>begin</strong>
  Series1.FillSampleValues(100);
<strong>end</strong>;</pre>
<p style="text-align: justify;">Kode program di atas hanya untuk menambahkan data pada Series1 sebanyak 100 data dengan memanggil metode <strong>FillSampleValues</strong>.</p>
<p style="text-align: justify;">2. <strong>Menentukan tampilan <em>background </em>grafik</strong></p>
<p style="text-align: justify;"><em>Style background</em> grafik dapat di-set dalam mode <em>Stretch</em>, <em>Tile </em>dan <em>Center</em>. Mode <em>Stretch </em>menyebabkan gambar mengambil ukuran dan bentuk komponen TChart, artinya jika ukuran dan bentuk komponen TChart diubah maka gambar akan ikut berubah. Dan seluruh gambar <em>background </em>akan ditampilkan seukuran komponen TChart meskipun ukuran gambar tersebut terlalu besar. Sedang dalam mode <em>Tile</em>, jika gambar <em>background </em>terlalu besar maka gambar tersebut tidak seluruhnya mengisi komponen TChart, tetapi ditampilkan apa adanya dimulai dari posisi kiri atas gambar kemudian terpotong sampai pada batas bawah dan kanan grafik. Pada mode <em>Center</em>, hanya posisi tengah gambar yang akan memenuhi <em>background </em>grafik jika ukuran gambar tersebut terlalu besar. Klik ganda pada salah satu dari ketiga komponen <em>radiobutton </em>(prosedure untuk ketiga komponen ini dijadikan satu, prosedur <strong>RadioButtonClick</strong>)</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmBackImage.RadioButtonClick(Sender: TObject);
<strong>begin</strong>
  <strong>if </strong>rbStretch.Checked <strong>then</strong>
    ctBackImage.BackImageMode := pbmStretch
  <strong>else</strong>
  <strong>if </strong>rbTile.Checked <strong>then</strong>
    ctBackImage.BackImageMode := pbmTile
  <strong>else</strong>
    ctBackImage.BackImageMode := pbmCenter;
<strong>end</strong>;</pre>
<p style="text-align: justify;">Gambar <em>background </em>grafik juga dapat dibuat memenuhi seluruh &#8216;dinding&#8217; grafik atau hanya dalam kotak grafiknya saja tergantung pada nilai property <em>BackImageInside</em>-nya. Untuk mengendalikan nilai <em>property </em>tersebut gunakan komponen <em>checkbox </em>chInside, klik ganda komponen tersebut..</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmBackImage.chInsideClick(Sender: TObject);
<strong>begin</strong>
  ctBackImage.BackImageInside:= chInside.Checked;
<strong>end</strong>;</pre>
<p style="text-align: justify;">Artinya jika <em>checkbox </em>chInside di&#8217;centang&#8217; maka <em>background </em>grafik hanya berada dalam kotak grafik.</p>
<p style="text-align: justify;">3. <strong>Mengubah <em>background </em>grafik</strong></p>
<p style="text-align: justify;">Komponen TOpenDialog yang terpasang berfungsi untuk membuka folder tempat file gambar. Jika ingin menyaring file gambar dengan eketensi tertentu ketika kotak dialog Open ditampilkan, misalnya hanya file gambar bertipe Bitmap (bmp), ubah <em>property Filter</em>-nya. Caranya aktifkan jendela <em>Object Inspector</em>, klik ganda sel di sebelah kanan <em>property Filter</em> sehingga muncul kotak dialog Filter Editor. Isikan misalnya sel pertama sebelah kiri dengan File Bitmap dan sel di sebelah kanannya dengan *.bmp, kemudian tekan tombol Ok. Lebih jelasnya perhatikan gambar di bawah ini</p>
<p style="text-align: justify;"><a href="http://www.havetogether.com/wp-content/uploads/2010/11/backimage3_filtereditor.jpg"><img class="alignnone size-full wp-image-1372" title="Membuat filter kotak dialog Open" src="http://www.havetogether.com/wp-content/uploads/2010/11/backimage3_filtereditor.jpg" alt="Filter Kotak Dialog Open" width="590" height="305" /></a></p>
<p style="text-align: justify;">Untuk memanggil kotak dialog Open, gunakan komponen <em>button </em>btBrowse, klik ganda komponen ini..</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmBackImage.btBrowseClick(Sender: TObject);
<strong>begin</strong>
  <strong>if </strong>OpenDialog1.Execute <strong>then</strong>
 <strong> begin</strong>
    ctBackImage.BackImage.LoadFromFile(OpenDialog1.FileName);
    gbStyle.Enabled:= True;
    chInside.Enabled:= True;
 <strong> end</strong>;
<strong>end</strong>;
</pre>
<p style="text-align: justify;">Sebuah kotak dialog Open akan muncul ketika pengguna menekan tombol <strong>Browse..</strong>, kemudian jika kotak dialog tersebut dieksekusi (menekan tombol Open) maka dengan metode <strong>LoadFromFile</strong>, <em>background </em>grafik akan diisi dengan file gambar yang telah dipilih. <em>Property Enabled</em> komponen <em>groupbox </em>gbStyle dan komponen <em>checkbox</em> chInside diberi nilai True sehingga dapat diakses kembali setelah sebelumnya pada prosedur <strong>btClearClick </strong>dinon-aktifkan.</p>
<p style="text-align: justify;">Sedang komponen <em>button </em>yang tersisa, btClear, untuk membersihkan <em>background </em>grafik. Klik ganda komponen tersebut..</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmBackImage.btClearClick(Sender: TObject);
<strong>begin</strong>
  ctBackImage.BackImage:= nil;
  gbStyle.Enabled:= False;
  chInside.Enabled:= False;
<strong>end</strong>;
</pre>
<p style="text-align: justify;">Pada prosedur <strong>BClearClick </strong>di atas, gambar <em>background </em>grafik dihapus dengan memberi nilai nil pada <em>property BackImage</em> komponen TChart.</p>
<p style="text-align: justify;">Nuwun..</p>
<p style="text-align: justify;">Daftar  download untuk artikel ini:<br />
1. <a href="http://www.havetogether.com/downloads/TChart_Code.1.5.zip" title="Downloaded 23 hits"><span style="text-decoration: underline;">TChart Source Code ver.1.5 - 35.14 kB</span></a><br />
2. <a href="http://www.havetogether.com/downloads/BackImage_Code.zip" title="Downloaded 23 hits"><span style="text-decoration: underline;">Back Image Source Code - 143.17 kB</span></a><br />
3. <a href="http://www.havetogether.com/downloads/TChart_Application.1.5.zip" title="Downloaded 19 hits"><span style="text-decoration: underline;">TChart Application ver.1.5 - 819.96 kB</span></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.havetogether.com/mengubah-background-grafik.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Menampilkan Nilai Statistik dari Grafik</title>
		<link>http://www.havetogether.com/menampilkan-nilai-statistik-dari-grafik.html</link>
		<comments>http://www.havetogether.com/menampilkan-nilai-statistik-dari-grafik.html#comments</comments>
		<pubDate>Wed, 17 Mar 2010 12:30:20 +0000</pubDate>
		<dc:creator>rumono</dc:creator>
				<category><![CDATA[Aplikasi Sederhana]]></category>
		<category><![CDATA[aplikasi delphi]]></category>
		<category><![CDATA[chart]]></category>
		<category><![CDATA[grafik]]></category>

		<guid isPermaLink="false">http://www.havetogether.com/?p=354</guid>
		<description><![CDATA[Untuk membuat nilai statistik dari data yang secara kontinyu berubah bisa langsung ditampilkan melalui grafik, fasilitas ini akan mempercepat user dalam menganalisa data..]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Untuk membuat nilai statistik dari data yang secara kontinyu berubah bisa langsung ditampilkan melalui grafik, fasilitas ini akan mempercepat user dalam menganalisa data.</p>
<p style="text-align: justify;">Buka kembali project TChart sebelumnya, atau kalau belum ada download <a href="http://www.havetogether.com/downloads/TChart_Code.1.4.zip" title="Downloaded 44 hits"><span style="text-decoration: underline;">TChart Source Code ver.1.4</span></a>, kemudian ekstrak di komputer kamu, jangan lupa untuk membuat driver ODBC database linked (atau baca kembali artikel <a href="http://www.havetogether.com/menampilkan-database-dalam-grafik.html" target="_blank">Menampilkan Database dalam Grafik</a>). Selanjutnya download <a href="http://www.havetogether.com/downloads/StatisticBar_Code.zip" title="Downloaded 38 hits"><span style="text-decoration: underline;">Statistic Source Code</span></a>, kemudian ekstrak dan tambahkan pada project TChart tersebut dengan meng-klik kanan mouse pada project TChart.exe. Pada menu yang muncul klik Add.. kemudian cari file .pas yang ingin ditambahkan seperti gambar di bawah ini</p>
<p style="text-align: justify;"><a href="http://www.havetogether.com/wp-content/uploads/2010/11/statistic1_addproject.jpg"><img class="alignnone size-full wp-image-1358" title="Menambahkan unit uStatisticBar ke project TChart" src="http://www.havetogether.com/wp-content/uploads/2010/11/statistic1_addproject.jpg" alt="" width="590" height="338" /></a></p>
<p style="text-align: justify;">Klik ganda komponen TChart pada form fmStatisticBar, kemudian perhatikan nilai <em>property Data Source</em> dari salah satu series statistik, misalnya Biggest. Seperti gambar di bawah terlihat nilai <em>Data Source</em>-nya adalah <strong>Function</strong>, dan fungsi yang dipilih adalah <strong>High</strong>.</p>
<p style="text-align: justify;"><a href="http://www.havetogether.com/wp-content/uploads/2010/11/statistic2_biggestseries.jpg"><img class="alignnone size-full wp-image-1359" title="Membuat nilai maksimum statistik untuk series Biggest" src="http://www.havetogether.com/wp-content/uploads/2010/11/statistic2_biggestseries.jpg" alt="" width="431" height="351" /></a></p>
<p style="text-align: justify;">Agar aplikasi yang baru saja ditambahkan bisa dipanggil melalui project TChart, aktifkan form fmMainTChart, kemudian klik ganda komponen <em>popupmenu </em>bernama pmOtherDemo.. pada <em>popmenu </em>yang muncul klik ganda menu Statistic Bar Series..</p>
<p style="text-align: justify;"><a href="http://www.havetogether.com/wp-content/uploads/2010/11/statistic3_popmenustatistic.jpg"><img class="alignnone size-full wp-image-1360" title="Menu Statistic Bar Series" src="http://www.havetogether.com/wp-content/uploads/2010/11/statistic3_popmenustatistic.jpg" alt="" width="590" height="283" /></a></p>
<p style="text-align: justify;">Kemudian tambahkan code berikut</p>
<pre style="padding-left: 30px;"><strong>procedure </strong>TfmMainTChart.miStatisticBarSeriesClick(Sender: TObject);
<strong>begin</strong>
  fmStatisticBar.ShowModal;
<strong>end</strong>;</pre>
<p style="text-align: justify;">Tekan tombol Run untuk menjalankan aplikasi ini… jika muncul pesan <em>Form  ‘fmMainTChart ‘ references form ‘fmStatisticBar’ declarated in unit  ‘uStatisticBar’ which is not in your USES list. Do you wish to add it?</em> tekan tombol Yes kemudian Tekan kembali tombol Run..</p>
<p style="text-align: justify;">1. <strong>Inisialisasi aplikasi</strong></p>
<p style="text-align: justify;">Nilai-nilai awal dari aplikasi biasanya diberikan melalui event <strong>OnCreate </strong>(klik ganda sel di sebelah kanan  event OnCreate pada form fmStatisticBar)</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmStatisticBar.FormCreate(Sender: TObject);
<strong>begin</strong>
 bRunTimer:= False;
 TeeEraseBack:= False;
 bsNewSeries:= <strong>nil</strong>;

 ctStatisticBar.View3D:= chView.Checked;
 ctStatisticBar.Chart3DPercent:= 35;

 Series1.Fillsamplevalues(6);
 Series1.Dark3D:= ctStatisticBar.IsScreenHighColor;
<strong>end</strong>;</pre>
<p style="text-align: justify;">Variabel <strong>bRunTimer </strong>dan <strong>bsNewSeries</strong>, masing bertipe Boolean dan TBarSeries dideklarasikan dalam bagian <strong>public</strong> unit. Variabel <strong>bRunTimer </strong>dipakai untuk menentukan bekerja atau tidak-nya komponen TTimer, sedang variabel <strong>bsNewSeries </strong>untuk membuat Series bertipe Bar secara <em>run-time</em> sehingga diinisalisasi dengan nilai nil. Tampilan grafik dalam 3D tergantung nilai <em>property</em> <em>Checked </em>komponen <em>checkbox </em>chView, dan <em>property</em> <em>Chart3DPercent </em>ditentukan bernilai 35 %. Data sebanyak 6 (enam) titik di-plot pada Series1 dengan metode <strong>FillSampleValues</strong>. <em>Property Dark3D </em>Series1 nilainya ditentukan berdasarkan mode warna grafik yang dipakai (bernilai True jika dipakai mode lebih dari 256 warna) dengan metode <strong>IsScreenHighColor</strong>.</p>
<p style="text-align: justify;">2. <strong>Menampilkan nilai statistik pada &#8216;kanvas&#8217; grafik dan legend grafik</strong></p>
<p style="text-align: justify;">Nilai dari masing-masing series statistik ditampilkan dengan memanggil event <strong>OnAfterDraw</strong> komponen TChart, klik ganda sel di sebelah event tersebut..</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmStatisticBar.ctStatisticBarAfterDraw(Sender: TObject);
<strong>begin</strong>
  <strong>if not </strong>chTwoBar.Checked <strong>then</strong>
  <strong>begin</strong>
    <strong>with </strong>ctStatisticBar, Canvas <strong>do</strong>
    <strong>begin</strong>
      Brush.Style:= bsClear;

      Font.PixelsPerInch:= Screen.PixelsPerInch;
      Font.Size:= 10;
      Font.Style:= [fsBold,fsItalic];

      Font.Color:= AverageSeries.SeriesColor;
      TextOut(ChartXCenter,
              AverageSeries.CalcYPos(0),
              AverageSeries.Title+' '+AverageSeries.ValueMarkText[0]);

      Font.Color:= BiggestSeries.SeriesColor;
      TextOut(ChartXCenter,
              BiggestSeries.CalcYPos(0),
              BiggestSeries.Title+' '+BiggestSeries.ValueMarkText[0]);

      Font.Color:= SmallestSeries.SeriesColor;
      TextOut(ChartXCenter,
              SmallestSeries.CalcYPos(0),
              SmallestSeries.Title+' '+SmallestSeries.ValueMarkText[0]);
    <strong>end</strong>;
  <strong>end</strong>;
<strong>end</strong>;</pre>
<p style="text-align: justify;">Nilai-nilai statistik ditampilkan ketika <em>checkbox </em>chTwoBar tidak diberi tanda &#8216;centang&#8217;. Untuk membersihkan pola sebelumnya, pola TBrush ditentukan bernilai bsClear. <em>Property</em> <em>PixelsPerInch </em>digunakan untuk memastikan font yang disalin dari kanvas ke printer mempunyai ukuran yang sama. Faktor konversi antara pixel dan inchi untuk font tersebut mengambil nilai yang sama dengan pada layar monitor. Huruf yang dipakai untuk menginformasikan nilai statistik dalam series statistik berukuran 10 pixel, dalam huruf tebal dan miring. Sedang warna huruf mengambil warna masing-masing series statistik tersebut. Untuk menuliskan teks dalam &#8216;kanvas&#8217; grafik digunakan metode <strong>TextOut </strong>yang mempunyai syntax :</p>
<pre style="padding-left: 30px;"><strong>procedure </strong>TextOut(X, Y: Integer; <strong>const </strong>Text: <strong>string</strong>);</pre>
<p style="text-align: justify;">Penulisan teks tersebut dilakukan pada koordinat (X, Y). Koordinat X untuk semua teks ditentukan dari nilai tengah koordinat horisontal grafik yang diperoleh dengan menggunakan metode <strong>ChartXCenter</strong>. Nilai yang dihasilkan metode ini tidak sama dengan <em>property Width </em>dibagi dua karena margin grafik, margin sumbu, lebar legend grafik dan sebagainya bukan bagian dari ukuran horisontal grafik.</p>
<p style="text-align: justify;">Sedang nilai Y berasal dari koordinat vertikal yang merupakan hasil pemanggilan metode <strong>CalYPos </strong>pada masing-masing series statistik. Dan teks yang ditampilkan terdiri atas judul masing-masing series statistik tersebut (<em>property Title</em>) dan nilai <em>Mark</em>-nya (<em>property ValueMarkText</em>).</p>
<p style="text-align: justify;"><em>Legend </em>dari masing-masing series sebenarnya bisa langsung ditentukan dalam <em>property LegendSyle</em> dan <em>TextStyle</em>, tetapi bisa juga ditentukan melalui <em>event </em><strong>OnGetLegendText</strong> komponen TChart, klik ganda sel di sebelah kanan event tersebut..</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmStatisticBar.ctStatisticBarGetLegendText(Sender: TCustomAxisPanel;
 LegendStyle: TLegendStyle; Index: Integer; <strong>var </strong>LegendText: <strong>String</strong>);
<strong>begin</strong>
  <strong>if </strong>chTwoBar.Checked <strong>then</strong>
    LegendText:= ctStatisticBar.Series[Index].Title+' : '+LegendText
  <strong>else</strong>
    LegendText:= ctStatisticBar.Series[Index].Title;
<strong>end</strong>;</pre>
<p style="text-align: justify;">Jika <em>checkbox </em>chTwoBar di&#8217;centang&#8217;, teks yang ditampilkan pada <em>legend </em>grafik terdiri atas judul setiap series ditambah nilai dari <em>property</em> <em>LegendText</em>-nya. Jika sebaliknya, <em>legend </em>grafik hanya menampilkan judul masing-masing series.</p>
<p style="text-align: justify;">3. <strong>Membuat series data baru secara <em>run-time</em></strong></p>
<p style="text-align: justify;">Pada aplikasi sebenarnya, mungkin pada saat aplikasi sedang berjalan kita perlu menambahkan satu atau lebih series data baru tanpa menghentikan proses. Tentu saja nilai statistiknya akan berubah dengan adanya series baru tersebut, begitu juga ketika series baru tersebut dihapus. Klik ganda pada komponen <em>checkbox </em>chTwoBar..</p>
<pre style="padding-left: 30px;"><strong>procedure </strong>TfmStatisticBar.chTwoBarClick(Sender: TObject);
<strong>begin </strong>
<strong>  if </strong>chTwoBar.Checked <strong>then </strong>
<strong>  begin </strong>
    bsNewSeries:= TBarSeries.Create(Self);
    bsNewSeries.ParentChart:= ctStatisticBar;
    bsNewSeries.Title:= 'New Series';
    bsNewSeries.BarStyle:= bsPyramid;
    bsNewSeries.FillSampleValues(Series1.Count);</pre>
<pre style="padding-left: 30px;">    AverageSeries.DataSources.Add(bsNewSeries);
    bsNewSeries.AddLinkedSeries(AverageSeries);</pre>
<pre style="padding-left: 30px;">    BiggestSeries.DataSources.Add(bsNewSeries);
    bsNewSeries.AddLinkedSeries(BiggestSeries);</pre>
<pre style="padding-left: 30px;">    SmallestSeries.DataSources.Add(bsNewSeries);
    bsNewSeries.AddLinkedSeries(SmallestSeries);
<strong>  end </strong>
<strong>  else </strong>
<strong>  begin </strong>
    bsNewSeries.Free;
    bsNewSeries:= <strong>nil</strong>;
<strong>  end</strong>;
  Series1.RefreshSeries;
<strong>end</strong>;</pre>
<p style="text-align: justify;">Sebuah series baru bertipe Bar bernama &#8216;New Series&#8217; akan dibuat jika user memberi tanda &#8216;centang&#8217; pada komponen chTwoBar, dengan memanggil konstruktor <strong>Create</strong>. Series baru ini merupakan bagian dari komponen TChart ctStatisticBar, dengan memberi nilai <strong>ctStatisticBar </strong>pada <em>property ParentChart</em>-nya. <em>Property Title</em>-nya bernilai <strong>New</strong> <strong>Series</strong>, dan mempunyai style bar berbentuk piramid serta banyaknya data yang di-plot pada series baru tersebut sama dengan jumlah data pada Series1.</p>
<p style="text-align: justify;">Untuk menghitung kembali nilai statistik, tambahkan series baru tersebut pada <em>property DataSource</em> masing-masing series statistik. Dan jika komponen <em>checkbox </em>chTwoBar tidak di&#8217;centang&#8217; maka series baru tersebut dihapus kembali dengan menggunakan metode <strong>Free</strong>. Kemudian yang terakhir metode <strong>RefreshSeries </strong>akan me-refresh grafik pada Series1.</p>
<p style="text-align: justify;">4. <strong>Menentukan tampilan series data</strong></p>
<p style="text-align: justify;">Ada dua buah komponen <em>checkbox </em>yang berfungsi untuk menentukan tampilan series data, chView dan chBarVisible, klik ganda pada masing masing..</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmStatisticBar.chViewClick(Sender: TObject);
<strong>begin</strong>
  ctStatisticBar.View3d:= chView.Checked;
<strong>end</strong>;

<strong>procedure </strong>TfmStatisticBar.chBarVisibleClick(Sender: TObject);
<strong>begin</strong>
  Series1.Active:= chBarVisible.Checked;
  <strong>if </strong>Assigned(bsNewSeries) <strong>then</strong>
    bsNewSeries.Active:= chBarVisible.Checked;
<strong>end</strong>;</pre>
<p style="text-align: justify;"><em>Checkbox </em>chView untuk menampilkan grafik dalam 3D jika di&#8217;centang&#8217;, kalau sebaliknya grafik dalam 2D. Sedang <em>checkbox </em>chBarVisible untuk menentukan apakah series data ditampilkan atau disembunyikan.</p>
<p style="text-align: justify;">5. <strong>Mensimulasikan data yang ditampilkan dalam grafik</strong></p>
<p style="text-align: justify;">Simulasi untuk mem-<em>plot </em>data dalam Series1 atau series baru (bsNewSeries) digunakan komponen TTimer, klik ganda komponen ini..</p>
<pre style="padding-left: 30px;"><strong>procedure </strong>TfmStatisticBar.tmStatisticBarTimer(Sender: TObject);
<strong>var </strong>
  t: Longint;
<strong>begin </strong>
  t:= Random(Series1.Count);
  Series1.YValue[t]:= Series1.YValue[t]+Random(50)-25;
  <strong>if </strong>Random(100) &lt; 8 <strong>then </strong>
    Series1.BarStyle:= TBarStyle(Random(1+Ord(High(TBarStyle))));</pre>
<pre style="padding-left: 30px;">  <strong>if </strong>Random(100) &lt; 2 <strong>then </strong>
    chView.Checked:= <strong>not </strong>chView.Checked;</pre>
<pre style="padding-left: 30px;">  <strong>if </strong>Assigned(bsNewSeries) <strong>then </strong>
    bsNewSeries.YValue[t]:= Random(500);
<strong>end</strong>;</pre>
<p style="text-align: justify;"><em>Code </em>di atas hanya simulasi data random agar pada demo ini bisa terlihat perubahan nilai Series1 akan mengubah series statistik, kamu bisa merubahnya dengan data yang diambil dari database atau dari sumber data online, lainnya. Untuk menjalankan/menghentikan proses gunakan komponen button btRun (klik ganda komponen button ini)</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmStatisticBar.btRunClick(Sender: TObject);
<strong>begin</strong>
  bRunTimer:= <strong>not </strong>bRunTimer;
  tmStatisticBar.Enabled:= bRunTimer;
 <strong> if </strong>bRunTimer <strong>then</strong>
    btRun.Caption:= 'Stop'
 <strong> else</strong>
    btRun.Caption:= '&amp;Run';
<strong>end</strong>;</pre>
<p style="text-align: justify;">Proses untuk menjalankan/menghentikan penge-<em>plot</em>-an data tergantung pada nilai dari variabel <strong>bRunTimer</strong>.</p>
<p style="text-align: justify;">6. <strong>Mencetak grafik dan men-<em>copy </em>grafik dalam <em>clipboard</em></strong></p>
<p style="text-align: justify;">Grafik yang ditampilkan bisa langsung dicetak atau di-<em>copy </em>dalam <em>clipboard </em>yang selanjutnya bisa di-<em>paste </em>dalam aplikasi terapan lain misalnya, Photoshop atau Ms Word.</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmStatisticBar.btPrintClick(Sender: TObject);
<strong>begin</strong>
  ctStatisticBar.PrintLandscape;
<strong>end</strong>;

<strong>procedure </strong>TfmStatisticBar.btCopyClick(Sender: TObject);
<strong>begin</strong>
  ctStatisticBar.CopyToClipboardMetafile(True);
  ShowMessage('Grafik telah di-copy dalam clipboard');
<strong>end</strong>;</pre>
<p style="text-align: justify;">Metode <strong>PrintLandscape </strong>akan dipanggil ketika pengguna menekan komponen button btPrint. Metode tersebut akan mengeset <em>printer </em>pada orientasi <em>Landscape </em>(posisi kertas horisontal) kemudian metode <strong>Print </strong>akan dipanggil untuk mencetak gambar grafik tersebut.</p>
<p style="text-align: justify;">Pada prosedur btCopyClick, metode <strong>CopyToClipboardMetafile </strong>akan menyalin seluruh area grafik ke <em>clipboard</em> dalam format metafile dan menampilkan sebuah pesan bahwa proses <em>copy </em>telah dilakukan.</p>
<p style="text-align: justify;">Nuwun..</p>
<p style="text-align: justify;">Daftar  download untuk artikel ini:<br />
1. <a href="http://www.havetogether.com/downloads/TChart_Code.1.4.zip" title="Downloaded 44 hits"><span style="text-decoration: underline;">TChart Source Code ver.1.4 - 32.12 kB</span></a><br />
2. <a href="http://www.havetogether.com/downloads/StatisticBar_Code.zip" title="Downloaded 38 hits"><span style="text-decoration: underline;">Statistic Source Code - 3 kB</span></a><br />
3. <a href="http://www.havetogether.com/downloads/TChart_Application.1.4.zip" title="Downloaded 36 hits"><span style="text-decoration: underline;">TChart Application ver.1.4 - 650.95 kB</span></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.havetogether.com/menampilkan-nilai-statistik-dari-grafik.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Menampilkan Database dalam Grafik</title>
		<link>http://www.havetogether.com/menampilkan-database-dalam-grafik.html</link>
		<comments>http://www.havetogether.com/menampilkan-database-dalam-grafik.html#comments</comments>
		<pubDate>Wed, 24 Feb 2010 12:14:23 +0000</pubDate>
		<dc:creator>rumono</dc:creator>
				<category><![CDATA[Aplikasi Sederhana]]></category>

		<guid isPermaLink="false">http://www.havetogether.com/?p=345</guid>
		<description><![CDATA[Membaca banyak data dari suatu database tentu sangat melelahkan dan merepotkan, apalagi jika harus menganalisanya.  Data akan lebih mudah dibaca dan dianalisa ketika disajikan dalam bentuk grafik..]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Membaca banyak data dari suatu database tentu sangat melelahkan dan merepotkan, apalagi jika harus menganalisanya.  Data akan lebih mudah dibaca dan dianalisa ketika disajikan dalam bentuk grafik atau report yang bisa dicetak.</p>
<p style="text-align: justify;">Buka kembali project <strong>TChart </strong>seperti pada tulisan terdahulu, jika tidak punya download <a href="http://www.havetogether.com/downloads/TChart_Code.1.3.zip" title="Downloaded 105 hits"><span style="text-decoration: underline;">TChart Source Code ver.1.3</span></a>,  kemudian ekstrak dan klik ganda file TChart.dpr melalui Widows  Explorer. Sesuai dengan paragraf awal artikel ini download <a href="http://www.havetogether.com/downloads/Linked_Code.zip" title="Downloaded 81 hits"><span style="text-decoration: underline;">Linked Database Source Code</span></a>,  kemudian ekstrak di komputer kamu.. sebelum kamu menambahkan file .pas ke project, buatlah terlebih dahulu driver ODBC karena jika dipaksakan maka sebuah pesan error <em>[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified </em>akan muncul, dan program Delphi kamu akan <em>autoclose</em> (tertutup sendiri).</p>
<p style="text-align: justify;">Database yang akan dihubungkan dengan grafik memakai Ms Access, cara koneksi dengan program Delphi biasanya memakai komponen ADO melalui ODBC. Segera buat driver ODBC, dengan mengklik Start -&gt; Control Panel.. pada windows yang ditampilkan klik ganda menu Administrative Tools, klik ganda lagi pada menu Data Sources (ODBC) sampai muncul kotak dialog ODBC Data Source Administrator, pilih tab System DSN dan lakukan langkah-langkah seperti gambar di bawah ini</p>
<p style="text-align: justify;"><a href="http://www.havetogether.com/wp-content/uploads/2010/11/linked1_odbc1.jpg"><img class="alignnone size-full wp-image-1319" title="Membuat driver ODBC, langkah 1" src="http://www.havetogether.com/wp-content/uploads/2010/11/linked1_odbc1.jpg" alt="" width="415" height="354" /></a></p>
<p style="text-align: justify;"><a href="http://www.havetogether.com/wp-content/uploads/2010/11/linked2_odbc2.jpg"><img class="alignnone size-full wp-image-1320" title="Membuat driver ODBC, langkah 2" src="http://www.havetogether.com/wp-content/uploads/2010/11/linked2_odbc2.jpg" alt="" width="429" height="330" /></a></p>
<p style="text-align: justify;">Jika sudah selesai, klik kanan <em>mouse </em>pada project TChart.exe, pada menu yang  muncul klik Add.. kemudian  cari dan pilih 2 buah file .pas (uLinked, uqfmLinked) yang akan ditambahkan seperti  gambar  di bawah ini</p>
<p><a href="http://www.havetogether.com/wp-content/uploads/2010/11/linked3_addproject.jpg"><img class="alignnone size-full wp-image-1323" title="Menambahkan unit uLinked dan uQfmlinked ke project TChart" src="http://www.havetogether.com/wp-content/uploads/2010/11/linked3_addproject.jpg" alt="" width="590" height="341" /></a></p>
<p style="text-align: justify;">Seperti biasa aktifkan form fmMainTChart, kemudian klik ganda komponen <em>popupmenu </em>bernama pmOtherDemo.. pada <em>popmenu </em>yang muncul klik ganda menu Linked Database..</p>
<p style="text-align: justify;"><a href="http://www.havetogether.com/wp-content/uploads/2010/11/linked4_popmenulink.jpg"><img class="alignnone size-full wp-image-1324" title="Menu Linked Database" src="http://www.havetogether.com/wp-content/uploads/2010/11/linked4_popmenulink.jpg" alt="" width="590" height="283" /></a></p>
<p>Tambahkan code seperti di bawah ini  untuk menampilkan aplikasi ini melalui aplikasi TChart</p>
<pre style="padding-left: 30px;"><strong>procedure </strong>TfmMainTChart.miLinkedDatabaseClick(Sender: TObject);
<strong>begin</strong>
 fmLinked.ShowModal
<strong>end</strong>;</pre>
<p>Tekan tombol Run untuk menjalankan  aplikasi ini… jika muncul pesan <em>Form ‘fmMainTChart‘ references form  ‘fmLinked’ declarated in unit ‘uLinked’ which is not in your USES  list. Do you wish to add it?</em> tekan tombol Yes. Tekan kembali tombol  Run.. Jika tidak  ada pesan lain yang muncul berarti aplikasi telah berjalan dengan baik.</p>
<p style="text-align: justify;">1. <strong>Menghubungkan database dengan komponen grafik<br />
</strong></p>
<p style="text-align: justify;">Komponen yang dipakai dalam unit uLinked ini, sebenarnya turunan dari komponen TChart yaitu TDBChart, karena untuk menghubungkan database (melalui dataset) lebih cocok menggunakan komponen TDBChart. Selain penambahan nilai <strong>Dataset</strong> dalam <em>property</em> <strong>Data Source</strong> dari komponen TChartSeries, semua <em>property</em>-nya sama dengan komponen TChart. TChartSeries adalah komponen yang ada di dalam TDBChart yang nantinya dipakai untuk menampilkan data dalam wujud grafik.. untuk lebih jelasnya klik ganda komponen TDBChart pada unit uLinked, di sana ada sebuah Series1 (series jenis Bar, atau TBarSeries), perhatikan gambar di bawah</p>
<p style="text-align: justify;"><a href="http://www.havetogether.com/wp-content/uploads/2010/11/linked5_datasetseries.jpg"><img class="alignnone size-full wp-image-1325" title="Menentukan datasource berupa tabel database" src="http://www.havetogether.com/wp-content/uploads/2010/11/linked5_datasetseries.jpg" alt="" width="431" height="352" /></a></p>
<p style="text-align: justify;">Pada gambar di atas dipilih data source jenis <strong>Dataset</strong> dan data yang akan ditampilkan berasal dari tabel Orders (direfresentasikan dalam komponen <strong>tbOrdes</strong>), kemudian sebagai sumbu Y dipilih field <strong>AmountPaid</strong>, sedang sumbu X field <strong>SaleDate</strong>.</p>
<p style="text-align: justify;"><img class="alignnone size-full wp-image-1326" title="linked6_coding" src="http://www.havetogether.com/wp-content/uploads/2010/11/linked6_coding.jpg" alt="" width="558" height="158" /></p>
<p style="text-align: justify;">Perhatikan deklarasi yang ditambahkan dalam bagian <strong>published </strong>unit uLinked (bagian ini menggantikan bagian public, sebenarnya tidak ada alasan khusus untuk menghapus bagian public.. daripada kosong, kan?!&#8230;) juga function GetCompanyGrid, yang berisi code :</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>function </strong>TfmLinked.GetCompanyGrid: <strong>String</strong>;
<strong>begin</strong>
 Result:= tbCustomer.FieldbyName('COMPANY').AsString;
<strong>end</strong>;</pre>
<p style="text-align: justify;">Function ini hanya untuk mendapatkan nilai field COMPANY dari record yang dipilih, ketika variabel FCompanyGrid dipanggil. Variabel ini nantinya dipakai sebagai title dari series dalam report dengan menggunakan Quick Report..</p>
<p style="text-align: justify;"><strong>Prosedur untuk me-<em>refresh</em> data yang ditampilkan dalam grafik<br />
</strong></p>
<p style="text-align: justify;">Ketika terjadi <em>scrolling</em> atau <em>editing</em> data pada dataset master (dsCustomer, reprensetasi dari tabel Customer) maka data pada dataset client (dsOrders, representasi dari tabel Orders) otomatis berubah sesuai dengan data master-nya. Logikanya data-data yang ditampilkan dalam grafik seharusnya berubah mengikuti nilai dari tabel Orders (ingat dataset yang dimasukkan dalam Series1 adalah tbOrders) . Untuk itu Klik ganda sel di sebelah kanan event <strong>OnDataChange</strong> pada komponen <em>TDataSource</em> <strong>dsCustomer</strong>, dan lihat code-nya.</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmLinked.dsCustomerDataChange(Sender: TObject; Field: TField);
<strong>begin</strong>
 dbcLinked.CheckDataSource(Series1);
<strong>end</strong>;</pre>
<p style="text-align: justify;">Metode <strong>CheckDataSource </strong>akan me-<em>refresh</em> semua data pada TChartSeries baik dari dataset Query, Table atau sumber data TChartSeries lain. Metode ini dapat dipanggil secara rutin jika kita ingin menambahkan atau memodifikasi data yang ditampilkan secara <em>realtime </em>pada TChartSeries. Jadi data yang di-plot pada <em>TChartSeries</em> <strong>Series1 </strong>akan berubah ketika ada perubahan data pada dataset <strong>tbOrders</strong>.</p>
<p style="text-align: justify;"><strong>Mem-<em>preview </em>report</strong></p>
<p style="text-align: justify;">Selain ditampilkan dalam aplikasi, agar grafik dapat dicetak maka perlu di-<em>preview </em>terlebih dahulu. Manfaatkan komponen Button yang ada dengan mengklik ganda komponen tersebut dan ketikkan code berikut :</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmLinked.btPrintPreviewClick(Sender: TObject);
<strong>begin</strong>
 qrLinked.Preview;
<strong>end</strong>;</pre>
<p style="text-align: justify;">2. <strong>Membuat report dengan Quick Report</strong></p>
<p style="text-align: justify;">Berikut tip untuk yang belum mengetahui cara praktis membuat form report dengan QuickReport, klik menu File -&gt; New -&gt; Other&#8230; pada kotak dialog New Items yang muncul, aktifkan tab New pilih Report.. maka sebuah form yang hanya terdiri atas komponen TQuickRep akan dibuatkan.</p>
<p style="text-align: justify;">Dalam form qrLinked (dari unit uqfmLinked), hanya band summary yang diaktifkan (cuma <em>property </em>Bands.HasSummary yang diberi nilai True), kemudian komponen TQRChart ditambahkan pada band summary ini. Pada komponen TQRChart tersebut memang disengaja tidak ada series yang dibuat, karena akan dibuat secara <em>realtime </em>melalui prosedur event <strong>BeforePrint </strong>dari komponen <em>TQuickRep </em><strong>qrLinked</strong>, seperti code di bawah ini.. tetapi sebelumnya deklarasikan variabel <strong>bsNewSeries </strong>dalam bagian <strong>public </strong>dari unit uqfmLinked.</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>public</strong>
 bsNewSeries: TBarSeries;
</pre>
<pre style="padding-left: 30px;"><strong>procedure </strong>TqrLinked.QuickRepBeforePrint(Sender: TCustomQuickRep;
  <strong>var </strong>PrintReport: Boolean);
<strong>begin</strong>
 <strong>if  </strong>bsNewSeries = <strong>nil then</strong>
 <strong>begin</strong>
   bsNewSeries:= TBarSeries.Create(Self);
   bsNewSeries.ParentChart:= qrdbcLinked;
   bsNewSeries.Title:= fmLinked.FCompanyGrid;
   bsNewSeries.BarStyle:= bsRectangle;
   bsNewSeries.SeriesColor:= clGreen;
   bsNewSeries.Marks.Visible:= False;
   bsNewSeries.DataSource:= fmLinked.tbOrders;
   bsNewSeries.YValues.ValueSource:= 'AmountPaid';
   bsNewSeries.XLabelsSource:= 'SaleDate';
 <strong>end</strong>;<strong>
end</strong>;</pre>
<p style="text-align: justify;">Prosedur di atas sebenarnya hanya memberi nilai pada beberapa <em>property </em>dari series dalam bentuk code. Catatan yang perlu diperhatikan adalah title dari series yang dibuat secara <em>realtime </em>tersebut sesuai dengan nilai dari variabel <strong>FCompanyGrid </strong>pada unit uLinked, warna bar &#8216;Hijau&#8217;, dan Data Source, sumbu Y, sumbu X dibuat sama dengan komponen <em>TDBChart </em>dalam unit uLinked.</p>
<p style="text-align: justify;">Untuk membebaskan memori dari series yang terbentuk secara <em>realtime </em>tadi maka klik ganda sel di sebelah kanan event <strong>AfterPreview </strong>dari komponen <em>TQuickRep </em><strong>qrLinked</strong>.</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TqrLinked.QuickRepAfterPreview(Sender: TObject);
<strong>begin</strong>
 bsNewSeries.Free;
 bsNewSeries:= <strong>nil</strong>;
<strong>end</strong>;</pre>
<p style="text-align: justify;">Nuwun..</p>
<p style="text-align: justify;">Daftar download untuk artikel ini:<br />
1. <a href="http://www.havetogether.com/downloads/TChart_Code.1.3.zip" title="Downloaded 105 hits"><span style="text-decoration: underline;">TChart Source Code ver.1.3 - 8.65 kB</span></a><br />
2. <a href="http://www.havetogether.com/downloads/Linked_Code.zip" title="Downloaded 81 hits"><span style="text-decoration: underline;">Linked Database Source Code - 23.43 kB</span></a><br />
3. <a href="http://www.havetogether.com/downloads/TChart_Application.1.3.zip" title="Downloaded 74 hits"><span style="text-decoration: underline;">TChart Application ver.1.3 - 647 kB</span></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.havetogether.com/menampilkan-database-dalam-grafik.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zoom dan Scrolling Grafik dengan Keyboard</title>
		<link>http://www.havetogether.com/zoom-dan-scrolling-grafik-dengan-keyboard.html</link>
		<comments>http://www.havetogether.com/zoom-dan-scrolling-grafik-dengan-keyboard.html#comments</comments>
		<pubDate>Wed, 20 Jan 2010 23:49:33 +0000</pubDate>
		<dc:creator>rumono</dc:creator>
				<category><![CDATA[Aplikasi Sederhana]]></category>
		<category><![CDATA[aplikasi delphi]]></category>
		<category><![CDATA[chart]]></category>
		<category><![CDATA[grafik]]></category>

		<guid isPermaLink="false">http://www.havetogether.com/?p=336</guid>
		<description><![CDATA[Salah satu feature yang menarik dari aplikasi grafik yang dibuat dengan komponen Delphi, TChart, adalah bisa mengontrol grafik dengan menggunakan tombol-tombol Keyboard dan mudah dalam hal coding..]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Kontrol grafik, seperti <em>zoom</em> (memperbesar/memperkecil) atau <em>scrolling</em> (menggeser), dalam suatu aplikasi biasanya dilakukan dengan tombol navigasi. Salah satu feature yang menarik dari aplikasi grafik yang dibuat dengan komponen Delphi, <strong>TChart</strong>, adalah bisa mengontrol grafik dengan menggunakan tombol-tombol <em>Keyboard</em> dan mudah dalam hal <em>coding</em>.</p>
<p style="text-align: justify;">Lanjutkan project <strong>TChart </strong>pada tulisan terdahulu, atau download <a href="http://www.havetogether.com/downloads/TChart_Code.1.2.zip" title="Downloaded 28 hits"><span style="text-decoration: underline;">TChart Source Code ver.1.2</span></a>, kemudian ekstrak dan jalankan program Delphi, buka project <strong> TChart </strong>(atau klik ganda file TChart.dpr melalui Widows Explorer). Selanjutnya download <a href="http://www.havetogether.com/downloads/Keyboard_Code.zip" title="Downloaded 26 hits"><span style="text-decoration: underline;">Keyboard Control Source Code</span></a>, kemudian ekstrak dan tambahkan pada project TChart  tersebut dengan meng-klik kanan <em>mouse </em>pada project TChart.exe. Pada menu yang muncul klik Add.. kemudian cari file .pas yang ingin ditambahkan seperti gambar di bawah ini</p>
<p style="text-align: justify;"><a href="http://www.havetogether.com/wp-content/uploads/2010/11/keyboard1_addproject.jpg"><img class="alignnone size-full wp-image-1261" title="Menambahkan unit uKeyboard ke project TChart" src="http://www.havetogether.com/wp-content/uploads/2010/11/keyboard1_addproject.jpg" alt="" width="590" height="368" /></a></p>
<p style="text-align: justify;">Aktifkan form fmMainTChart, kemudian klik ganda komponen <em>popupmenu </em>bernama pmOtherDemo.. pada <em>popmenu</em> yang muncul klik ganda menu Keyboard Scrolling..</p>
<p style="text-align: justify;"><a href="http://www.havetogether.com/wp-content/uploads/2010/11/keyboard2_popmenukeyboard.jpg"><img class="alignnone size-full wp-image-1262" title="Menu Keyboard Scrolling" src="http://www.havetogether.com/wp-content/uploads/2010/11/keyboard2_popmenukeyboard.jpg" alt="" width="590" height="283" /></a></p>
<p style="text-align: justify;">Tambahkan code seperti di bawah ini untuk menampilkan aplikasi ini melalui aplikasi TChart</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmMainTChart.miKeyboardScrollingClick(Sender: TObject);
<strong>begin</strong>
  fmKeyboard.ShowModal;
<strong>end</strong>;</pre>
<p style="text-align: justify;">Tekan tombol Run untuk menjalankan aplikasi ini… jika muncul pesan <em>Form ‘fmMainTChart ‘ references form ‘fmKeyboard’ declarated in unit ‘uKeyboard’ which is not in your USES list. Do you wish to add it?</em> tekan tombol Yes. Tekan kembali tombol Run.. seharusnya aplikasi TChart telah berjalan dengan baik..</p>
<p style="text-align: justify;">1. <strong>Inisialisasi aplikasi melalui prosedur event OnCreate dan OnShow form fmKeyboard</strong></p>
<p style="text-align: justify;">Seperti aplikasi pada umumnya, aplikasi ini juga perlu diinisialisasi melalui event <strong>OnCreate </strong>dan <strong>OnShow </strong>form ini (<strong>fmKeyboard</strong>). Klik ganda sel di sebelah kanan  event <strong>OnCreate </strong>form <strong>fmKeyboard</strong></p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmKeyboard.FormCreate(Sender: TObject);
<strong>begin</strong>
 Series1.FillSampleValues(500);
<strong>end</strong>;
</pre>
<p style="text-align: justify;">prosedur di atas hanya untuk menginisialisasi grafik, yaitu nilai random dengan rentang sebanyak 500 data di-plot dalam TChartSeries melalui metode <strong>FillSampleValues</strong>.</p>
<p style="text-align: justify;">Berikutnya klik ganda sel di sebelah kanan  event <strong>OnShow </strong>form <strong>fmKeyboard</strong></p>
<pre style="padding-left: 30px;"><strong>procedure </strong>TfmKeyboard.FormShow(Sender: TObject);
<strong>begin </strong>
  ctKeyboard.SetFocus;
<strong>end</strong>;</pre>
<p style="text-align: justify;">Proses <em>zoom</em> dan <em>scrolling</em> grafik dengan menggunakan tombol <em>Keyboard </em>hanya dapat dilakukan jika komponen TChart yang dimaksud menjadi focus form. Sehingga setiap kali aplikasi ini ditampilkan, komponen TChart (<strong>ctKeyboard</strong>) harus di-set menjadi fokus. Prosedur event OnShow tersebut sebenarnya bisa diganti (dihapus) dengan memberi nilai <strong>ctKeyboard </strong>pada property <em>ActiveControl </em>form <strong>fmKeyboard</strong>. Tetapi jika aplikasi mempunyai komponen TChart yang dapat di-<em>zoo</em>m dan <em>scrolling </em>lebih dari satu, pemberian nilai property <em>ActiveControl</em> tersebut tidak dapat dilakukan</p>
<p style="text-align: justify;">2. <strong>Prosedur untuk mengontrol grafik dengan <em>Keyboard</em></strong></p>
<p style="text-align: justify;">Ketika user menekan suatu tombol <em>Keyboard (</em>atau kombinasi beberapa tombol) dan form tersebut sedang diaktifkan, perintah-perintah dalam event <strong>OnKeyDown </strong>akan dijalankan. Event <strong>OnKeyDown </strong>akan terjadi jika property <em>KeyPreview </em>form bernilai True. Klik ganda sel di sebelah kanan event <strong>OnKeyDown </strong>form <strong>fmKeyboard</strong></p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmKeyboard.FormKeyDown(Sender: TObject; <strong>var </strong>Key: Word;
 Shift: TShiftState);
<strong>var</strong>
  dX, dY, dXRange, dYRange: Double;
<strong>begin</strong>
  dX:= 0;
  dY:= 0;

 <strong> with </strong>Series1.GetHorizAxis <strong>do </strong>dXRange:= Maximum - Minimum;
 <strong> with </strong>Series1.GetVertAxis <strong>do </strong>dYRange:= Maximum - Minimum;

 <strong> if </strong>ssShift <strong>in </strong>Shift <strong>then</strong>
 <strong> begin</strong>
    <strong>Case </strong>key <strong>of</strong>
      VK_LEFT, VK_UP    : ctKeyboard.ZoomPercent( 110 );
      VK_RIGHT, VK_DOWN : ctKeyboard.ZoomPercent( 90 );
 <strong>   end</strong>;
    exit;
 <strong> end</strong>
 <strong> else</strong>
 <strong> Case </strong>key <strong>of</strong>
    VK_LEFT  : dX:= dXRange/100;
    VK_RIGHT : dX:= -dXRange/100;
    VK_UP    : dY:= -dYRange/100;
    VK_DOWN  : dY:= dYRange/100;
    VK_NEXT  : dY:= dYRange/10;
    VK_PRIOR : dY:= -dYRange/10;
    VK_SPACE : <strong>begin </strong>ctKeyboard.UndoZoom; Exit; <strong>end</strong>;
 <strong> end</strong>;

 <strong> if </strong>chInverted.Checked <strong>then</strong>
 <strong> begin</strong>
    dX:= -dX;
    dY:= -dY;
 <strong> end</strong>;

 <strong> with </strong>ctKeyboard <strong>do</strong>
 <strong> begin</strong>
    LeftAxis.Scroll(dY, chLimit.Checked);
    RightAxis.Scroll(dY, chLimit.Checked);
    BottomAxis.Scroll(dX, chLimit.Checked);
    TopAxis.Scroll(dX, chLimit.Checked);
    SetFocus;
 <strong> end</strong>;<strong>
end</strong>;
</pre>
<p style="text-align: justify;">Proses <em>scrolling </em>komponen TChart sebenarnya hanya menggeser range skala sumbu horisontal atau skala sumbu vertikal (nilai property <em>Maximum </em>dikurangi dengan property <em>Minimum</em>). Nilai skala maksimum dan minimum sumbu horisontal grafik diperoleh setelah dihubungkan dengan menggunakan metode <strong>GetHorizAxis </strong>dan untuk sumbu vertikal dengan metode <strong>GetVertAxis</strong>. Range skala sumbu horisontal grafik disimpan dalam variabel <strong>dXRange</strong>, sedang variabel <strong>dYRange </strong>untuk menyimpan range skala sumbu vertikal grafik. Flag <strong>ssShift </strong>merupakan salah satu nilai klas bertipe TShiftState yang digunakan untuk menentukan keadaan tombol <em>Keyboard </em><strong>Alt</strong>, <strong>Ctrl</strong>, <strong>Shift </strong>dan tombol <em>Mouse</em>. Tabel berikut ini menjelaskan masing-masing arti nilai flag :</p>
<table style="width: 274px;" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td style="text-align: center;" width="75" valign="top"><strong>Nilai</strong></td>
<td style="text-align: center;" width="199" valign="top"><strong>Arti </strong></td>
</tr>
<tr>
<td width="75" valign="top">ssShift</td>
<td width="199" valign="top">Tombol   <em>Keyboard Shift</em> ditekan</td>
</tr>
<tr>
<td width="75" valign="top">ssAlt</td>
<td width="199" valign="top">Tombol   <em>Keyboard Alt</em> ditekan</td>
</tr>
<tr>
<td width="75" valign="top">ssCtrl</td>
<td width="199" valign="top">Tombol   <em>Keyboard Ctrl</em> ditekan</td>
</tr>
<tr>
<td width="75" valign="top">ssLeft</td>
<td width="199" valign="top">Tombol   kiri <em>Mouse</em> ditekan</td>
</tr>
<tr>
<td width="75" valign="top">ssRight</td>
<td width="199" valign="top">Tombol   kanan <em>Mouse</em> ditekan</td>
</tr>
<tr>
<td width="75" valign="top">ssMiddle</td>
<td width="199" valign="top">Tombol   tengah <em>Mouse</em> ditekan</td>
</tr>
<tr>
<td width="75" valign="top">ssDouble</td>
<td width="199" valign="top"><em>Mouse</em> diklik ganda</td>
</tr>
</tbody>
</table>
<p style="text-align: justify;">Pada prosedur event <strong>OnKeyDown </strong>di atas, <strong>jika tombol Shift ditekan bersamaan dengan tombol panah kiri atau atas (VK_LEFT, VK_UP) maka grafik diperbesar 1,1 kalinya (110 %). Dan grafik diperkecil 90 % jika kombinasi tombol Shift dan tombol panah kanan atau bawah (VK_RIGHT, VK_DOWN) ditekan user</strong>. Penggunaan prosedur <strong>Exit </strong>untuk mengeluarkannya dari prosedur yang sekarang sedang dijalankan. <strong>Jika tombol <em>Keyboard </em>Shift tidak ditekan, kemudian user menekan salah satu tombol panah atau Page Up atau Page Down maka proses scrolling grafik akan dilakukan</strong> dengan menggunakan metode <strong>Scroll </strong>pada masing-masing sumbu grafik. Metode Scroll mempunyai <em>sintax</em> :</p>
<pre style="padding-left: 30px;"><strong>procedure </strong>Scroll(<strong>Const </strong>Offset: Double; InsideLimits: Boolean);</pre>
<p style="text-align: justify;">metode ini akan mengeser nilai skala maksimum dan minimum suatu sumbu grafik berdasarkan konstanta <strong>Offset</strong>, dan jika ingin menggeser grafik secara tidak terbatas maka variabel <strong>InsideLimits </strong>harus bernilai False. Pada prosedur event <strong>OnKeyDown </strong>di atas, nilai variabel <strong>InsideLimits </strong>tergantung pada nilai property <em>Checked</em> komponen TCheckBox <strong>chLimit</strong> atau sederhananya di-centang atau tidak pada <em>checkbox</em> <strong>Scrolling Limited</strong>.</p>
<p style="text-align: justify;">Nilai variabel <strong>dX </strong>menentukan <em>scrolling </em>sumbu horisontal sedang variabel <strong>dY </strong>untuk <em>scrolling </em>sumbu vertikal grafik. Kedua variabel tersebut pertama kali diinisialisasi dengan nilai 0 untuk menghapus nilai sebelumnya. Jika user menekan salah satu tombol panah maka grafik akan digeser searah tanda panah tersebut, sebesar nilai range sumbu grafik dibagi dengan 100.</p>
<p style="text-align: justify;">Pada sumbu horisontal, nilai range sumbu horisontal (variabel <strong>dXRange</strong>) adalah 500 data sehingga jika pengguna menekan tombol panah kiri maka grafik akan digeser ke kiri sebesar 5 titik (= 500/100).</p>
<p style="text-align: justify;">Sedang jika pengguna menekan tombol <strong>Page Up</strong> (VK_PRIOR) atau <strong>Page Down</strong> (VK_NEXT), grafik akan digeser secara vertikal sebesar nilai range sumbu vertikal (variabel <strong>dYRange</strong>) dibagi 10. Nilai range sumbu vertikal tergantung pada data random yang di-plot dalam TChartSeries.</p>
<p style="text-align: justify;">Untuk me-reset <em>zoom </em>grafik digunakan tombol <strong>SPACE </strong>(VK_SPACE) dengan memanggil metode <strong>UndoZoom</strong>. Dan arah proses <em>scrolling </em>akan terbalik dengan arah tombol panah jika <em>checkbox </em><strong>Inverted Scrolling</strong><strong> </strong>di-centang, yaitu hanya dengan memberi nilai minus pada variabel <strong>dX </strong>dan <strong>dY</strong>.</p>
<p style="text-align: justify;">3. <strong>Mengembalikan fokus pada grafik setelah <em>mouse</em> dialihkan ke area di luar grafik<br />
</strong></p>
<p style="text-align: justify;"><em>Zoom </em>dan <em>Scrolling </em>dengan <em>Keyboard </em>hanya dapat terjadi jika fokus aplikasi ada pada komponen <em>TChart </em>yang dimaksud. Makanya setelah mengklik dua buah <em>checkbox</em>, <strong>Inverted Scrolling</strong> dan <strong>Scrolling Limited</strong>, fokus perlu dikembalikan ke grafik  (komponen <em>TChart </em><strong>ctKeyboard</strong>). Klik ganda masing masing komponen <em>TCheckBox</em>, sehingga pada jendela <em>Code Editor</em> akan muncul dua buah prosedur bernama <strong>chInvertedClick </strong>dan <strong>chLimitClick</strong>.</p>
<pre style="padding-left: 30px;"><strong>procedure </strong>TfmKeyboard.chInvertedClick(Sender: TObject);
<strong>begin</strong>
  ctKeyboard.SetFocus;
<strong>end</strong>;</pre>
<pre style="padding-left: 30px;"><strong>procedure </strong>TfmKeyboard.chLimitClick(Sender: TObject);
<strong>begin</strong>
  ctKeyboard.SetFocus;
  <strong>if </strong>chLimit.Checked <strong>then </strong>
    ShowMessage('Scrolling grafik terbatas hanya pada data yang telah di-plot.'+#13+
                'Lakukan zoom terlebih dahulu sebelum scrolling grafik.');
<strong>end</strong>;</pre>
<p style="text-align: justify;">Tambahan kode program pada prosedur <strong>chlimitsClick</strong>, untuk menampilkan sebuah pesan ketika <em>checkbox </em><strong>Scrolling Limited</strong> di-centang.</p>
<p style="text-align: justify;">Nuwun..</p>
<p style="text-align: justify;">Daftar download untuk artikel ini:<br />
1. <a href="http://www.havetogether.com/downloads/TChart_Code.1.2.zip" title="Downloaded 28 hits"><span style="text-decoration: underline;">TChart Source Code ver.1.2 - 6.44 kB</span></a><br />
2. <a href="http://www.havetogether.com/downloads/Keyboard_Code.zip" title="Downloaded 26 hits"><span style="text-decoration: underline;">Keyboard Control Source Code - 2.18 kB</span></a><br />
3. <a href="http://www.havetogether.com/downloads/TChart_Application.1.2.zip" title="Downloaded 27 hits"><span style="text-decoration: underline;">TChart Application ver.1.2 - 297.07 kB</span></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.havetogether.com/zoom-dan-scrolling-grafik-dengan-keyboard.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Membuat Cross-hair pada Grafik dengan Komponen TChart</title>
		<link>http://www.havetogether.com/membuat-cross-hair-pada-grafik-dengan-komponen-tchart.html</link>
		<comments>http://www.havetogether.com/membuat-cross-hair-pada-grafik-dengan-komponen-tchart.html#comments</comments>
		<pubDate>Tue, 15 Dec 2009 23:52:33 +0000</pubDate>
		<dc:creator>rumono</dc:creator>
				<category><![CDATA[Aplikasi Sederhana]]></category>
		<category><![CDATA[aplikasi delphi]]></category>
		<category><![CDATA[chart]]></category>
		<category><![CDATA[cross-hair]]></category>
		<category><![CDATA[grafik]]></category>

		<guid isPermaLink="false">http://www.havetogether.com/?p=276</guid>
		<description><![CDATA[Membaca banyak data dari suatu database tentu sangat melelahkan dan merepotkan, apalagi jika harus menganalisanya.  Data akan lebih mudah dibaca dan dianalisa ketika disajikan dalam bentuk grafik atau report yang bisa dicetak..]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Grafik yang dibuat dengan komponen delphi TChart memiliki beberapa feature yang menarik untuk dikembangkan, salah satunya menampilkan garis <em>cross</em> dan nilainya sesuai dengan posisi <em>mouse</em> pada area grafik tersebut. Dan pembuatan garis silang <strong><em>cross-hair</em></strong> pada area grafik akan memudahkan visualisasi posisi <em>mouse</em> tersebut terhadap masing-masing sumbu grafik.</p>
<p style="text-align: justify;">Buka kembali aplikasi TChart yang dulu pernah kamu download, kemudian ganti komponen TSpeedButton menjadi TPDJButton dan tambahkan sebuah popup menu untuk komponen TPDJButton tersebut. Atau download lagi <a href="http://www.havetogether.com/downloads/TChart_Code.1.1.zip" title="Downloaded 107 hits"><span style="text-decoration: underline;">TChart Source Code ver.1.1</span></a>, ekstrak dan buka dengan program delphi.</p>
<p style="text-align: justify;">Secara default, desktop program delphi hanya menampilkan jendela Menu Utama, Object TreeView, Object Inspector, Form Designer dan Source Code. Tambahkan jendela Project Manager, dengan meng-klik menu View -&gt; Project Manager, kemudian drag jendela Object TreeView, Object Inspector dalam jendela Project Manager sehingga seperti gambar di bawah ini, dan klik kanan <em>mouse</em> pada salah satu tab, pilih Left pada popup menu yang muncul.</p>
<p style="text-align: justify;"><a href="http://www.havetogether.com/wp-content/uploads/2010/11/tchart1_projectmanager.jpg"><img class="alignnone size-full wp-image-1052" title="Mengatur jendela Project Manager, TreeView, Inspector" src="http://www.havetogether.com/wp-content/uploads/2010/11/tchart1_projectmanager.jpg" alt="tchart1_projectmanager" width="413" height="305" /></a></p>
<p style="text-align: justify;">Biasanya saya menambahkan jendela To-Do List (dari menu View juga, fungsi jendela ini untuk mencatat daftar yang akan dilakukan) dan mengatur tampilan desktop program delphi seperti gambar di bawah ini&#8230; simpan setting desktop program delphi ini dengan mengklik tombol save current desktop</p>
<p style="text-align: justify;"><a href="http://www.havetogether.com/wp-content/uploads/2010/11/tchart2_desktopdelphi.jpg"><img class="alignnone size-full wp-image-1054" title="Menyimpan setting desktop program Delphi" src="http://www.havetogether.com/wp-content/uploads/2010/11/tchart2_desktopdelphi.jpg" alt="tchart2_desktopdelphi" width="537" height="350" /></a></p>
<p style="text-align: justify;">Selanjutnya download <a href="http://www.havetogether.com/downloads/Cross-Hair_Code.zip" title="Downloaded 34 hits"><span style="text-decoration: underline;">Cross-Hair Source Code</span></a>, kemudian ekstrak dan tambahkan pada aplikasi TChart  dengan meng-klik kanan <em>mouse</em> pada project <strong>TChart.exe</strong> kemudian cari file .pas yang ingin ditambahkan (lihat gambar di bawah ini)</p>
<p style="text-align: justify;"><a href="http://www.havetogether.com/wp-content/uploads/2010/11/crosshair1_addproject.jpg"><img class="alignnone size-full wp-image-1056" title="Menambahkan unit uCrossHair ke project TChart" src="http://www.havetogether.com/wp-content/uploads/2010/11/crosshair1_addproject.jpg" alt="crosshair1_addproject" width="590" height="366" /></a></p>
<p style="text-align: justify;">Klik ganda popup menu yang ada dalam form <strong>fmMainTChart</strong>, kemudian klik menu <strong>Cross-Hair</strong></p>
<p style="text-align: justify;"><a href="http://www.havetogether.com/wp-content/uploads/2010/11/crosshair2_popmenucross.jpg"><img class="alignnone size-full wp-image-1082" title="Menu Cross-Hair" src="http://www.havetogether.com/wp-content/uploads/2010/11/crosshair2_popmenucross.jpg" alt="crosshair2_popmenucross" width="590" height="350" /></a></p>
<p style="text-align: justify;">Tambahkan code di bawah ini untuk menampilkan aplikasi cross-hair melalui aplikasi TChart.</p>
<pre style="text-align: justify; padding-left: 30px;">procedure TfmMainTChart.miCrossHairClick(Sender: TObject);
begin
 fmCrossHair.ShowModal
end;</pre>
<p style="text-align: justify;">Tekan tombol Run untuk menjalankan aplikasi ini&#8230; jika muncul pesan <em>Form &#8216;fmMainTChart &#8216; references form &#8216;fmCrossHair&#8217; declarated in unit &#8216;uCrossHair&#8217; which is not in your USES list. Do you wish to add it? </em>tekan tombol Yes.</p>
<p style="text-align: justify;">Sedikit penjelasan <em>code</em> pada unit <em>uCrossHair</em>, perhatikan bagian <strong>public</strong> unit</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>public</strong>
 dValueX, dValueY: Double;
 iOldValueX, iOldValueY: Integer;
 clCrossHairColor: TColor;
 psCrossHairStyle: TPenStyle;
 <strong>procedure</strong> DrawCross(ax, ay: Integer);</pre>
<p style="text-align: justify;">Variabel <strong>dValueX</strong>, <strong>dValueY</strong> untuk menyimpan posisi horisontal dan vertikal saat <em>mouse</em> berada pada suatu titik dalam area grafik. Dan agar nantinya nilai posisi tersebut tidak hilang setelah <em>mouse</em> digeser, disimpan dalam variabel <strong>iOldValueX</strong> dan <strong>iOldValueY</strong>.</p>
<p style="text-align: justify;">Nilai variabel <strong>clCrossHairColor</strong>, bertipe TColor, untuk mengisi warna yang akan dipakai saat membuat garis <em>cross-hair</em> pada grafik. Sedang Style garis <em>cross-hair</em> berasal dari nilai dalam variabel <strong>psCrossHairStyle</strong>.</p>
<p style="text-align: justify;">1. <strong>Membuat garis <em>cross-hair</em> dengan prosedur DrawCross</strong></p>
<p style="text-align: justify;">Prosedur <strong>DrawCross</strong> untuk membuat garis <em>cross-hair</em> pada grafik dengan komponen <em>TChart</em> sebagai kanvas-nya</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmCrossHair.DrawCross(ax, ay: Integer);
<strong>begin</strong>
 <strong>with </strong>ctCrossHair, Canvas <strong>do</strong>
 begin
   Pen.Color:= clCrossHairColor;
   Pen.Style:= psCrossHairStyle;
   Pen.Mode:= pmXor;
   Pen.Width:= 1;
   MoveTo(ax, ChartRect.Top-Height3D);
   LineTo(ax, ChartRect.Bottom-Height3D);
   MoveTo(ChartRect.Left+Width3D, ay);
   LineTo(ChartRect.Right+Width3D, ay);
 <strong>end;</strong>
<strong>end;</strong></pre>
<p style="text-align: justify;">Warna garis <em>cross-hair</em> nantinya sesuai dengan nilai variabel <strong>clCrossHairColor</strong>, begitu juga dengan <em>style</em> dari garis <em>cross-hair</em> sesuai dengan nilai variabel <strong>psCrossHairStyle</strong>. Nilai kedua variabel ini ditentukan dalam prosedur  event <strong>OnShow</strong> dari form <strong>fmCrossHair</strong>. Sedang warna garis pertemuan <em>cross-hair</em> (antara garis horisontal dan vertikal) sesuai dengan mode yang dipilih, penjelasan mengenai property style dan mode komponen TPen download <a href="http://www.havetogether.com/downloads/TPen-Description.pdf" title="Downloaded 61 hits"><span style="text-decoration: underline;">TPen Property Description</span></a>. <em>Width</em> menentukan ketebalan garis tersebut.</p>
<p style="text-align: justify;">Metode <strong>Move To</strong> akan mengubah posisi <em>mouse</em> ke suatu koordinat. Sedang metode <strong>Line To</strong> menggambar garis pada kanvas dari koordinat yang ditentukan dalam metode <strong>Move To</strong> sampai koordinat baru ditentukan.</p>
<p style="text-align: justify;">Kombinasi metode MoveTo dan LineTo yang pertama untuk menggambar garis <em>cross-hair</em> vertikal, sedang kombinasi yang kedua untuk menggambar garis <em>cross-hair</em> horisontal. Pengurangan koordinat <strong>y</strong> dengan nilai <em>property</em> <strong>Height3D</strong> pada kombinasi pertama dan penambahan koordinat <strong>x</strong> dengan <em>property</em> <strong>Width3D</strong> pada kombinasi kedua untuk mengantisifasi tampilan grafik 3D (tiga dimensi, jika <em>checkbox</em> 3 Dimensions pada tab Chart -&gt; tab 3D diberi tanda &#8216;centang&#8217;), agar garis <em>cross-hair</em> tetap terlihat menempel pada dinding grafik. Nilai <em>property</em> Height3D dan Width3D sesuai dengan nilai pada 3D%, untuk melihatnya klik ganda pada komponen TChart dan aktifkan tab 3D seperti gambar di bawah ini</p>
<p style="text-align: justify;"><a href="http://www.havetogether.com/wp-content/uploads/2010/11/crosshair3_3dchart.jpg"><img class="alignnone size-full wp-image-1083" title="sub tab 3D" src="http://www.havetogether.com/wp-content/uploads/2010/11/crosshair3_3dchart.jpg" alt="crosshair3_3dchart" width="431" height="351" /></a></p>
<p style="text-align: justify;">2. <strong>Menginisialisasi aplikasi dengan prosedur event OnShow pada form fmCrossHair</strong></p>
<p style="text-align: justify;">Prosedur ini untuk menentukan nilai-nilai awal dari aplikasi (klik ganda sel di sebelah kanan  event <strong>OnShow</strong> pada <em>form</em> <strong>fmCrossHair</strong>)</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure</strong> TfmCrossHair.FormShow(Sender: TObject);
<strong>begin</strong>
 Series1.FillSampleValues(30);
 iOldValueX:= -1;
 clCrossHairColor:= clAqua;
 psCrossHairStyle:= psSolid;
 chCrossClick(Sender);
<strong>end</strong>;</pre>
<p style="text-align: justify;">Metode <strong>FillSampleValues</strong> akan mem-plot nilai random pada grafik dengan rentang data sebanyak angka dalam tanda kurung. Posisi horisontal <em>mouse</em> yang lama di-reset dengan memberi nilai -1 pada variabel <strong>iOldValueX</strong>. Dan warna pertemuan kedua garis <em>cross-hair</em> bernilai <strong>clAqua</strong>, disimpan dalam variabel <strong>clCrossHairColo</strong>r. Garis <em>cross-hair</em> ditampilkan solid (tidak terputus-putus) dengan memberi nilai <strong>psSolid</strong> pada variabel <strong>psCrossHairStyle</strong>. Dan code yang terakhir memangil prosedur <strong>chCrossClick</strong>, isinya menentukan apakah kursor <em>mouse</em> dalam bentuk <em>cross</em> atau <em>default</em> (tanda panah penunjuk).</p>
<p style="text-align: justify;">3. <strong>Mengubah kursor <em>mouse</em> sesuai tanda &#8216;centang&#8217; pada <em>checkbox</em> Cross Cursor</strong></p>
<p style="text-align: justify;">Kursor <em>mouse</em> dapat diubah menjadi <em>cross</em> atau <em>default</em> dengan memberi atau menghilangkan tanda &#8216;centang&#8217; pada <em>checkbox</em> <strong>Cross Cursor</strong> (klik ganda pada komponen <em>TCheckBox</em> <strong>chCross</strong>).</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure</strong> TfmCrossHair.chCrossClick(Sender: TObject);
<strong>begin</strong>
  <strong>if </strong>chCross.Checked <strong>then</strong>
    ctCrossHair.Cursor:= crCross
 <strong> else</strong>
    ctCrossHair.Cursor:= crDefault;
  ctCrossHair.OriginalCursor:= ctCrossHair.Cursor;
<strong>end;</strong></pre>
<p style="text-align: justify;"><em>Property</em> <strong>OriginalCursor</strong> dipanggil untuk memastikan kursor <em>mouse</em> sesuai dengan tanda &#8216;centang&#8217; pada <em>checkbox</em> <strong>Cross Cursor</strong> ketika <em>mouse</em> bergerak melewati grafik tersebut.</p>
<p style="text-align: justify;">4. <strong>Mendapatkan nilai posisi garis <em>cross</em> pada area grafik</strong></p>
<p style="text-align: justify;">Pada saat <em>mouse</em> bergerak melewati grafik, garis <em>cross</em> harus dibuat dan nilainya dicatat dalam suatu variabel (klik ganda sel di sebelah kanan event <strong>OnMouseMove</strong> pada komponen <em>TChart</em> <strong>ctCrossHair</strong>)</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmCrossHair.ctCrossHairMouseMove(Sender: TObject; Shift: TShiftState;
 X, Y: Integer);
<strong>begin</strong>
 //membuat garis cross pada posisi mouse lama
 <strong>if </strong>(iOldValueX &lt;&gt; -1) <strong>then</strong>
 <strong>begin</strong>
   DrawCross(iOldValueX, iOldValueY);
   iOldValueX:= -1;
 <strong>end</strong>;

 //mengecek posisi mouse dalam area grafik
 lCrossValue.Caption:= EmptyStr;
 <strong>if </strong>PtInRect(ctCrossHair.ChartRect, Point(X-ctCrossHair.Width3D,
    Y+ctCrossHair.Height3D)) <strong>then</strong>
 <strong>begin</strong>
   DrawCross(x, y);
   iOldValueX:= x;
   iOldValueY:= y;
   <strong>with</strong> Series1 <strong>do</strong>
   <strong>begin</strong>
     GetCursorValues(dValueX, dValueY);
     lCrossValue.Caption:= 'Nilai X/Y : '+GetHorizAxis.LabelValue(dValueX)+
                           '/'+GetVertAxis.LabelValue(dValueY);
   <strong>end;</strong>
 <strong>end</strong>;
<strong>end;</strong></pre>
<p style="text-align: justify;">Jika posisi <em>mouse</em> tidak berada di luar area grafik (tidak sama dengan -1) maka garis <em>cross-hair</em> dibuat sesuai dengan posisi saat itu (posisi lama), kemudian langsung reset posisi-nya dengan memberi nilai -1 pada variabel <strong>iOldValueX</strong>. Sehingga garis <em>cross-hair</em> yang telah terbentuk akan langsung terhapus ketika sebuah garis <em>cross-hair</em> yang baru akan dibuat.</p>
<p style="text-align: justify;">Selanjutnya mengecek posisi <em>mouse</em> pada area grafik dengan fungsi <strong>PtInRect, </strong><em>syntax</em>-nya adalah</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>function</strong> PtInRect(<strong>const</strong> Rect: TRect; <strong>const</strong> P: TPoint): Boolean</pre>
<p style="text-align: justify;">Fungsi ini  akan bernilai <em>True</em> jika koordinat <strong>P</strong> berada di area <strong>Rect</strong>. Jika posisi <em>mouse</em> ada dalam area grafik maka garis <em>cross-hair</em> akan dibuat dengan prosedur <strong>DrawCross</strong> dan nilainya disimpan dalam variabel <strong>iOldValueX</strong> dan <strong>iOldValueY</strong>.</p>
<p style="text-align: justify;">Metode <strong>GetCursorValues</strong> untuk mendapatkan nilai posisi <em>mouse</em>, nilai-nilai tersebut kemudian disimpan dalam variabel <strong>dValueX</strong> dan <strong>dValueY</strong>. Dan ditampilkan dalam komponen <em>TLabel</em> <strong>lCrossValue</strong>, dengan menggunakan metode <strong>GetHorizAxis.LabelValue</strong> untuk sumbu horisontal dan <strong>GetVertAxis.LabelValue</strong> untuk sumbu vertikal grafik.</p>
<p style="text-align: justify;">5. <strong>Mereset posisi mouse setelah mem-plot data</strong></p>
<p style="text-align: justify;">Jika data yang di-plot ke grafik bersifat kontinyu maka posisi <em>mouse</em> setelah mem-plot data perlu di-reset dengan memberi nilai -1 pada variabel <strong>iOldValueX</strong>. Caranya membuatnya, aktifkan jendela Object TreeView, cari object bernama <strong>Series1</strong> (terletak di dalam komponen <em>TChart</em> <strong>ctCrossHair</strong>) kemudian aktifkan jendela Object Inspector dan klik ganda sel di sebelah kanan event <strong>OnAfterDrawValue</strong> dari object tersebut.</p>
<pre style="text-align: justify; padding-left: 30px;"><strong>procedure </strong>TfmCrossHair.Series1AfterDrawValues(Sender: TObject);
<strong>begin</strong>
 iOldValueX:= -1;
<strong>end</strong>;</pre>
<p style="text-align: justify;">Nuwun..</p>
<p style="text-align: justify;">Daftar download untuk artikel ini:<br />
1. <a href="http://www.havetogether.com/downloads/TChart_Code.1.1.zip" title="Downloaded 107 hits"><span style="text-decoration: underline;">TChart Source Code ver.1.1 - 4.33 kB</span></a><br />
2. <a href="http://www.havetogether.com/downloads/Cross-Hair_Code.zip" title="Downloaded 34 hits"><span style="text-decoration: underline;">Cross-Hair Source Code - 2.08 kB</span></a><br />
3. <a href="http://www.havetogether.com/downloads/TPen-Description.pdf" title="Downloaded 61 hits"><span style="text-decoration: underline;">TPen Property Description - 20.52 kB</span></a><br />
4. <a href="http://www.havetogether.com/downloads/TChart_Application.1.1.zip" title="Downloaded 37 hits"><span style="text-decoration: underline;">TChart Application ver.1.1 - 296 kB</span></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.havetogether.com/membuat-cross-hair-pada-grafik-dengan-komponen-tchart.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

