<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5776980471135706903</id><updated>2012-01-27T15:55:35.176+07:00</updated><category term='OOP'/><category term='Lain-lain'/><category term='Tips Dan Trick'/><category term='DelphiFeeds'/><category term='About Delphi'/><category term='Tutorial'/><category term='Download'/><category term='DevExpress'/><category term='Video'/><category term='Database'/><title type='text'>http://delphigurus.blogspot.com</title><subtitle type='html'>OOP, Tips, Trick, Free E-Book, Free Tutorial, Free Source Code, All About Delphi</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>55</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-7546792821774031396</id><published>2012-01-22T06:06:00.002+07:00</published><updated>2012-01-24T05:27:21.043+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DevExpress'/><title type='text'>Cara Membuat Warna Baris Selang seling Di cxGrid</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Untuk mempercantik tampilan cxGrid, kita bisa melakukan perubahan warna baris-barisnya. Kita bedakan warna antara baris ganjil dan genap. Untuk melakukan ini, ikuti langkah-langkah berikut :&lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;div class="MsoListParagraphCxSpFirst" style="mso-list: l0 level1 lfo1; text-indent: -18.0pt;"&gt;&lt;span class="fullpost"&gt;1.&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;Masukkan komponen cxGrid&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="fullpost"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto; mso-list: l1 level1 lfo2; text-indent: -18.0pt;"&gt;&lt;span class="fullpost"&gt;-&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Set alignmentnya menjadi alTOP&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="fullpost"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto; mso-list: l1 level1 lfo2; text-indent: -18.0pt;"&gt;&lt;span class="fullpost"&gt;-&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Ganti viewnya yang tadinya DBTable menjadi Table(jika anda akan langsung mengkases data ke database bisa tetap menggunakanDBTable), namakan dengn : cxGridTableGrid1TableView1&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="fullpost"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="MsoListParagraphCxSpLast" style="margin-left: 54.0pt; mso-add-space: auto; mso-list: l1 level1 lfo2; text-indent: -18.0pt;"&gt;&lt;span class="fullpost"&gt;-&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Tambahkan tiga kolom mis : &amp;nbsp;Nama Barang, Harga&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpLast" style="margin-left: 54pt; text-indent: -18pt;"&gt;&lt;div style="text-align: left;"&gt;&lt;span class="fullpost"&gt;&lt;a href="http://www.freeimagehosting.net/cz4ls"&gt;&lt;img src="http://www.freeimagehosting.net/newuploads/cz4ls.jpg" width="490/" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpLast" style="margin-left: 54.0pt; mso-add-space: auto; mso-list: l1 level1 lfo2; text-indent: -18.0pt;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;span class="fullpost"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;span class="fullpost"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="fullpost"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="MsoListParagraphCxSpFirst" style="mso-list: l0 level1 lfo1; text-indent: -18.0pt;"&gt;&lt;span class="fullpost"&gt;&lt;b&gt;2.&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Masukkan komponen cxStyleRepository&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="fullpost"&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto; mso-list: l1 level1 lfo2; text-indent: -18.0pt;"&gt;-&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Klik Kanan &amp;gt; Edit&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto; mso-list: l1 level1 lfo2; text-indent: -18.0pt;"&gt;-&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Tambahkan dua style dengan klik tombol Add&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto; mso-list: l1 level1 lfo2; text-indent: -18.0pt;"&gt;-&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Namakan kedua style tersebut dengan cxStyleRepEvendan cxStyleRepOdd&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto; mso-list: l1 level1 lfo2; text-indent: -18.0pt;"&gt;-&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Setting warna baris dari masing-masing styletersebut mis untuk cxStyleRepEven Color &amp;gt; clInactiveBorder, cxStyleRepOddColor &amp;gt; clMoneyGreen&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpLast" style="margin-left: 54.0pt; mso-add-space: auto; mso-list: l1 level1 lfo2; text-indent: -18.0pt;"&gt;-&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Klik tombol close&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;a href="http://www.freeimagehosting.net/ls8hz"&gt;&lt;img src="http://www.freeimagehosting.net/newuploads/ls8hz.jpg" width="550" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpFirst" style="margin-left: 54.0pt; mso-add-space: auto; mso-list: l1 level1 lfo2; text-indent: -18.0pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -18.0pt;"&gt;&lt;b&gt;3.&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Klik table yang ada di cxGrid&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto; mso-list: l1 level1 lfo2; text-indent: -18.0pt;"&gt;-&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Expand property Style dengan klik tanda &amp;nbsp;+&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto; mso-list: l1 level1 lfo2; text-indent: -18.0pt;"&gt;-&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Set style ContentEvent, pilih cxStyleRepEven&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto; mso-list: l1 level1 lfo2; text-indent: -18.0pt;"&gt;-&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Set style ContentOdd, pilih cxStyleRepOdd&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-indent: -18.0pt;"&gt;4.&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Untuk meliha hasilnya, kita harus mengisi tabletersebut dengan data. Kita akan isi datanya pada saat form ini dicreate. Untukmelakukan langkah berikut : &lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto; mso-list: l1 level1 lfo2; text-indent: -18.0pt;"&gt;-&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Double klik di form untuk mengarahan ke methodformcreate()&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto; mso-list: l1 level1 lfo2; text-indent: -18.0pt;"&gt;-&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Isikan baris kode berikut ini : &lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto;"&gt;with cxGridTableGrid1TableView1 do&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto;"&gt;&amp;nbsp; begin&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataController.RecordCount := 5;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataController.Values[0,0] :='Biskuat';&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataController.Values[0,1] :='500';&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataController.Values[1,0] :='Aqua Galon';&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataController.Values[1,1] :='11500';&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataController.Values[2,0] :='Beng-beng';&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataController.Values[2,1] :='500';&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataController.Values[3,0] :='Sabun Lux';&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataController.Values[3,1] :='1500';&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataController.Values[4,0] :='Biskuit';&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DataController.Values[4,1] :='22500';&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto;"&gt;&amp;nbsp; end;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 54.0pt; mso-add-space: auto;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpLast" style="mso-list: l0 level1 lfo1; text-indent: -18.0pt;"&gt;&lt;b&gt;5.&lt;span style="font: normal normal normal 7pt/normal 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;Lihat tampilannya&lt;/b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;a href="http://www.blogger.com/"&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span id="goog_165036398"&gt;&lt;/span&gt;&lt;span id="goog_165036399"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;a href="http://www.freeimagehosting.net/zdnbw"&gt;&lt;img src="http://www.freeimagehosting.net/newuploads/zdnbw.jpg" width="550/" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Selamat berkreasi&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-7546792821774031396?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/7546792821774031396/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=7546792821774031396&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/7546792821774031396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/7546792821774031396'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2012/01/cara-membuat-warna-baris-selang-seling.html' title='Cara Membuat Warna Baris Selang seling Di cxGrid'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-6233418465864685790</id><published>2011-10-30T13:02:00.000+07:00</published><updated>2011-10-30T13:02:00.593+07:00</updated><title type='text'>About Delphi: The Width Of The Drop Down List For TComboBox</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="gmail_quote"&gt;&lt;div&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 832px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#ebe6db" width="2"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td bgcolor="#ffffff" width="830"&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 830px;"&gt; &lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 570px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="19"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 540px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;span style="font-family: Georgia, 'Times New Roman', Times, serif; font-size: medium;"&gt;                               &lt;a href="http://glclk.about.com/?zi=5/Dygf" style="color: #3366cc;" target="_blank"&gt;Sizing TComboBox Drop Down List Width - No Cut Off&lt;/a&gt;                             &lt;/span&gt;                             &lt;br /&gt;&lt;div style="line-height: 18px; margin: 5px 0;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small; margin-bottom: 6px;"&gt;When a combo box is in dropped down state Windows draws a list box type of control to display combo box items for selection. When the length (of a string) of items exceeds the width of the combo box, the items are displayed as cut-off!&lt;/span&gt;                             &lt;/div&gt;&lt;br /&gt;&lt;/td&gt;                         &lt;/tr&gt;&lt;tr&gt;                           &lt;td&gt;&lt;span style="font-family: Georgia, 'Times New Roman', Times, serif; font-size: medium;"&gt;                               &lt;a href="http://glclk.about.com/?zi=5/Dygg" style="color: #3366cc; margin-bottom: 6px;" target="_blank"&gt;Change the Default Application Icon for a Console Mode Delph&lt;/a&gt;                             &lt;/span&gt;                             &lt;br /&gt;&lt;div style="line-height: 18px; margin: 5px 0;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small; margin-bottom: 6px;"&gt;For a normal GUI application you can change the application icon using Project - Options - Application - Application Settings - Icon. For console mode applications this section is disabled - and thus all console mode application have a default icon.&lt;/span&gt;                             &lt;/div&gt;&lt;br /&gt;&lt;/td&gt;                         &lt;/tr&gt;&lt;tr&gt;                           &lt;td&gt;&lt;span style="font-family: Georgia, 'Times New Roman', Times, serif; font-size: medium;"&gt;                               &lt;a href="http://glclk.about.com/?zi=5/Dygh" style="color: #3366cc; margin-bottom: 6px;" target="_blank"&gt;Set Of String in Delphi? Yes! Union, Intersection and Difference For String Lists.&lt;/a&gt;                             &lt;/span&gt;                             &lt;br /&gt;&lt;div style="line-height: 18px; margin: 5px 0;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small; margin-bottom: 6px;"&gt;in Delphi TIPS ::  In Delphi, sets or set types allow you to do set type operations like union, intersection and difference on a set of ordinal values. A set... &lt;a href="http://glclk.about.com/?zi=5/Dygh&amp;amp;zu=http%3A%2F%2Fdelphi.about.com%2Fb%2F2011%2F10%2F04%2Fset-of-string-in-delphi-yes-union-intersection-and-difference-for-string-lists.htm%3Fnl%3D1" target="_blank"&gt;Read more&lt;/a&gt;&lt;/span&gt;                             &lt;/div&gt;&lt;br /&gt;&lt;/td&gt;                         &lt;/tr&gt;&lt;tr&gt;                           &lt;td&gt;&lt;span style="font-family: Georgia, 'Times New Roman', Times, serif; font-size: medium;"&gt;                               &lt;a href="http://glclk.about.com/?zi=5/Dygi" style="color: #3366cc; margin-bottom: 6px;" target="_blank"&gt;Learn Delphi for .NET&lt;/a&gt;                             &lt;/span&gt;                             &lt;br /&gt;&lt;div style="line-height: 18px; margin: 5px 0;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small; margin-bottom: 6px;"&gt;Articles and technical information that will help you start developing with and master Delphi for .NET. Find out about the new IDE, Ado.Net, Asp.Net, ECO, IL, aspx, XML Web Services, msil, ...&lt;/span&gt;                             &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;td bgcolor="#eeeeee" valign="top" width="240"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;td bgcolor="#ebe6db" width="2"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-6233418465864685790?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/6233418465864685790/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=6233418465864685790&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/6233418465864685790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/6233418465864685790'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2011/10/about-delphi-width-of-drop-down-list.html' title='About Delphi: The Width Of The Drop Down List For TComboBox'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-5747300671056341520</id><published>2011-10-25T13:01:00.000+07:00</published><updated>2011-10-25T13:01:00.219+07:00</updated><title type='text'>About Delphi: Set Of String: implemented!</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="gmail_quote"&gt;&lt;div&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 832px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#ebe6db" width="2"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td bgcolor="#ffffff" width="830"&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 830px;"&gt; &lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 570px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="19"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 540px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;span style="font-family: Georgia, 'Times New Roman', Times, serif; font-size: medium;"&gt;                               &lt;a href="http://glclk.about.com/?zi=5/DuYd" style="color: #3366cc;" target="_blank"&gt;Set Of String in Delphi? Union, Intersection and Difference!&lt;/a&gt;                             &lt;/span&gt;                             &lt;br /&gt;&lt;div style="line-height: 18px; margin: 5px 0;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small; margin-bottom: 6px;"&gt;A set is a collection of ordinal values. The values in a set have no order and it makes no sense to have a value twice (or more times) in a set. Since strings are not ordinal types you cannot have set of string declarations. Or, can you?&lt;/span&gt;                             &lt;/div&gt;&lt;br /&gt;&lt;/td&gt;                         &lt;/tr&gt;&lt;tr&gt;                           &lt;td&gt;&lt;span style="font-family: Georgia, 'Times New Roman', Times, serif; font-size: medium;"&gt;                               &lt;a href="http://glclk.about.com/?zi=5/DuYe" style="color: #3366cc; margin-bottom: 6px;" target="_blank"&gt;Implementing StartsText With SubText As Pattern - When Pattern Is A Regular Expression!&lt;/a&gt;                             &lt;/span&gt;                             &lt;br /&gt;&lt;div style="line-height: 18px; margin: 5px 0;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small; margin-bottom: 6px;"&gt;in regex :: For a relative file path like "abcdeffile.txt" I need to check if the file is located in the "abcdef" folder (or in any of its sub folders).... &lt;a href="http://glclk.about.com/?zi=5/DuYe&amp;amp;zu=http%3A%2F%2Fdelphi.about.com%2Fb%2F2011%2F09%2F27%2Fimplementing-startstext-with-subtext-as-pattern-when-pattern-is-a-regular-expressions.htm%3Fnl%3D1" target="_blank"&gt;Read more&lt;/a&gt;&lt;/span&gt;                             &lt;/div&gt;&lt;br /&gt;&lt;/td&gt;                         &lt;/tr&gt;&lt;tr&gt;                           &lt;td&gt;&lt;span style="font-family: Georgia, 'Times New Roman', Times, serif; font-size: medium;"&gt;                               &lt;a href="http://glclk.about.com/?zi=5/DuYf" style="color: #3366cc; margin-bottom: 6px;" target="_blank"&gt;Use TFile Delphi Record To Encrypt or Decrypt A File&lt;/a&gt;                             &lt;/span&gt;                             &lt;br /&gt;&lt;div style="line-height: 18px; margin: 5px 0;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small; margin-bottom: 6px;"&gt;in Files and Folders ::A member of the Delphi Programming Forum in a post titled "RTF File encryption" is asking for some help in encrypting RTF documents.  Starting with Delphi 2010,... &lt;a href="http://glclk.about.com/?zi=5/DuYf&amp;amp;zu=http%3A%2F%2Fdelphi.about.com%2Fb%2F2011%2F09%2F20%2Fuse-tfile-delphi-record-to-encrypt-or-decrypt-a-file.htm%3Fnl%3D1" target="_blank"&gt;Read more&lt;/a&gt;&lt;/span&gt;                             &lt;/div&gt;&lt;br /&gt;&lt;/td&gt;                         &lt;/tr&gt;&lt;tr&gt;                           &lt;td&gt;&lt;span style="font-family: Georgia, 'Times New Roman', Times, serif; font-size: medium;"&gt;                               &lt;a href="http://glclk.about.com/?zi=5/DuYg" style="color: #3366cc; margin-bottom: 6px;" target="_blank"&gt;Delphi Programming -  Inside and Out&lt;/a&gt;                             &lt;/span&gt;                             &lt;br /&gt;&lt;div style="line-height: 18px; margin: 5px 0;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small; margin-bottom: 6px;"&gt;Delphi language, IDE tips, techniques and articles. Every programming aspect of Delphi is uncovered: OOP, Threading, File IO, RTL, VCL ...&lt;/span&gt;                             &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;td bgcolor="#eeeeee" valign="top" width="240"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;td bgcolor="#ebe6db" width="2"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-5747300671056341520?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/5747300671056341520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=5747300671056341520&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/5747300671056341520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/5747300671056341520'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2011/10/about-delphi-set-of-string-implemented.html' title='About Delphi: Set Of String: implemented!'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-3235487765781623867</id><published>2011-10-20T09:19:00.001+07:00</published><updated>2011-10-20T09:19:00.291+07:00</updated><title type='text'>About Delphi: StartsText Regular Expression Patterned</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;&lt;div class="gmail_quote"&gt;&lt;div&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 832px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#ebe6db" width="2"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td bgcolor="#ffffff" width="830"&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 830px;"&gt; &lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 570px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="19"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 540px;"&gt;&lt;tbody&gt;&lt;tr&gt;                           &lt;td&gt;&lt;br /&gt;&lt;span style="font-family: Georgia, 'Times New Roman', Times, serif; font-size: medium;"&gt;                               &lt;a href="http://glclk.about.com/?zi=5/DqPl" style="color: #3366cc;" target="_blank"&gt;Implementing StartsText With SubText As Pattern&lt;/a&gt;                             &lt;/span&gt;                             &lt;br /&gt;&lt;div style="line-height: 18px; margin: 5px 0;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small; margin-bottom: 6px;"&gt;For a relative file path like "\abc\def\file.txt" I need to check if the file is located in the "\abc\def" folder (or in any of its sub folders). Let's call this "\abc\def" a predefined path. Note that I am not interested in the drive nor the path complexity before "\abc\def".&lt;/span&gt;                             &lt;/div&gt;&lt;br /&gt;&lt;/td&gt;                         &lt;/tr&gt;&lt;tr&gt;                           &lt;td&gt;&lt;span style="font-family: Georgia, 'Times New Roman', Times, serif; font-size: medium;"&gt;                               &lt;a href="http://glclk.about.com/?zi=5/DqPm" style="color: #3366cc; margin-bottom: 6px;" target="_blank"&gt;Use TFile Delphi Record To Encrypt or Decrypt A File&lt;/a&gt;                             &lt;/span&gt;                             &lt;br /&gt;&lt;div style="line-height: 18px; margin: 5px 0;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small; margin-bottom: 6px;"&gt;in Files and Folders ::A member of the Delphi Programming Forum in a post titled "RTF File encryption" is asking for some help in encrypting RTF documents.  Starting with Delphi 2010,... &lt;a href="http://glclk.about.com/?zi=5/DqPm&amp;amp;zu=http%3A%2F%2Fdelphi.about.com%2Fb%2F2011%2F09%2F20%2Fuse-tfile-delphi-record-to-encrypt-or-decrypt-a-file.htm%3Fnl%3D1" target="_blank"&gt;Read more&lt;/a&gt;&lt;/span&gt;                             &lt;/div&gt;&lt;br /&gt;&lt;/td&gt;                         &lt;/tr&gt;&lt;tr&gt;                           &lt;td&gt;&lt;span style="font-family: Georgia, 'Times New Roman', Times, serif; font-size: medium;"&gt;                               &lt;a href="http://glclk.about.com/?zi=5/DqPn" style="color: #3366cc; margin-bottom: 6px;" target="_blank"&gt;Implementing the OnBeforeCreate and OnAfterCreate Events for Delphi Forms&lt;/a&gt;                             &lt;/span&gt;                             &lt;br /&gt;&lt;div style="line-height: 18px; margin: 5px 0;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small; margin-bottom: 6px;"&gt;in Delphi Forms ::  The TForm's OnCreate event is called when the form is created. Usually, you would write an OnCreate event handler to perform special processing when the... &lt;a href="http://glclk.about.com/?zi=5/DqPn&amp;amp;zu=http%3A%2F%2Fdelphi.about.com%2Fb%2F2011%2F09%2F16%2Fimplementing-the-onbeforecreate-and-onaftercreate-events-for-delphi-forms.htm%3Fnl%3D1" target="_blank"&gt;Read more&lt;/a&gt;&lt;/span&gt;                             &lt;/div&gt;&lt;br /&gt;&lt;/td&gt;                         &lt;/tr&gt;&lt;tr&gt;                           &lt;td&gt;&lt;span style="font-family: Georgia, 'Times New Roman', Times, serif; font-size: medium;"&gt;                               &lt;a href="http://glclk.about.com/?zi=5/DqPo" style="color: #3366cc; margin-bottom: 6px;" target="_blank"&gt;Advanced Delphi Windows / Shell / API / Graphics / OLE Programming&lt;/a&gt;                             &lt;/span&gt;                             &lt;br /&gt;&lt;div style="line-height: 18px; margin: 5px 0;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small; margin-bottom: 6px;"&gt;A simple understanding of Delphi is fine when you create applications for home use. Once you start building real-world applications you'll start looking for ways to solve more complex tasks - and Delphi will have all the answers!&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;td bgcolor="#eeeeee" valign="top" width="240"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor="#ebe6db" colspan="2" height="1" width="100%"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;td bgcolor="#ebe6db" width="2"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-3235487765781623867?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/3235487765781623867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=3235487765781623867&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/3235487765781623867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/3235487765781623867'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2011/10/about-delphi-startstext-regular.html' title='About Delphi: StartsText Regular Expression Patterned'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-84246721914902445</id><published>2011-10-17T12:57:00.000+07:00</published><updated>2011-10-17T12:57:03.951+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DelphiFeeds'/><title type='text'>DelphiFeeds : Delphi Spring, Mocks and how to use them: some links</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;&lt;div class="gmail_quote"&gt;&lt;div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0 2em;"&gt;&lt;ul style="clear: both; padding: 0 0 0 1.2em; width: 100%;"&gt; &lt;/ul&gt;&lt;table&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td style="line-height: 1.4em; margin-bottom: 0;"&gt;&lt;div style="margin: 1em 0 3px 0;"&gt;&lt;a href="http://feedproxy.google.com/~r/delphifeeds/~3/b6JqTs9SF9Q/84584?utm_source=feedburner&amp;amp;utm_medium=email" name="132ab8d4255af483_1" style="font-family: Arial, Helvetica, sans-serif; font-size: 18px;" target="_blank"&gt;Delphi Spring, Mocks and how to use them: some links&lt;/a&gt; &lt;/div&gt;&lt;div style="color: #555555; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; font-size: 13px; line-height: 140%; margin: 9px 0 3px 0;"&gt;Posted: 27 Sep 2011 02:00 AM PDT&lt;/div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0;"&gt;Now that there is Spring and Mocks for Delphi, it is time to post a few links:  Nick Hodges indicating he is going to write more about Delphi Spring and Mocks Nick Hodges' first article (in a 5 series part) on Delphi Spring framework, Dependency Injection and Unit testing Vincent Parret on ...&lt;img height="1" width="1" /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="line-height: 1.4em; margin-bottom: 0;"&gt;&lt;div style="margin: 1em 0 3px 0;"&gt;&lt;a href="http://feedproxy.google.com/~r/delphifeeds/~3/ygLPl4Y7d1o/84588?utm_source=feedburner&amp;amp;utm_medium=email" name="132ab8d4255af483_2" style="font-family: Arial, Helvetica, sans-serif; font-size: 18px;" target="_blank"&gt;Implementing StartsText With SubText As Pattern - When Pattern Is A Regular Expressions!&lt;/a&gt; &lt;/div&gt;&lt;div style="color: #555555; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; font-size: 13px; line-height: 140%; margin: 9px 0 3px 0;"&gt;Posted: 27 Sep 2011 12:54 AM PDT&lt;/div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0;"&gt;in regex :: For a relative file path like "\abc\def\file.txt" I need to check if the file is located in the "\abc\def" folder (or in any of its sub folders). Let's call this "\abc\def" a predefined path. Note that I am not interested in the drive nor the path complexity before "\abc\def".  How to ...&lt;img height="1" width="1" /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="line-height: 1.4em; margin-bottom: 0;"&gt;&lt;div style="margin: 1em 0 3px 0;"&gt;&lt;a href="http://feedproxy.google.com/~r/delphifeeds/~3/iqX0rbgdLqw/84571?utm_source=feedburner&amp;amp;utm_medium=email" name="132ab8d4255af483_3" style="font-family: Arial, Helvetica, sans-serif; font-size: 18px;" target="_blank"&gt;Delphi Certification Program and Delphi XE2 release&lt;/a&gt; &lt;/div&gt;&lt;div style="color: #555555; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; font-size: 13px; line-height: 140%; margin: 9px 0 3px 0;"&gt;Posted: 26 Sep 2011 11:26 PM PDT&lt;/div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0;"&gt;During the world tour, lots of Delphi developers ask me if the Delphi Certification Program is up to date with the Delphi XE2 release, the answer is YES. The certification program tests your knowledge in Delphi, we recommend you to use Delphi XE or XE2 release in order to be prepared to answers ...&lt;img height="1" width="1" /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="line-height: 1.4em; margin-bottom: 0;"&gt;&lt;div style="margin: 1em 0 3px 0;"&gt;&lt;a href="http://feedproxy.google.com/~r/delphifeeds/~3/4ie7lbzAyXs/84569?utm_source=feedburner&amp;amp;utm_medium=email" name="132ab8d4255af483_4" style="font-family: Arial, Helvetica, sans-serif; font-size: 18px;" target="_blank"&gt;RAD Studio XE2 Live Webinars today&lt;/a&gt; &lt;/div&gt;&lt;div style="color: #555555; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; font-size: 13px; line-height: 140%; margin: 9px 0 3px 0;"&gt;Posted: 26 Sep 2011 10:55 PM PDT&lt;/div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0;"&gt;If you didn't have the opportunity to see all of the great RAD Studio XE2 new features during the world tour, take sometime today and join us for one of the three live webinars. &amp;nbsp;  First webinar – 6:00am PDT / 9:00am EDT / 3:00pm CET Second webinar – 11:00am PDT / 2:00pm EDT ...&lt;img height="1" width="1" /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="line-height: 1.4em; margin-bottom: 0;"&gt;&lt;div style="margin: 1em 0 3px 0;"&gt;&lt;a href="http://feedproxy.google.com/~r/delphifeeds/~3/eLfuOinvus0/84567?utm_source=feedburner&amp;amp;utm_medium=email" name="132ab8d4255af483_5" style="font-family: Arial, Helvetica, sans-serif; font-size: 18px;" target="_blank"&gt;14 oktober 2011: Delphi XE2 FireMonkey &amp;amp; DataSnap training (Dutch)&lt;/a&gt; &lt;/div&gt;&lt;div style="color: #555555; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; font-size: 13px; line-height: 140%; margin: 9px 0 3px 0;"&gt;Posted: 26 Sep 2011 09:10 PM PDT&lt;/div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0;"&gt;In deze Nederlandstalige Delphi XE2 Clinic staan de essentiële nieuwe features van Delphi XE2 centraal, met ondersteuning voor Win32, Win64 en Mac OS X.&lt;img height="1" width="1" /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="line-height: 1.4em; margin-bottom: 0;"&gt;&lt;div style="margin: 1em 0 3px 0;"&gt;&lt;a href="http://feedproxy.google.com/~r/delphifeeds/~3/umua_ehqwqo/84564?utm_source=feedburner&amp;amp;utm_medium=email" name="132ab8d4255af483_6" style="font-family: Arial, Helvetica, sans-serif; font-size: 18px;" target="_blank"&gt;A few more classics on BitSavers in the /pdf/borland tree&lt;/a&gt; &lt;/div&gt;&lt;div style="color: #555555; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; font-size: 13px; line-height: 140%; margin: 9px 0 3px 0;"&gt;Posted: 26 Sep 2011 08:00 PM PDT&lt;/div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0;"&gt;Hope you like these classics from the early Borland era:  The 1985&amp;nbsp;Turbo Pascal Version 3.0 Reference Manual Jan 1985&amp;nbsp;Turbo Tutor_Version_1.0: a Self-Study Guide on Turbo Pascal Jun 1987&amp;nbsp;Borland Byte Ad on Eureka: The Solver Aug 1998&amp;nbsp;Borland Byte Ad on the Adventures of Turbo Man Nov 1998&amp;nbsp;Borland ...&lt;img height="1" width="1" /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="line-height: 1.4em; margin-bottom: 0;"&gt;&lt;div style="margin: 1em 0 3px 0;"&gt;&lt;a href="http://feedproxy.google.com/~r/delphifeeds/~3/JUN_mSxwKO4/84563?utm_source=feedburner&amp;amp;utm_medium=email" name="132ab8d4255af483_7" style="font-family: Arial, Helvetica, sans-serif; font-size: 18px;" target="_blank"&gt;Interesting use of 3D UI in music software&lt;/a&gt; &lt;/div&gt;&lt;div style="color: #555555; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; font-size: 13px; line-height: 140%; margin: 9px 0 3px 0;"&gt;Posted: 26 Sep 2011 05:12 PM PDT&lt;/div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0;"&gt;Awhile back I wrote about music technology being one of the areas pushing new user interface\interaction technologies, such as the Kinect, and the Wii before it. Well, I'm a little behind on this one, but this video preview of AudioGL is another example, this time in terms of 3D UI.   Apart ...&lt;img height="1" width="1" /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="line-height: 1.4em; margin-bottom: 0;"&gt;&lt;div style="margin: 1em 0 3px 0;"&gt;&lt;a href="http://feedproxy.google.com/~r/delphifeeds/~3/A44DTGi5fQg/84559?utm_source=feedburner&amp;amp;utm_medium=email" name="132ab8d4255af483_8" style="font-family: Arial, Helvetica, sans-serif; font-size: 18px;" target="_blank"&gt;A Radical Idea for Professional Programmers&lt;/a&gt; &lt;/div&gt;&lt;div style="color: #555555; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; font-size: 13px; line-height: 140%; margin: 9px 0 3px 0;"&gt;Posted: 26 Sep 2011 01:38 PM PDT&lt;/div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0;"&gt;I just read this fascinating article in The New Yorker about "coaching," and how it might apply to professionals like us. It's a little lengthy, but it's an excellent read. Please take a few minutes to read it, and then if you feel so inclined, here are some questions that I ...&lt;img height="1" width="1" /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="line-height: 1.4em; margin-bottom: 0;"&gt;&lt;div style="margin: 1em 0 3px 0;"&gt;&lt;a href="http://feedproxy.google.com/~r/delphifeeds/~3/bOYYW1TBwkA/84558?utm_source=feedburner&amp;amp;utm_medium=email" name="132ab8d4255af483_9" style="font-family: Arial, Helvetica, sans-serif; font-size: 18px;" target="_blank"&gt;Back from my World and Texas RAD Studio XE2 tours - Webinars Tuesday (tomorrow)&lt;/a&gt; &lt;/div&gt;&lt;div style="color: #555555; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; font-size: 13px; line-height: 140%; margin: 9px 0 3px 0;"&gt;Posted: 26 Sep 2011 01:21 PM PDT&lt;/div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0;"&gt;I am finally back in my Scotts Valley office today after three weeks on the road visiting with great developers on three continents and on the Internet. &amp;nbsp;Many thanks to all of you that spent your valuable time with me and all of the other RAD Studio XE2 World Tour evangelists. &amp;nbsp;Just want to remind ...&lt;img height="1" width="1" /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="line-height: 1.4em; margin-bottom: 0;"&gt;&lt;div style="margin: 1em 0 3px 0;"&gt;&lt;a href="http://feedproxy.google.com/~r/delphifeeds/~3/L7A6u4cEJzE/84557?utm_source=feedburner&amp;amp;utm_medium=email" name="132ab8d4255af483_10" style="font-family: Arial, Helvetica, sans-serif; font-size: 18px;" target="_blank"&gt;Tools updated , Now supports Delphi XE2&lt;/a&gt; &lt;/div&gt;&lt;div style="color: #555555; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; font-size: 13px; line-height: 140%; margin: 9px 0 3px 0;"&gt;Posted: 26 Sep 2011 12:53 PM PDT&lt;/div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0;"&gt;This is only going to be a short entry just to inform that the Delphi IDE Theme Editor and the WMI Delphi Code Creator are now compatible with Delphi XE2.&lt;img height="1" width="1" /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="line-height: 1.4em; margin-bottom: 0;"&gt;&lt;div style="margin: 1em 0 3px 0;"&gt;&lt;a href="http://feedproxy.google.com/~r/delphifeeds/~3/wsdQnty5mtU/84552?utm_source=feedburner&amp;amp;utm_medium=email" name="132ab8d4255af483_11" style="font-family: Arial, Helvetica, sans-serif; font-size: 18px;" target="_blank"&gt;Customizing Structural Highlighting in Delphi&lt;/a&gt; &lt;/div&gt;&lt;div style="color: #555555; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; font-size: 13px; line-height: 140%; margin: 9px 0 3px 0;"&gt;Posted: 26 Sep 2011 07:15 AM PDT&lt;/div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0;"&gt;It's possible that Structural Highlighting is Castalia's most popular feature. It's certainly one of the first things that you notice when you try Castalia for the first time, and one of the things that people tell me over and over again they love. Of course, code formatting can be ...&lt;img height="1" width="1" /&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-84246721914902445?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/84246721914902445/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=84246721914902445&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/84246721914902445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/84246721914902445'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2011/10/delphifeeds-delphi-spring-mocks-and-how.html' title='DelphiFeeds : Delphi Spring, Mocks and how to use them: some links'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-463874966243726833</id><published>2011-10-14T07:31:00.000+07:00</published><updated>2011-10-14T07:31:01.849+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='About Delphi'/><title type='text'>About Delphi: File Encryption / Decryption</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;&lt;div class="gmail_quote"&gt;&lt;div&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 832px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#ebe6db" width="2"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td bgcolor="#ffffff" width="830"&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 830px;"&gt; &lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 570px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="19"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 540px;"&gt;&lt;tbody&gt;&lt;tr&gt;                           &lt;td&gt;&lt;br /&gt;&lt;span style="font-family: Georgia, 'Times New Roman', Times, serif; font-size: medium;"&gt;                               &lt;a href="http://glclk.about.com/?zi=5/DmCn" style="color: #3366cc;" target="_blank"&gt;Use TFile Delphi Record To Encrypt or Decrypt A File&lt;/a&gt;                             &lt;/span&gt;                             &lt;br /&gt;&lt;div style="line-height: 18px; margin: 5px 0;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small; margin-bottom: 6px;"&gt;Starting with Delphi 2010, the RTL includes the "ioutils.pas" unit hosting dozens of file and folder related functions grouped into TFile, TDirectory, TPath and alike classes (records to be more precise).&lt;/span&gt;                             &lt;/div&gt;&lt;br /&gt;&lt;/td&gt;                         &lt;/tr&gt;&lt;tr&gt;                           &lt;td&gt;&lt;span style="font-family: Georgia, 'Times New Roman', Times, serif; font-size: medium;"&gt;                               &lt;a href="http://glclk.about.com/?zi=5/DmCo" style="color: #3366cc; margin-bottom: 6px;" target="_blank"&gt;Implementing the OnBeforeCreate and OnAfterCreate Events for Delphi Forms&lt;/a&gt;                             &lt;/span&gt;                             &lt;br /&gt;&lt;div style="line-height: 18px; margin: 5px 0;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small; margin-bottom: 6px;"&gt;in Delphi Forms ::  The TForm's OnCreate event is called when the form is created. Usually, you would write an OnCreate event handler to perform special processing when the... &lt;a href="http://glclk.about.com/?zi=5/DmCo&amp;amp;zu=http%3A%2F%2Fdelphi.about.com%2Fb%2F2011%2F09%2F16%2Fimplementing-the-onbeforecreate-and-onaftercreate-events-for-delphi-forms.htm%3Fnl%3D1" target="_blank"&gt;Read more&lt;/a&gt;&lt;/span&gt;                             &lt;/div&gt;&lt;br /&gt;&lt;/td&gt;                         &lt;/tr&gt;&lt;tr&gt;                           &lt;td&gt;&lt;span style="font-family: Georgia, 'Times New Roman', Times, serif; font-size: medium;"&gt;                               &lt;a href="http://glclk.about.com/?zi=5/DmCp" style="color: #3366cc; margin-bottom: 6px;" target="_blank"&gt;Crypting Your INI (Configuration) Files&lt;/a&gt;                             &lt;/span&gt;                             &lt;br /&gt;&lt;div style="line-height: 18px; margin: 5px 0;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small; margin-bottom: 6px;"&gt;in INI Files :: In most of my applications I'm using INI files to store configuration options.  INI files are text based documents with a simple structure. A user can open... &lt;a href="http://glclk.about.com/?zi=5/DmCp&amp;amp;zu=http%3A%2F%2Fdelphi.about.com%2Fb%2F2011%2F09%2F13%2Fcrypting-your-ini-configuration-files.htm%3Fnl%3D1" target="_blank"&gt;Read more&lt;/a&gt;&lt;/span&gt;                             &lt;/div&gt;&lt;br /&gt;&lt;/td&gt;                         &lt;/tr&gt;&lt;tr&gt;                           &lt;td&gt;&lt;span style="font-family: Georgia, 'Times New Roman', Times, serif; font-size: medium;"&gt;                               &lt;a href="http://glclk.about.com/?zi=5/DmCq" style="color: #3366cc; margin-bottom: 6px;" target="_blank"&gt;Getting Started with Delphi&lt;/a&gt;                             &lt;/span&gt;                             &lt;br /&gt;&lt;div style="line-height: 18px; margin: 5px 0;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small; margin-bottom: 6px;"&gt;So, you want to learn Delphi? This is the right place: Delphi tutorials and articles for beginners.&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;td bgcolor="#eeeeee" valign="top" width="240"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor="#ebe6db" colspan="2" height="1" width="100%"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;td bgcolor="#ebe6db" width="2"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-463874966243726833?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/463874966243726833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=463874966243726833&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/463874966243726833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/463874966243726833'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2011/10/about-delphi-file-encryption-decryption.html' title='About Delphi: File Encryption / Decryption'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-8144653305101152467</id><published>2011-09-23T12:45:00.000+07:00</published><updated>2011-09-23T12:45:01.913+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='About Delphi'/><title type='text'>About Delphi: 16 Delphi Versions In 16 Years + Useful Articles</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;&lt;div class="gmail_quote"&gt;&lt;div&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 832px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#ebe6db" width="2"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td bgcolor="#ffffff" width="830"&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 830px;"&gt; &lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 570px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="19"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 540px;"&gt;&lt;tbody&gt;&lt;tr&gt;                           &lt;td&gt;&lt;br /&gt;&lt;span style="font-family: Georgia, 'Times New Roman', Times, serif; font-size: medium;"&gt;                               &lt;a href="http://glclk.about.com/?zi=5/DdzR" style="color: #3366cc;" target="_blank"&gt;Delphi History - From Turbo Pascal To Delphi XE 2&lt;/a&gt;                             &lt;/span&gt;                             &lt;br /&gt;&lt;div style="line-height: 18px; margin: 5px 0;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small; margin-bottom: 6px;"&gt; This Delphi history document provides concise descriptions of Delphi versions and its history, along with a brief list of features and notes.&lt;/span&gt;                             &lt;/div&gt;&lt;br /&gt;&lt;/td&gt;                         &lt;/tr&gt;&lt;tr&gt;                           &lt;td&gt;&lt;span style="font-family: Georgia, 'Times New Roman', Times, serif; font-size: medium;"&gt;                               &lt;a href="http://glclk.about.com/?zi=5/DdzS" style="color: #3366cc; margin-bottom: 6px;" target="_blank"&gt;TQPDF - Delphi Wrapper for the Open Source QPDF.DLL a PDF-2-&lt;/a&gt;                             &lt;/span&gt;                             &lt;br /&gt;&lt;div style="line-height: 18px; margin: 5px 0;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small; margin-bottom: 6px;"&gt;QPDF is not a PDF content creation library, a PDF viewer, or a program capable of converting PDF into other formats. In particular, QPDF knows nothing about the semantics of PDF content streams. Once you have a valid PDF file, QPDF can be used to transform that file in ways perhaps your original PDF creation can't handle.&lt;/span&gt;                             &lt;/div&gt;&lt;br /&gt;&lt;/td&gt;                         &lt;/tr&gt;&lt;tr&gt;                           &lt;td&gt;&lt;span style="font-family: Georgia, 'Times New Roman', Times, serif; font-size: medium;"&gt;                               &lt;a href="http://glclk.about.com/?zi=5/DdzT" style="color: #3366cc; margin-bottom: 6px;" target="_blank"&gt;Delphi IDE Tools and Plug-Ins Every Developer Should Use&lt;/a&gt;                             &lt;/span&gt;                             &lt;br /&gt;&lt;div style="line-height: 18px; margin: 5px 0;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small; margin-bottom: 6px;"&gt;in Tools and Utilities :: Delphi IDE - Integrated Development Eenvironment provides all the tools you need to design, develop, test, debug, and deploy applications, allowing rapid prototyping and a... &lt;a href="http://glclk.about.com/?zi=5/DdzT&amp;amp;zu=http%3A%2F%2Fdelphi.about.com%2Fb%2F2011%2F08%2F23%2Fdelphi-ide-tools-and-plug-ins-every-developer-should-use.htm%3Fnl%3D1" target="_blank"&gt;Read more&lt;/a&gt;&lt;/span&gt;                             &lt;/div&gt;&lt;br /&gt;&lt;/td&gt;                         &lt;/tr&gt;&lt;tr&gt;                           &lt;td&gt;&lt;span style="font-family: Georgia, 'Times New Roman', Times, serif; font-size: medium;"&gt;                               &lt;a href="http://glclk.about.com/?zi=5/DdzU" style="color: #3366cc; margin-bottom: 6px;" target="_blank"&gt;Top Picks - Delphi Tools and Components&lt;/a&gt;                             &lt;/span&gt;                             &lt;br /&gt;&lt;div style="line-height: 18px; margin: 5px 0;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small; margin-bottom: 6px;"&gt;What are the best Delphi related tools? What component should you buy? Is this VCL/CLX/&lt;a href="http://vcl.net/" target="_blank"&gt;VCL.NET&lt;/a&gt; library what you really need?&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;td bgcolor="#eeeeee" valign="top" width="240"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor="#ebe6db" colspan="2" height="1" width="100%"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;td bgcolor="#ebe6db" width="2"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-8144653305101152467?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/8144653305101152467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=8144653305101152467&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/8144653305101152467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/8144653305101152467'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2011/09/about-delphi-16-delphi-versions-in-16.html' title='About Delphi: 16 Delphi Versions In 16 Years + Useful Articles'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-5955367857734313036</id><published>2011-07-31T17:03:00.003+07:00</published><updated>2011-07-31T17:03:00.296+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lain-lain'/><title type='text'>Mungkinkah Ini Terjadi?</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;h1 style="margin-left: 3px; margin-top: 12pt;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit; font-size: small; font-weight: normal;"&gt;Dear Delphier Indonesia. Mungkin nggak kita bisa melakukan kegiatan rutin seperti di uandangan di bawah ini?&lt;/span&gt;&lt;/h1&gt;&lt;h1 style="color: #009999; font-family: arial; font-size: 16pt; margin-left: 3px; margin-top: 12pt;"&gt;&lt;small&gt;Upcoming Sydney meeting&lt;/small&gt;&lt;/h1&gt;&lt;h1 style="color: #009999; font-family: arial; font-size: 16pt; margin-left: 3px; margin-top: 12pt;"&gt;&lt;span style="color: red;"&gt;&lt;small&gt;Wednesday, 20th&lt;b&gt;&amp;nbsp;July 2011&lt;/b&gt;:&amp;nbsp;&lt;/small&gt;&lt;/span&gt;&lt;/h1&gt;&lt;span style="font-family: arial; font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: arial; font-size: 9pt; line-height: 11pt;"&gt;&lt;span style="font-size: x-small;"&gt;Join us for the&amp;nbsp;&lt;big style="color: red;"&gt;&lt;big&gt;10th anniversary&lt;/big&gt;&lt;/big&gt;&amp;nbsp;ADUG meeting in&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;Sydney&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;(yep, we started in July 2001 see also&amp;nbsp;&lt;a href="http://www.adug.org.au/meetings/syd/past_meetings.htm#July2001" style="color: #006666; font-family: Arial; font-size: 10pt; text-decoration: underline;"&gt;here&lt;/a&gt;):&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family: arial; font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;h3 style="color: #999966; font-family: Arial; font-size: 12pt;"&gt;&lt;span style="font-size: x-small;"&gt;A Practical Overview of Delphi's Generic Collection Classes - Malcolm Groves&lt;/span&gt;&lt;/h3&gt;&lt;span style="font-family: arial; font-size: x-small;"&gt;&lt;span style="font-size: x-small;"&gt;Delphi introduced&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Generic_programming#Generic_programming_in_Delphi" style="color: #006666; font-family: Arial; font-size: 10pt; text-decoration: underline;" target="_blank"&gt;Generics&lt;/a&gt;&amp;nbsp;a few versions back, along with a whole bunch of very useful generic collection classes. However, for some people all those angle brackets and T's still look like their keyboard threw up in their code editor. In this session Malcolm will attempt to give a gentle, practical overview of the various generic collections such as TList&amp;lt;T&amp;gt;, TDictionary&amp;lt;T&amp;gt;, TQueue&amp;lt;T&amp;gt; and others, along with topics such as searching, sorting, comparators and enumerators.&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;h3 style="color: #999966; font-family: Arial; font-size: 12pt;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-size: x-small;"&gt;Code Crunch - Delphi Community&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;span style="font-family: arial; font-size: x-small;"&gt;Bring your Delphi project along to the meeting and let us hlep you to solve a tricky problem you may have encountered in your recent work.&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: arial; font-size: x-small;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;h3 style="color: #999966; font-family: Arial; font-size: 12pt;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;big&gt;Where:&lt;/big&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;span style="font-family: arial; font-size: x-small;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote style="font-family: arial;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: arial; font-size: 9pt; line-height: 11pt;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;b&gt;Embarcadero Sydney Office&lt;br /&gt;Level 2&lt;br /&gt;&lt;a href="http://maps.google.com.au/maps?f=q&amp;amp;source=s_q&amp;amp;hl=en&amp;amp;geocode=&amp;amp;q=100+Clarence+Street,+Sydney+NSW+2000&amp;amp;sll=-25.335448,135.745076&amp;amp;sspn=62.911267,79.980469&amp;amp;ie=UTF8&amp;amp;hq=&amp;amp;hnear=100+Clarence+St,+Sydney+New+South+Wales+2000&amp;amp;z=17" style="color: #006666; font-family: Arial; font-size: 10pt; text-decoration: underline;" target="_blank"&gt;100 Clarence Street&lt;br /&gt;Sydney NSW 2000&lt;/a&gt;&lt;br /&gt;Closest train station:&amp;nbsp;&lt;a href="http://maps.google.com.au/maps?f=d&amp;amp;source=s_d&amp;amp;saddr=York+St&amp;amp;daddr=100+Clarence+St,+Sydney+New+South+Wales+2000&amp;amp;geocode=Feo_-_0dLTcDCQ%3BFbA2-_0dPzYDCSnftV5ZP64SazH7QiD1M8Lvfw&amp;amp;hl=en&amp;amp;mra=ltm&amp;amp;dirflg=w&amp;amp;sll=-33.868112,151.205439&amp;amp;sspn=0.006298,0.009838&amp;amp;ie=UTF8&amp;amp;ll=-33.86679,151.205762&amp;amp;spn=0.003149,0.004919&amp;amp;z=18" style="color: #006666; font-family: Arial; font-size: 10pt; text-decoration: underline;" target="_blank"&gt;Wynyard Station&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-family: arial; font-size: x-small;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;h3 style="color: #999966; font-family: Arial; font-size: 12pt;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;big&gt;When&lt;/big&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;span style="font-family: arial; font-size: x-small;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: arial; font-size: 9pt; line-height: 11pt;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;b&gt;from 6:00 pm (the live stream starts at 6:15 pm)&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="fullpost"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-5955367857734313036?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/5955367857734313036/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=5955367857734313036&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/5955367857734313036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/5955367857734313036'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2011/07/mungkinkah-ini-terjadi.html' title='Mungkinkah Ini Terjadi?'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-5720821206474869328</id><published>2011-07-27T12:59:00.000+07:00</published><updated>2011-07-27T12:59:26.113+07:00</updated><title type='text'>Akhirnya Jakarta Didatangi  Juga</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Kabar gembira buat delphier Indonesia. &lt;b&gt;RAD STUDIO WORLD TOUR&lt;/b&gt; akhirnya menyambangi jakarta.&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #373737; font-family: verdana, georgia, sans-serif; font-size: 8px; line-height: 12px; text-transform: uppercase;"&gt;BY&amp;nbsp;&lt;a href="http://www.malcolmgroves.com/" rel="external" style="color: #878787; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" title="Visit Malcolm’s website"&gt;MALCOLM&lt;/a&gt;, ON 1 DAY AGO , UNDER&amp;nbsp;&lt;a href="http://www.malcolmgroves.com/blog/?cat=5" rel="category" style="color: #878787; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" title="View all posts in Development"&gt;DEVELOPMENT&lt;/a&gt;,&amp;nbsp;&lt;a href="http://www.malcolmgroves.com/blog/?cat=14" rel="category" style="color: #878787; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;" title="View all posts in Events"&gt;EVENTS&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;span class="Apple-style-span" style="color: #373737; font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: 16px;"&gt;&lt;a class="in_single" href="http://www.malcolmgroves.com/blog/wp-content/uploads/2011/06/delphi.jpg" id="feature-image" style="color: #878787; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;"&gt;&lt;img alt="delphi" class="thumb-in-single wp-post-image" height="150" src="http://www.malcolmgroves.com/blog/wp-content/uploads/2011/06/delphi-150x150.jpg" style="background-attachment: initial; background-clip: initial; background-color: #f5f6f6; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-color: rgb(235, 235, 235); border-bottom-left-radius: 6px 6px; border-bottom-right-radius: 6px 6px; border-bottom-style: solid; border-bottom-width: 1px; border-color: initial; border-left-color: rgb(235, 235, 235); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(235, 235, 235); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(235, 235, 235); border-top-left-radius: 6px 6px; border-top-right-radius: 6px 6px; border-top-style: solid; border-top-width: 1px; border-width: initial; float: left; margin-bottom: 15px; margin-left: 0px; margin-right: 20px; margin-top: 0px; padding-bottom: 8px; padding-left: 8px; padding-right: 8px; padding-top: 8px;" title="delphi" width="150" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="post-content" style="color: #666666; font-family: 'Droid Sans', arial; font-size: 12px; line-height: 17px; margin-bottom: 22px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="fullpost"&gt;I promised to post more details of these upcoming events when I could. Well, now I can.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="fullpost"&gt;Current cities:&lt;/span&gt;&lt;/div&gt;&lt;ul style="margin-bottom: 0px; margin-left: 10px; margin-right: 0px; margin-top: 0px; padding-bottom: 10px; padding-left: 15px; padding-right: 10px; padding-top: 10px;"&gt;&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="fullpost"&gt;&lt;a href="http://forms.embarcadero.com/forms/APNZRADStudioWorldTourEvent" style="color: #228570; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; text-shadow: rgb(204, 204, 204) 1px 1px 2px;"&gt;Auckland&lt;/a&gt;&amp;nbsp;(04 August 2011)&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="fullpost"&gt;&lt;a href="http://forms.embarcadero.com/forms/APAURADWorldTourEvent" style="color: #228570; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; text-shadow: rgb(204, 204, 204) 1px 1px 2px;"&gt;Australia&lt;/a&gt;&amp;nbsp;(Sydney/Melbourne, 11-12 August 2011)&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="fullpost"&gt;&lt;a href="http://forms.embarcadero.com/forms/APKRAPRADStudioWorldTourEvent" style="color: #228570; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; text-shadow: rgb(204, 204, 204) 1px 1px 2px;"&gt;Seoul&lt;/a&gt;&amp;nbsp;(12 August 2011)&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="fullpost"&gt;&lt;a href="http://forms.embarcadero.com/forms/APTWRADWorldTourEvent" style="color: #228570; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; text-shadow: rgb(204, 204, 204) 1px 1px 2px;"&gt;Taiwan&lt;/a&gt;&amp;nbsp;(4 cities, 16-19 August 2011)&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="fullpost"&gt;&lt;a href="http://forms.embarcadero.com/forms/APINRADWorldTourEvent" style="color: #228570; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; text-shadow: rgb(204, 204, 204) 1px 1px 2px;"&gt;Mumbai&lt;/a&gt;&amp;nbsp;(17 August 2011)&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="fullpost"&gt;&lt;a href="http://forms.embarcadero.com/forms/APINRADWorldTourEvent" style="color: #228570; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; text-shadow: rgb(204, 204, 204) 1px 1px 2px;"&gt;Bangalore&lt;/a&gt;&amp;nbsp;(18 August 2011)&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="fullpost"&gt;&lt;a href="http://forms.embarcadero.com/forms/APIDRADWorldTourEvent" style="color: #228570; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; text-shadow: rgb(204, 204, 204) 1px 1px 2px;"&gt;Jakarta&lt;/a&gt;&amp;nbsp;(9 September 2011)&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="fullpost"&gt;…and here’s the very high-level description:&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="fullpost"&gt;&lt;em style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Whether you are building new applications, or migrating existing systems, this workshop will help you decide where to invest your team’s time and effort to make the most positive impact on your business, today and into the future.&lt;/em&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="fullpost"&gt;&lt;em style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;You will hear about:&lt;/div&gt;&lt;ul style="margin-bottom: 0px; margin-left: 10px; margin-right: 0px; margin-top: 0px; padding-bottom: 10px; padding-left: 15px; padding-right: 10px; padding-top: 10px;"&gt;&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Application frameworks&lt;/li&gt;&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;a class="kblinker" href="http://www.embarcadero.com/products/delphi/index.php" style="color: #228570; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; outline-color: initial; outline-style: none; outline-width: initial; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none; text-shadow: rgb(204, 204, 204) 1px 1px 2px;" target="_blank" title="More about delphi »"&gt;Delphi&lt;/a&gt;&amp;nbsp;64-bit&lt;/li&gt;&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;The future of database access&lt;/li&gt;&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;DataSnap and Cloud&lt;/li&gt;&lt;li style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Mobile development&lt;/li&gt;&lt;/ul&gt;&lt;/em&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;em style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;/em&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Before you ask, yes, there will be more cities and countries added soon. Not just in Asia but around the world.&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 15px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;Source :&amp;nbsp;&lt;a href="http://www.malcolmgroves.com/blog/?p=826"&gt;http://www.malcolmgroves.com/blog/?p=826&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-5720821206474869328?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/5720821206474869328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=5720821206474869328&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/5720821206474869328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/5720821206474869328'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2011/07/akhirnya-jakarta-didatangi-juga.html' title='Akhirnya Jakarta Didatangi  Juga'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-41610077842976936</id><published>2011-07-24T16:52:00.003+07:00</published><updated>2011-07-24T16:52:00.382+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='About Delphi'/><title type='text'>Facebook and Delphi - Facebook API for Delphi + 3 Useful Articles</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;From Zarko Gajic, your Guide to DelphiVol. 14, No. 29. Given that Delphi is a Win32 development environment, let's see if there are some libraries to help you build some Facebook apps (or anything Facebook-aware).&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 540px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="font-family: arial, sans-serif; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family: arial, sans-serif; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;span style="font-family: Georgia, 'Times New Roman', Times, serif; font-size: medium;"&gt;&lt;a href="http://glclk.about.com/?zi=5/DDfU" style="color: #3366cc;" target="_blank"&gt;Facebook and Delphi - Facebook API for Delphi&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;div style="line-height: 18px; margin-bottom: 5px; margin-left: 0px; margin-right: 0px; margin-top: 5px;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small; margin-bottom: 6px;"&gt;Ok, so now that you know what Facebook is, you probably are asking how can I build a Delphi application to allow me and my friends to "connect" to Facebook more easily :)&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family: arial, sans-serif; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span style="font-family: Georgia, 'Times New Roman', Times, serif; font-size: medium;"&gt;&lt;a href="http://glclk.about.com/?zi=5/DDfV" style="color: #3366cc; margin-bottom: 6px;" target="_blank"&gt;Delayed Event Handling Using Event Handler Detaching&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;div style="line-height: 18px; margin-bottom: 5px; margin-left: 0px; margin-right: 0px; margin-top: 5px;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small; margin-bottom: 6px;"&gt;Allan Lloyd made a remark about the idea suggesting an extension: when you have an event handler which takes some time (&amp;gt; 0.1 sec) to run, but you don't want another click or a double click to call the event handler a second time before the first call has finished, you can detach the event handler from the event while the event handling code is being executed.&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family: arial, sans-serif; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span style="font-family: Georgia, 'Times New Roman', Times, serif; font-size: medium;"&gt;&lt;a href="http://glclk.about.com/?zi=5/DDfW" style="color: #3366cc; margin-bottom: 6px;" target="_blank"&gt;Changing the Title of a Print Dialog in Delphi&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;div style="line-height: 18px; margin-bottom: 5px; margin-left: 0px; margin-right: 0px; margin-top: 5px;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small; margin-bottom: 6px;"&gt;in Delphi TIPS :: The TPrintDialog component displays a standard Windows dialog box for sending jobs to a printer. Unfortunately, the TPrintDialog does not expose the Title property. By handing...&amp;nbsp;&lt;a href="http://glclk.about.com/?zi=5/DDfW&amp;amp;zu=http%3A%2F%2Fdelphi.about.com%2Fb%2F2011%2F07%2F14%2Ftprintdialog-title-caption-change.htm%3Fnl%3D1" style="color: #0000cc;" target="_blank"&gt;Read more&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family: arial, sans-serif; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span style="font-family: Georgia, 'Times New Roman', Times, serif; font-size: medium;"&gt;&lt;a href="http://glclk.about.com/?zi=5/DDfX" style="color: #3366cc; margin-bottom: 6px;" target="_blank"&gt;Learn Delphi for .NET&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;div style="line-height: 18px; margin-bottom: 5px; margin-left: 0px; margin-right: 0px; margin-top: 5px;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small; margin-bottom: 6px;"&gt;Articles and technical information that will help you start developing with and master Delphi for .NET. Find out about the new IDE, Ado.Net, Asp.Net, ECO, IL, aspx, XML Web Services, msil, ...&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-41610077842976936?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/41610077842976936/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=41610077842976936&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/41610077842976936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/41610077842976936'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2011/07/facebook-and-delphi-facebook-api-for.html' title='Facebook and Delphi - Facebook API for Delphi + 3 Useful Articles'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-6512552621341314324</id><published>2011-07-22T16:47:00.001+07:00</published><updated>2011-07-22T16:48:05.214+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='About Delphi'/><title type='text'>Generating QR-Code Using Delphi + 3 Useful Articles</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;span class="fullpost"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 570px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="font-family: arial, sans-serif; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;" valign="top"&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 540px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="font-family: arial, sans-serif; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 540px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="font-family: arial, sans-serif; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;" valign="top" width="90"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td style="font-family: arial, sans-serif; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div&gt;&lt;span style="color: #777777; font-family: Georgia, 'Times New Roman', serif; font-size: x-small;"&gt;&lt;b&gt;&lt;i&gt;From&amp;nbsp;&lt;a href="http://delphi.about.com/mbiopage.htm?nl=1" style="color: #3366cc; text-decoration: none;" target="_blank"&gt;Zarko Gajic&lt;/a&gt;, your Guide to Delphi&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="line-height: 18px; margin-bottom: 12px; margin-left: 0px; margin-right: 0px; margin-top: 12px;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small;"&gt;&lt;i&gt;Vol. 14, No. 27.&lt;/i&gt;&amp;nbsp;A QR code is a specific barcode that gained popularity during the last years when mobile phones with cameras allowed mobile phone users to quickly scan the image and get more info on a product, business, event, offer, URL address, ...&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family: arial, sans-serif; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;span style="font-family: Georgia, 'Times New Roman', Times, serif; font-size: medium;"&gt;&lt;a href="http://glclk.about.com/?zi=5/D5jq" style="color: #3366cc;" target="_blank"&gt;Generating QR-Code Using Delphi&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;div style="line-height: 18px; margin-bottom: 5px; margin-left: 0px; margin-right: 0px; margin-top: 5px;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small; margin-bottom: 6px;"&gt;Using Delphi there are several ways you can generate QR codes - to encode any text (URL, phone number, simple message). QR Codes store up to 4,296 alphanumeric characters of arbitrary text.&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family: arial, sans-serif; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span style="font-family: Georgia, 'Times New Roman', Times, serif; font-size: medium;"&gt;&lt;a href="http://glclk.about.com/?zi=5/D5jr" style="color: #3366cc; margin-bottom: 6px;" target="_blank"&gt;What Was Your First (Not a "Hello World" Type) Delphi App.?&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;div style="line-height: 18px; margin-bottom: 5px; margin-left: 0px; margin-right: 0px; margin-top: 5px;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small; margin-bottom: 6px;"&gt;When you want to learn a new programming language you pick a book or find an online tutorial. The first project you will create would be a "hello world" type of application - such a program should be one of the simplest programs possible in a computer programming language.&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family: arial, sans-serif; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span style="font-family: Georgia, 'Times New Roman', Times, serif; font-size: medium;"&gt;&lt;a href="http://glclk.about.com/?zi=5/D5js" style="color: #3366cc; margin-bottom: 6px;" target="_blank"&gt;Group Items in Delphi's TListView Control with Expandable and Collapsible Sections&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;div style="line-height: 18px; margin-bottom: 5px; margin-left: 0px; margin-right: 0px; margin-top: 5px;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small; margin-bottom: 6px;"&gt;in TListView Ideas :: The TListView Delphi control displays and manages a list of items, displayed in columns, vertically or horizontally, with small or large icons. Windows XP, and later versions,...&amp;nbsp;&lt;a href="http://glclk.about.com/?zi=5/D5js&amp;amp;zu=http%3A%2F%2Fdelphi.about.com%2Fb%2F2011%2F06%2F30%2Fgroup-items-delphi-tlistview-expandable-collapsible-sections.htm%3Fnl%3D1" style="color: #0000cc;" target="_blank"&gt;Read more&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family: arial, sans-serif; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span style="font-family: Georgia, 'Times New Roman', Times, serif; font-size: medium;"&gt;&lt;a href="http://glclk.about.com/?zi=5/D5jt" style="color: #3366cc; margin-bottom: 6px;" target="_blank"&gt;Advanced Delphi Windows / Shell / API / Graphics / OLE Programming&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;div style="line-height: 18px; margin-bottom: 5px; margin-left: 0px; margin-right: 0px; margin-top: 5px;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small; margin-bottom: 6px;"&gt;A simple understanding of Delphi is fine when you create applications for home use. Once you start building real-world applications you'll start looking for ways to solve more complex tasks - and Delphi will have all the answers!&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-6512552621341314324?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/6512552621341314324/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=6512552621341314324&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/6512552621341314324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/6512552621341314324'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2011/07/generating-qr-code-using-delphi-3.html' title='Generating QR-Code Using Delphi + 3 Useful Articles'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-1324476075684134387</id><published>2011-04-20T07:08:00.000+07:00</published><updated>2011-04-20T07:08:00.084+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='About Delphi'/><title type='text'>Get Single IXMLNode Using XPath's IDomNodeSelect</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="gmail_quote"&gt;&lt;div&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 832px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bgcolor="#ebe6db" width="2"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td bgcolor="#ffffff" width="830"&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 830px;"&gt; &lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 570px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="19"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td valign="top"&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 540px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-family: Georgia, 'Times New Roman', Times, serif; font-size: medium;"&gt;&lt;a href="http://glclk.about.com/?zi=5/CMuW" style="color: #3366cc;" target="_blank"&gt;Get Single IXMLNode Using XPath's IDomNodeSelect&lt;/a&gt;                             &lt;/span&gt;                             &lt;br /&gt;&lt;div style="line-height: 18px; margin: 5px 0;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small; margin-bottom: 6px;"&gt;To select the first node that matches the XPath expression you can use the selectNode function of the IDomNodeSelect defined in XmlDom.pas.&lt;/span&gt;                             &lt;/div&gt;&lt;br /&gt;&lt;/td&gt;                         &lt;/tr&gt;&lt;tr&gt;                           &lt;td&gt;&lt;span style="font-family: Georgia, 'Times New Roman', Times, serif; font-size: medium;"&gt;                               &lt;a href="http://glclk.about.com/?zi=5/CMuX" style="color: #3366cc; margin-bottom: 6px;" target="_blank"&gt;Remove Duplicate Items in Delphi's TStringList&lt;/a&gt;                             &lt;/span&gt;                             &lt;br /&gt;&lt;div style="line-height: 18px; margin: 5px 0;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small; margin-bottom: 6px;"&gt; Many Delphi controls like TListBox, TComboBox and TMemo, for example, expose a property which is of the TStrings type: Items for TListBox, Lines for TMemo. When you fill in a string list with string items you might end up with a list holding duplicate strings - more than one item with the 'same' string value.&lt;/span&gt;                             &lt;/div&gt;&lt;br /&gt;&lt;/td&gt;                         &lt;/tr&gt;&lt;tr&gt;                           &lt;td&gt;&lt;span style="font-family: Georgia, 'Times New Roman', Times, serif; font-size: medium;"&gt;                               &lt;a href="http://glclk.about.com/?zi=5/CMuY" style="color: #3366cc; margin-bottom: 6px;" target="_blank"&gt;Select XML Nodes Into IXMLNodeList Using XPath In XmlDom.Pas&lt;/a&gt;                             &lt;/span&gt;                             &lt;br /&gt;&lt;div style="line-height: 18px; margin: 5px 0;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small; margin-bottom: 6px;"&gt;in Delphi and XML :: XPath uses a path notation, similar to that used in file systems and URLs, to specify and match pieces of the document. In Delphi, the... &lt;a href="http://glclk.about.com/?zi=5/CMuY&amp;amp;zu=http%3A%2F%2Fdelphi.about.com%2Fb%2F2011%2F04%2F05%2Fselect-xml-nodes-into-ixmlnodelist-using-xpath-in-xmldom-pas.htm%3Fnl%3D1" target="_blank"&gt;Read more&lt;/a&gt;&lt;/span&gt;                             &lt;/div&gt;&lt;br /&gt;&lt;/td&gt;                         &lt;/tr&gt;&lt;tr&gt;                           &lt;td&gt;&lt;span style="font-family: Georgia, 'Times New Roman', Times, serif; font-size: medium;"&gt;                               &lt;a href="http://glclk.about.com/?zi=5/CMuZ" style="color: #3366cc; margin-bottom: 6px;" target="_blank"&gt;Advanced Delphi Windows / Shell / API / Graphics / OLE Programming&lt;/a&gt;                             &lt;/span&gt;                             &lt;br /&gt;&lt;div style="line-height: 18px; margin: 5px 0;"&gt;&lt;span style="color: #333333; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: x-small; margin-bottom: 6px;"&gt;A simple understanding of Delphi is fine when you create applications for home use. Once you start building real-world applications you'll start looking for ways to solve more complex tasks - and Delphi will have all the answers!&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;td bgcolor="#eeeeee" valign="top" width="240"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td bgcolor="#ebe6db" colspan="2" height="1" width="100%"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;td bgcolor="#ebe6db" width="2"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-1324476075684134387?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/1324476075684134387/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=1324476075684134387&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/1324476075684134387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/1324476075684134387'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2011/04/get-single-ixmlnode-using-xpaths.html' title='Get Single IXMLNode Using XPath&apos;s IDomNodeSelect'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-1217944881241030741</id><published>2011-04-15T07:03:00.003+07:00</published><updated>2011-04-15T07:04:30.717+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DelphiFeeds'/><title type='text'>Generics, Enumerated types and ordinal values</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="gmail_quote"&gt;&lt;div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0 2em;"&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="line-height: 1.4em; margin-bottom: 0;"&gt;&lt;div style="margin: 1em 0 3px 0;"&gt;&lt;a href="http://feedproxy.google.com/~r/delphifeeds/~3/OYBv-nJiCJo/78758?utm_source=feedburner&amp;amp;utm_medium=email" name="12f3ab3d3d129ce6_1" style="font-family: Arial, Helvetica, sans-serif; font-size: 18px;" target="_blank"&gt;Generics, Enumerated types and ordinal values&lt;/a&gt; &lt;/div&gt;&lt;div style="color: #555555; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; font-size: 13px; line-height: 140%; margin: 9px 0 3px 0;"&gt;Posted: 08 Apr 2011 09:02 AM PDT&lt;/div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0;"&gt;I wish this was a solution post, but it is a frustration post.  I trying to figure out how I can use Ord() to convert an enumerated type to integer or cast an integer to an enumerated type using generics type arguments?uses  SysUtils,  TypInfo;type  TEnumGen = class    class function Name(const ...&lt;img height="1" width="1" /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="line-height: 1.4em; margin-bottom: 0;"&gt;&lt;div style="margin: 1em 0 3px 0;"&gt;&lt;a href="http://feedproxy.google.com/~r/delphifeeds/~3/L5KVPtlcb9o/78770?utm_source=feedburner&amp;amp;utm_medium=email" name="12f3ab3d3d129ce6_2" style="font-family: Arial, Helvetica, sans-serif; font-size: 18px;" target="_blank"&gt;Webinar on Building &amp;amp; Tuning SQL Server Database-Driven Applications with RAD Studio and DB PowerStudio&lt;/a&gt; &lt;/div&gt;&lt;div style="color: #555555; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; font-size: 13px; line-height: 140%; margin: 9px 0 3px 0;"&gt;Posted: 08 Apr 2011 04:03 AM PDT&lt;/div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0;"&gt;If you create applications with Delphi or RAD Studio that connect with Microsoft SQL Server databases, sign up for this new webinar to learn some of the secrets for delivering the highest performance applications.We've also extended the discount on DB PowerStudio for SQL Server for users and ...&lt;img height="1" width="1" /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-1217944881241030741?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/1217944881241030741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=1217944881241030741&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/1217944881241030741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/1217944881241030741'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2011/04/generics-enumerated-types-and-ordinal.html' title='Generics, Enumerated types and ordinal values'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-8003940329095843934</id><published>2011-04-13T05:42:00.000+07:00</published><updated>2011-04-13T05:42:00.132+07:00</updated><title type='text'>Why startups don't use .net</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;a href="http://feedproxy.google.com/%7Er/delphifeeds/%7E3/DX3JthsoW8o/78411?utm_source=feedburner&amp;amp;utm_medium=email" name="12f072a14d186ad7_1" style="font-family: Arial,Helvetica,sans-serif; font-size: 18px;" target="_blank"&gt;Why startups don't use .net&lt;/a&gt; &lt;/div&gt;&lt;div style="color: #555555; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 9px 0pt 3px;"&gt;Posted: 30 Mar 2011 12:58 AM PDT&lt;/div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0pt;"&gt;There have been several articles over the last couple of weeks about the usefulness of .net for startups. I will mention three:  * Did the Microsoft stack kill MySpace? * Why we don't hire .net programmers * Why Microsoft could kill your startup career  Even though our company is now several years ...&lt;img height="1" src="" width="1" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;div class="gmail_quote"&gt;&lt;div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0pt 2em;"&gt;&lt;table&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td style="line-height: 1.4em; margin-bottom: 0pt;"&gt;&lt;div style="margin: 1em 0pt 3px;"&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="line-height: 1.4em; margin-bottom: 0pt;"&gt;&lt;div style="margin: 1em 0pt 3px;"&gt;&lt;a href="http://feedproxy.google.com/%7Er/delphifeeds/%7E3/yeArbO2rMZ4/78400?utm_source=feedburner&amp;amp;utm_medium=email" name="12f072a14d186ad7_2" style="font-family: Arial,Helvetica,sans-serif; font-size: 18px;" target="_blank"&gt;QC #2746: How high is your TButton? 23?&lt;/a&gt; &lt;/div&gt;&lt;div style="color: #555555; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 9px 0pt 3px;"&gt;Posted: 29 Mar 2011 10:58 AM PDT&lt;/div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0pt;"&gt;In standard Windows applications the default button height is 23 pixels. To get that information you could try to measure buttons in other applications, but you will very likely fail to get the exact size, because some controls do have invisible borders. Thatswhy you better check the "Windows ...&lt;img height="1" src="" width="1" /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="line-height: 1.4em; margin-bottom: 0pt;"&gt;&lt;div style="margin: 1em 0pt 3px;"&gt;&lt;a href="http://feedproxy.google.com/%7Er/delphifeeds/%7E3/wPm3u1xBZQQ/78391?utm_source=feedburner&amp;amp;utm_medium=email" name="12f072a14d186ad7_3" style="font-family: Arial,Helvetica,sans-serif; font-size: 18px;" target="_blank"&gt;Delphi Labs: DataSnap - Passing "Plain Old Delphi Objects" Parameters&lt;/a&gt; &lt;/div&gt;&lt;div style="color: #555555; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 9px 0pt 3px;"&gt;Posted: 29 Mar 2011 07:08 AM PDT&lt;/div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0pt;"&gt;One of the cool new features in introduced in Delphi XE is a possibility to use TObject-descendant as parameter types in DataSnap server methods. I was planning to cover different possible parameter types that you can use in DataSnap applications, but it would be a huge discussion. Jim Tierney from ...&lt;img height="1" src="" width="1" /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="line-height: 1.4em; margin-bottom: 0pt;"&gt;&lt;div style="margin: 1em 0pt 3px;"&gt;&lt;a href="http://feedproxy.google.com/%7Er/delphifeeds/%7E3/0snhk1L2wTM/78390?utm_source=feedburner&amp;amp;utm_medium=email" name="12f072a14d186ad7_4" style="font-family: Arial,Helvetica,sans-serif; font-size: 18px;" target="_blank"&gt;Delphi in Depth: ClientDataSets&lt;/a&gt; &lt;/div&gt;&lt;div style="color: #555555; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 9px 0pt 3px;"&gt;Posted: 29 Mar 2011 05:11 AM PDT&lt;/div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0pt;"&gt;I'm pleased to announce that my latest book, Delphi in Depth: ClientDataSets, is now available for purchase. The following is the introduction from this book. At the end of this post you will find a link to the book site. That site includes links for ordering the book from several different outlets, ...&lt;img height="1" src="" width="1" /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table style="border-top: 1px solid rgb(153, 153, 153); margin-top: 1.5em; padding-top: 4px; width: 100%;"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td style="color: #333333; font-family: Helvetica,Arial,Sans-Serif; font-size: 11px; margin: 0pt 6px 1.2em 0pt; text-align: left;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;td style="color: #333333; font-family: Helvetica,Arial,Sans-Serif; font-size: 11px; margin: 0pt 6px 1.2em 0pt; text-align: right; vertical-align: top;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="2" style="color: #333333; font-family: Helvetica,Arial,Sans-Serif; font-size: 11px; margin: 0pt 6px 1.2em 0pt; text-align: left;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-8003940329095843934?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/8003940329095843934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=8003940329095843934&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/8003940329095843934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/8003940329095843934'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2011/04/why-startups-dont-use-net.html' title='Why startups don&apos;t use .net'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-1511213704131013796</id><published>2011-04-11T06:56:00.000+07:00</published><updated>2011-04-11T06:56:00.144+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Database'/><title type='text'>Training Gratis Membangun Aplikasi Database Menggunakan Delphi</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Anda ingin training Membuat Aplikasi Database Menggunakan Delphi? Anda ingin training Delphi tapi tidak ada biaya? Hmmm... jangan khawatir.  &lt;a href="http://delphi.about.com/bio/Zarko-Gajic-3522.htm"&gt;Zarko Gajic &lt;/a&gt; , penulis artikel-artikel delphi berkualitas akan membantu anda. Anda hanya mendaftar &lt;a href="http://delphi.about.com/c/ec/1.htm" target="_blank"&gt;di sini&lt;/a&gt;, kemudian anda akan diirimi 26 email (1 hari 1 email) yang berisi materi pemrograman database menggunakan delphi. Jangan khawatir, ini bukan spam. Saya juga tidak akan mengirimi anda spam, karena saya sendiri juga benci spam.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;b&gt;Berapa Lama Training Ini Berlangsung? &lt;/b&gt;&lt;br /&gt;Training ini nanti akan berlangsung selama 26 hari. Anda akan menerima materi pertama setelah anda mendaftar. Selanjutnya anda akan dikirimi email kedua dan seterusnya sehari satu email. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Apa Yang Saya Pelajari?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Dalam training gratis ini, anda akan mempelajari bagaimana cara men-design, men-develop dan melakukan testing aplikasi database menggunakan ADO. Training ini akan menitikberatkan pada penggunaan ADO yaitu melakukan koneksi database menggunakan TADOConnection, bekerja dengan Table dan Queriy, meng-handle exception , membuat laporan, dll. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Apakah Ada Syarat Khusus Untuk Mengikuti Training ini ? &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Sebenarnya tidak ada syarat khusus untuk mengikuti training gratis ini. Anda hanya cukup mendaftar&lt;a href="http://delphi.about.com/c/ec/1.htm" target="_blank"&gt; di sini&lt;/a&gt;, kemudian anda akan dikirimi materinya melalui email. Namun, supaya anda mudah mempelajari materi di training ini, anda sebaiknya memperhatikan hal-hal sbb : &lt;br /&gt;&lt;br /&gt;1. Sebaiknya anda mengerti bahasa inggris. (Materi akan disampaikan dengan bahasa inggris)&lt;br /&gt;2. Memahami dasar -dasar permograman delphi.&lt;br /&gt;3. Sabar : )&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-1511213704131013796?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/1511213704131013796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=1511213704131013796&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/1511213704131013796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/1511213704131013796'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2011/04/training-gratis-membangun-aplikasi.html' title='Training Gratis Membangun Aplikasi Database Menggunakan Delphi'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-3543634974162890556</id><published>2011-04-09T04:59:00.000+07:00</published><updated>2011-04-09T04:59:00.358+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='About Delphi'/><title type='text'>About Delphi: Your App In Windows Explorer Folder Context Menu + 3 More Articles</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;From &lt;a href="http://delphi.about.com/bio/Zarko-Gajic-3522.htm"&gt;Zarko Gajic&lt;/a&gt;, your Guide to DelphiVol. 14, No. 13. A neat trick to add an item to the right-click context popup menu for a folder in Windows Explorer. &lt;span class="fullpost"&gt;&lt;br /&gt;&lt;div class="gmail_quote"&gt;&lt;div&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 832px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;       &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 832px;"&gt;       &lt;tbody&gt;&lt;tr&gt;         &lt;td bgcolor="#ff3400" height="3"&gt;&lt;/td&gt;       &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 832px;"&gt;       &lt;tbody&gt;&lt;tr&gt;         &lt;td bgcolor="#ebe6db" width="2"&gt;&lt;/td&gt;         &lt;td bgcolor="#ffffff" width="830"&gt;&lt;table bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" style="width: 830px;"&gt;             &lt;tbody&gt;&lt;tr&gt;               &lt;td width="18"&gt;&lt;/td&gt;               &lt;td align="left" valign="top" width="190"&gt;&lt;div style="margin: 26px 0pt 0pt;"&gt;&lt;a href="http://www.about.com/?nl=1" target="_blank"&gt;&lt;img alt="About.com" border="0" height="28" src="http://0.tqn.com/f/d/an10.gif" width="186" /&gt;&lt;/a&gt;                 &lt;/div&gt;&lt;/td&gt;               &lt;td align="left" valign="top"&gt;&lt;div style="margin: 15px 0pt 0pt;"&gt;&lt;a href="http://glclk.about.com/?zi=5/CFHT" style="text-decoration: none;" target="_blank"&gt;                     &lt;span style="color: #a69e8c; font-family: Georgia,Times New Roman,Times,serif; font-size: x-large;"&gt;Delphi&lt;/span&gt;                   &lt;/a&gt;                 &lt;/div&gt;&lt;/td&gt;               &lt;td align="center" valign="middle" width="100"&gt;&lt;/td&gt;             &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" style="width: 830px;"&gt;             &lt;tbody&gt;&lt;tr&gt;               &lt;td&gt;&lt;img height="26" src="http://0.tqn.com/f/d/news.jpg" width="828" /&gt;&lt;/td&gt;             &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 830px;"&gt;             &lt;tbody&gt;&lt;tr&gt;               &lt;td bgcolor="#ebe6db" height="1"&gt;&lt;/td&gt;             &lt;/tr&gt;&lt;tr&gt;               &lt;td bgcolor="#ffffff"&gt;&lt;table border="0" cellpadding="0" cellspacing="0" height="25" style="width: 830px;"&gt;                   &lt;tbody&gt;&lt;tr&gt;                     &lt;td height="25" width="95"&gt;&lt;/td&gt;                     &lt;td bgcolor="#ebe6db" height="25" width="1"&gt;&lt;/td&gt;                     &lt;td align="center" height="25"&gt;&lt;div style="margin: 0pt 10px;"&gt;&lt;span style="font-family: Georgia,Times New Roman,Times,serif; font-size: x-small;"&gt;                           &lt;b&gt;                             &lt;a href="http://glclk.about.com/?zi=5/CFHT" style="color: #3366cc; text-decoration: none;" target="_blank"&gt;Delphi&lt;/a&gt;                           &lt;/b&gt;                         &lt;/span&gt;                       &lt;/div&gt;&lt;/td&gt;                     &lt;td bgcolor="#ebe6db" height="25" width="1"&gt;&lt;/td&gt;                     &lt;td align="center" height="25"&gt;&lt;div style="margin: 0pt 10px;"&gt;&lt;span style="font-family: Georgia,Times New Roman,Times,serif; font-size: x-small;"&gt;                           &lt;b&gt;                             &lt;a href="http://glclk.about.com/?zi=5/CFHW" style="color: #3366cc; text-decoration: none;" target="_blank"&gt;Basics&lt;/a&gt;                           &lt;/b&gt;                         &lt;/span&gt;                       &lt;/div&gt;&lt;/td&gt;                     &lt;td bgcolor="#ebe6db" height="25" width="1"&gt;&lt;/td&gt;                     &lt;td align="center" height="25"&gt;&lt;div style="margin: 0pt 10px;"&gt;&lt;span style="font-family: Georgia,Times New Roman,Times,serif; font-size: x-small;"&gt;                           &lt;b&gt;                             &lt;a href="http://glclk.about.com/?zi=5/CFHX" style="color: #3366cc; text-decoration: none;" target="_blank"&gt;Database Development&lt;/a&gt;                           &lt;/b&gt;                         &lt;/span&gt;                       &lt;/div&gt;&lt;/td&gt;                     &lt;td bgcolor="#ebe6db" height="25" width="1"&gt;&lt;/td&gt;                     &lt;td align="center" height="25"&gt;&lt;div style="margin: 0pt 10px;"&gt;&lt;span style="font-family: Georgia,Times New Roman,Times,serif; font-size: x-small;"&gt;                           &lt;b&gt;                             &lt;a href="http://glclk.about.com/?zi=5/CFHY" style="color: #3366cc; text-decoration: none;" target="_blank"&gt;Advanced Delphi&lt;/a&gt;                           &lt;/b&gt;                         &lt;/span&gt;                       &lt;/div&gt;&lt;/td&gt;                     &lt;td bgcolor="#ebe6db" height="25" width="1"&gt;&lt;/td&gt;                     &lt;td height="25" width="95"&gt;&lt;/td&gt;                   &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;             &lt;/tr&gt;&lt;tr&gt;               &lt;td bgcolor="#ebe6db" height="1"&gt;&lt;/td&gt;             &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 830px;"&gt;             &lt;tbody&gt;&lt;tr&gt;               &lt;td&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 570px;"&gt;                   &lt;tbody&gt;&lt;tr&gt;                     &lt;td width="19"&gt;&lt;br /&gt;&lt;/td&gt;                     &lt;td valign="top"&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 540px;"&gt;                         &lt;tbody&gt;&lt;tr&gt;                           &lt;td&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 540px;"&gt;                               &lt;tbody&gt;&lt;tr&gt;                                 &lt;td valign="top" width="90"&gt;&lt;a href="http://delphi.about.com/mbiopage.htm?nl=1" target="_blank"&gt;&lt;br /&gt;&lt;/a&gt;                                 &lt;/td&gt;                                 &lt;td&gt;&lt;br /&gt;&lt;/td&gt;                               &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;                         &lt;/tr&gt;&lt;tr&gt;                           &lt;td&gt;&lt;br /&gt;&lt;span style="font-family: Georgia,Times New Roman,Times,serif; font-size: medium;"&gt;                               &lt;a href="http://glclk.about.com/?zi=5/CFHJ" style="color: #3366cc;" target="_blank"&gt;Add Your Delphi Application as Item to Windows Folder Menu&lt;/a&gt;                             &lt;/span&gt;                             &lt;br /&gt;&lt;div style="line-height: 18px; margin: 5px 0pt;"&gt;&lt;span style="color: #333333; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: x-small; margin-bottom: 6px;"&gt;When a users right-clicks on a folder in Windows Explorer a context popup appears. Beside standard items you can add an item for your application. When a user click the item - your application gets started and you can send it (as a parameter) the folder selected.&lt;/span&gt;                             &lt;/div&gt;&lt;br /&gt;&lt;/td&gt;                         &lt;/tr&gt;&lt;tr&gt;                           &lt;td&gt;&lt;span style="font-family: Georgia,Times New Roman,Times,serif; font-size: medium;"&gt;                               &lt;a href="http://glclk.about.com/?zi=5/CFHK" style="color: #3366cc; margin-bottom: 6px;" target="_blank"&gt;Cycle Enum Values in Delphi - Round Robin Enumeration Value &lt;/a&gt;                             &lt;/span&gt;                             &lt;br /&gt;&lt;div style="line-height: 18px; margin: 5px 0pt;"&gt;&lt;span style="color: #333333; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: x-small; margin-bottom: 6px;"&gt;If you need to allow a user of your application to change the display of the ListView at run-time, you need to provide some sort of "selectable" user interface. You can choose to display enumerated properties in a selectable list.&lt;/span&gt;                             &lt;/div&gt;&lt;br /&gt;&lt;/td&gt;                         &lt;/tr&gt;&lt;tr&gt;                           &lt;td&gt;&lt;span style="font-family: Georgia,Times New Roman,Times,serif; font-size: medium;"&gt;                               &lt;a href="http://glclk.about.com/?zi=5/CFHL" style="color: #3366cc; margin-bottom: 6px;" target="_blank"&gt;Extend Delphi Components Without the Need to Install in the IDE;  TButton = class(TButton)&lt;/a&gt;                             &lt;/span&gt;                             &lt;br /&gt;&lt;div style="line-height: 18px; margin: 5px 0pt;"&gt;&lt;span style="color: #333333; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: x-small; margin-bottom: 6px;"&gt;in Delphi TIPS ::  Have you ever needed for a specific Delphi control, like a TButton, to have just one more property or a method that is a "must have"... &lt;a href="http://glclk.about.com/?zi=5/CFHL&amp;amp;zu=http%3A%2F%2Fdelphi.about.com%2Fb%2F2011%2F03%2F24%2Fextend-delphi-components-without-the-need-to-install-in-the-ide-tbutton-classtbutton.htm%3Fnl%3D1" target="_blank"&gt;Read more&lt;/a&gt;&lt;/span&gt;                             &lt;/div&gt;&lt;br /&gt;&lt;/td&gt;                         &lt;/tr&gt;&lt;tr&gt;                           &lt;td&gt;&lt;span style="font-family: Georgia,Times New Roman,Times,serif; font-size: medium;"&gt;                               &lt;a href="http://glclk.about.com/?zi=5/CFHM" style="color: #3366cc; margin-bottom: 6px;" target="_blank"&gt;Understanding, Using and Enhancing Delphi VCL Components&lt;/a&gt;                             &lt;/span&gt;                             &lt;br /&gt;&lt;div style="line-height: 18px; margin: 5px 0pt;"&gt;&lt;span style="color: #333333; font-family: Verdana,Arial,Helvetica,sans-serif; font-size: x-small; margin-bottom: 6px;"&gt;Tutorials and articles on using Delphi Visual Component Library (VCL) controls and components more efficiently at design and run time.&lt;/span&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td height="10" width="500"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td height="20" width="500"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table style="width: 570px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td height="15"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td height="1" width="11"&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;                   &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;               &lt;td bgcolor="#eeeeee" valign="top" width="240"&gt;&lt;table border="0" cellpadding="0" cellspacing="0" style="width: 240px;"&gt;                   &lt;tbody&gt;&lt;tr&gt;                     &lt;td width="13"&gt;&lt;/td&gt;                     &lt;td align="left" height="25"&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin: 0pt 0pt 0pt 12px; padding: 0pt;"&gt;&lt;span style="color: #5c5c5c; font-family: Georgia,Times New Roman,Times,serif; font-size: medium;"&gt;Must Reads&lt;/span&gt;                       &lt;/div&gt;&lt;table border="0" cellpadding="4" cellspacing="2" style="margin-top: 3px;"&gt;                         &lt;tbody&gt;&lt;tr&gt;                           &lt;td style="padding-top: 10px;" valign="top" width="5%"&gt;&lt;img height="6" src="http://0.tqn.com/f/d/bl2.gif" width="6" /&gt;&lt;/td&gt;                           &lt;td&gt;&lt;span style="font-family: Georgia,Times New Roman,Times,serif; font-size: x-small;"&gt;                               &lt;a href="http://glclk.about.com/?zi=5/CFHZ" style="color: #457498; text-decoration: underline;" target="_blank"&gt;First Time Here? What is Delphi?&lt;/a&gt;                             &lt;/span&gt;                           &lt;/td&gt;                         &lt;/tr&gt;&lt;tr&gt;                           &lt;td style="padding-top: 10px;" valign="top" width="5%"&gt;&lt;img height="6" src="http://0.tqn.com/f/d/bl2.gif" width="6" /&gt;&lt;/td&gt;                           &lt;td&gt;&lt;span style="font-family: Georgia,Times New Roman,Times,serif; font-size: x-small;"&gt;                               &lt;a href="http://glclk.about.com/?zi=5/CFH%5B" style="color: #457498; text-decoration: underline;" target="_blank"&gt;How to Start a New Delphi Project&lt;/a&gt;                             &lt;/span&gt;                           &lt;/td&gt;                         &lt;/tr&gt;&lt;tr&gt;                           &lt;td style="padding-top: 10px;" valign="top" width="5%"&gt;&lt;img height="6" src="http://0.tqn.com/f/d/bl2.gif" width="6" /&gt;&lt;/td&gt;                           &lt;td&gt;&lt;span style="font-family: Georgia,Times New Roman,Times,serif; font-size: x-small;"&gt;                               &lt;a href="http://glclk.about.com/?zi=5/CFH%5D" style="color: #457498; text-decoration: underline;" target="_blank"&gt;Delphi Tutorials / Online Courses&lt;/a&gt;                             &lt;/span&gt;                           &lt;/td&gt;                         &lt;/tr&gt;&lt;tr&gt;                           &lt;td style="padding-top: 10px;" valign="top" width="5%"&gt;&lt;img height="6" src="http://0.tqn.com/f/d/bl2.gif" width="6" /&gt;&lt;/td&gt;                           &lt;td&gt;&lt;span style="font-family: Georgia,Times New Roman,Times,serif; font-size: x-small;"&gt;                               &lt;a href="http://glclk.about.com/?zi=5/CFHa" style="color: #457498; text-decoration: underline;" target="_blank"&gt;Delphi Tips, Tricks, Code Snippets&lt;br /&gt;                               &lt;/a&gt;                             &lt;/span&gt;                           &lt;/td&gt;                         &lt;/tr&gt;&lt;tr&gt;                           &lt;td style="padding-top: 10px;" valign="top" width="5%"&gt;&lt;img height="6" src="http://0.tqn.com/f/d/bl2.gif" width="6" /&gt;&lt;/td&gt;                           &lt;td&gt;&lt;span style="font-family: Georgia,Times New Roman,Times,serif; font-size: x-small;"&gt;                               &lt;a href="http://glclk.about.com/?zi=5/CFHb" style="color: #457498; text-decoration: underline;" target="_blank"&gt;What Happened to "Borland Delphi"?&lt;/a&gt;                             &lt;/span&gt;                           &lt;/td&gt;                         &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;                   &lt;/tr&gt;&lt;tr&gt;                     &lt;td height="1" width="5"&gt;&lt;/td&gt;                     &lt;td align="center" valign="top"&gt;&lt;br /&gt;&lt;span style="color: #5c5c5c; font-family: arial; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;                       &lt;br /&gt;&lt;a href="http://ad.doubleclick.net/jump/newsletters.about.com/compute_delphi;site=delphi;kw=;chan=compute;sz=160x600;dcove=r;ord=13014288005294" target="_blank"&gt;&lt;br /&gt;&lt;/a&gt;                     &lt;/td&gt;                   &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;             &lt;/tr&gt;&lt;tr&gt;               &lt;td bgcolor="#ebe6db" colspan="2" height="1" width="100%"&gt;&lt;/td&gt;             &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/td&gt;         &lt;td bgcolor="#ebe6db" width="2"&gt;&lt;img height="1" src="http://pixel3.about.com/mp/pixel/pixel.cgi?partner=delphi_20110329" width="1" /&gt;&lt;/td&gt;       &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-3543634974162890556?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/3543634974162890556/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=3543634974162890556&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/3543634974162890556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/3543634974162890556'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2011/04/about-delphi-your-app-in-windows.html' title='About Delphi: Your App In Windows Explorer Folder Context Menu + 3 More Articles'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-5475501732887360143</id><published>2011-04-07T12:35:00.007+07:00</published><updated>2011-04-07T12:35:00.788+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips Dan Trick'/><title type='text'>Cara Efektif Menambahkan Komentar Pada Source Code</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Dear Delphiers, pada artikel ini saya akan mencoba membahas bagaimana cara membuat komentar yang efektif pada source code aplikasi yang kita bangun. Saya sendiri merasa source code tanpa komentar bagaikan sayur tanpa garam. Ga sedap gitu lho ... : ). Tapi kalau kebanyakan komentar juga tidak bagus juga. Source code jadi kotor, semrawut, dan sulit dibaca. Ibarat sayur kebanyakan garam, ASIN !!&lt;br /&gt;&lt;span class="fullpost"&gt;  &lt;br /&gt;Di delphi, ada beberapa cara untuk membuat komentar. Yang pertama dengan menggunakan operator "//". Tanda ini akan menjadikan baris di sebelah kanannya tidak akan dieksekusi oleh &lt;i&gt;compiler&lt;/i&gt;. Cara ini sangat cocok untuk menambahkan satu atau dua baris komentar  saja. Cara kedua dengan mengapit komentar dengan kurung kurawal "{}" . Karakter yang berada diantara tanda "{}" tidak akan dieksekusi oleh compiler. Cara ini sangat efektif untuk menambahkan komentar yang cukup panjang. &lt;br /&gt;Dalam menambahkan komentar, menurut saya, ada beberapa hal yang perlu diperhatikan &lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Seperlunya&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;Komentar pada source code memang sangat penting bagi pengembangan sebuah software. Apa lagi jika satu unit file dikerjakan lebih dari satu orang. Namun meskipun demikian, kita tetap harus berhati-hati dalam menambahkan komentar. Jangan sampai dengan banyaknya komentar malah akan membuat source code menjadi kotor dan sulit dibaca.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;procedure TfrmPembayaran.FormCreate(Sender: TObject);&lt;br /&gt;begin&lt;br /&gt;  inherited;&lt;br /&gt;  FPenyaluranDana := TPenyaluranDana.Create(Self);&lt;br /&gt;  FPembayaran     := GenerateObjectPembayaran;&lt;br /&gt;  FJurnalUtip     := TJournal.Create(Self);&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;Menurut hemat saya, baris kode di atas tidak perlu anda kasih komentar. Baris kode di atas merupakan baris kode yang benar-benar jelas, yaitu melakukan instantsiasi dari kelas TPenyaluranDana, TPembayaran, dan TJournal. Apa yang membingungkan kan? Makanya tidak perlu diberikan komentar. &lt;br /&gt;&lt;br /&gt;Namun demikian , jangan mudah untuk tidak memberikan komentar juga. Jika memang baris kode kita sulit dibaca lebih baik diberikan komentar secukupnya. Ingatlah, hari ini anda paham algoritma di baris kode anda, tapi belum tentu besok, minggu depan, bulan depan, atau tahun depan. Apalagi bagi orang lain yang kebagian tugas membetulkan bug pada source code anda, sedangkan anda sudah tidak ada. &lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Jangan Terlalu Banyak Memberikan Komentar &lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;Poin dua ini sebenarnya melengkapi poin pertama. Bahasa delphi terkenal akan mudahnya dipelajari. Hal ini karena mudahnya cara membaca source code delphi. Jadi, hendaknya kita bijak dalam menambahkan komentar. &lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Cara Cepat Menambahkan komentar&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;Di delphi 10 dan versi setelahnya, ada cara mudah memberikan komentar. Anda tinggal mem-blok baris yang akan dijadikan komentar lalu tekan tombol "&lt;i&gt;&lt;b&gt;Ctrl+/&lt;/b&gt;&lt;/i&gt;". Jika cara ini belum berhasil, anda bisa menggunakan program tambahan baik yang free maupun berbayar. CnPack atau Model Maker Explorer (MMX) adalah contoh program tambahan yang perlu anda pertimbangkan di komputer anda. &lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-5475501732887360143?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/5475501732887360143/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=5475501732887360143&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/5475501732887360143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/5475501732887360143'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2011/04/cara-efektif-menambahkan-komentar-pada.html' title='Cara Efektif Menambahkan Komentar Pada Source Code'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-8909048268404895858</id><published>2011-04-05T06:00:00.000+07:00</published><updated>2011-04-05T06:00:04.964+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DelphiFeeds'/><title type='text'>Open Source vs. commercial software + 1 Article</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Posted: 27 Mar 2011 02:41 AM PDTI was recently asked, where does Open Source make sense? This is a hard question, because it depends on the objective. Some people argue from a freedom perspective, nerds can modify anything. But freedom is also the freedom of choice, and enforcing Open Source everywhere would definitely be ...&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;a href="http://feedproxy.google.com/%7Er/delphifeeds/%7E3/u0uhuBkZ_i8/78305?utm_source=feedburner&amp;amp;utm_medium=email" name="12ef7ad7a6e772dd_1" style="font-family: Arial,Helvetica,sans-serif; font-size: 18px;" target="_blank"&gt;      Open Source vs. commercial software&lt;/a&gt;&lt;div class="gmail_quote"&gt;&lt;div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0pt 2em;"&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="line-height: 1.4em; margin-bottom: 0pt;"&gt;&lt;div style="margin: 1em 0pt 3px;"&gt;&lt;/div&gt;&lt;div style="color: #555555; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 9px 0pt 3px;"&gt;Posted: 27 Mar 2011 02:41 AM PDT&lt;/div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0pt;"&gt;I was recently asked, where does Open Source make sense? This is a hard question, because it depends on the objective. Some people argue from a freedom perspective, nerds can modify anything. But freedom is also the freedom of choice, and enforcing Open Source everywhere would definitely be ...&lt;img height="1" src="" width="1" /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="line-height: 1.4em; margin-bottom: 0pt;"&gt;&lt;div style="margin: 1em 0pt 3px;"&gt;&lt;a href="http://feedproxy.google.com/%7Er/delphifeeds/%7E3/RxOYiIr1CFg/78303?utm_source=feedburner&amp;amp;utm_medium=email" name="12ef7ad7a6e772dd_2" style="font-family: Arial,Helvetica,sans-serif; font-size: 18px;" target="_blank"&gt;hcOPF - AV in Application with hcCodeSite defined&lt;/a&gt; &lt;/div&gt;&lt;div style="color: #555555; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 9px 0pt 3px;"&gt;Posted: 26 Mar 2011 10:00 PM PDT&lt;/div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0pt;"&gt;If you get an AV on shutdown of an application using hcOPF with the packages compiled with the hcCodeSite directive defined, the problem is likely the sequence of events.   My current project uses a global domain object representing the place of business.  This domain object is created in the ...&lt;img height="1" src="" width="1" /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table style="border-top: 1px solid rgb(153, 153, 153); margin-top: 1.5em; padding-top: 4px; width: 100%;"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td style="color: #333333; font-family: Helvetica,Arial,Sans-Serif; font-size: 11px; margin: 0pt 6px 1.2em 0pt; text-align: left;"&gt;&lt;/td&gt;&lt;td style="color: #333333; font-family: Helvetica,Arial,Sans-Serif; font-size: 11px; margin: 0pt 6px 1.2em 0pt; text-align: right; vertical-align: top;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="2" style="color: #333333; font-family: Helvetica,Arial,Sans-Serif; font-size: 11px; margin: 0pt 6px 1.2em 0pt; text-align: left;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-8909048268404895858?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/8909048268404895858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=8909048268404895858&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/8909048268404895858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/8909048268404895858'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2011/04/open-source-vs-commercial-software-1.html' title='Open Source vs. commercial software + 1 Article'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-6203012898694396943</id><published>2011-04-03T15:39:00.000+07:00</published><updated>2011-04-03T15:39:00.235+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OOP'/><title type='text'>Sekilas Tentang Generics</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Generics pertama kali diperkenalkan pada Delphi 2009. Dengan adanya fitur ini, kita bisa mendefinisikan sebuah kelas tanpa mendefinisikan secara khusus tipe data dari atribut dari kelas tersebut.&lt;span class="fullpost"&gt;Untuk mempermudah pemahaman tentang generics, berikut ini saya berikan dua contoh source code yang memanfaatkan fitur generics.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;Contoh 1 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;pre&gt;    type&lt;br /&gt;      TGenericContainer&lt;t&gt; = class&lt;br /&gt;      Value : T;&lt;br /&gt;     end;&lt;br /&gt;&lt;/t&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;    var&lt;br /&gt;      genericInt : TGenericContainer&lt;integer&gt;;&lt;br /&gt;      genericStr : TGenericContainer&lt;string&gt;;&lt;br /&gt;    begin&lt;br /&gt;      genericInt := TGenericContainer&lt;integer&gt;.Create;&lt;br /&gt;      genericInt.Value := 2009; //only integers&lt;br /&gt;      genericInt.Free;&lt;br /&gt;&lt;br /&gt;      genericStr := TGenericContainer&lt;string&gt;.Create;&lt;br /&gt;      genericStr.Value := 'Delphi Generics'; //only strings&lt;br /&gt;      genericStr.Free;&lt;br /&gt;    end;&amp;nbsp;&lt;/string&gt;&lt;/integer&gt;&lt;/string&gt;&lt;/integer&gt;&lt;/pre&gt;&lt;pre&gt;&lt;integer&gt;&lt;string&gt;&lt;integer&gt;&lt;string&gt;&amp;nbsp; &lt;/string&gt;&lt;/integer&gt;&lt;/string&gt;&lt;/integer&gt;&lt;/pre&gt;Contoh 2&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;pre&gt;    TSomeClass&lt;t&gt; = class&lt;br /&gt;    private&lt;br /&gt;      FData : T;&lt;br /&gt;      procedure SetData(inData : T);&lt;br /&gt;    public&lt;br /&gt;      property Data : T read FData write SetData;&lt;br /&gt;    end;&lt;br /&gt;&lt;br /&gt;    var&lt;br /&gt;      a : TSomeClass&lt;integer&gt;;&lt;br /&gt;      b : TSomeClass&lt;string&gt;;&lt;br /&gt;      c : TSomeClass&lt;tbutton&gt;;&lt;br /&gt;    begin&lt;br /&gt;      a := TSomeClass&lt;integer&gt;.Create;&lt;br /&gt;      a.Data := 5;&lt;br /&gt;      a.Free;&lt;br /&gt;&lt;br /&gt;      b := TSomeClass&lt;string&gt;.Create;&lt;br /&gt;      b.Data := 'The rain in spain';&lt;br /&gt;      b.Free;&lt;br /&gt;&lt;br /&gt;      c := TSomeClass&lt;tbutton&gt;.Create;&lt;br /&gt;      c.Data := Button1;&lt;br /&gt;      c.Free;&lt;br /&gt;&lt;br /&gt;&lt;/tbutton&gt;&lt;/string&gt;&lt;/integer&gt;&lt;/tbutton&gt;&lt;/string&gt;&lt;/integer&gt;&lt;/t&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-6203012898694396943?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/6203012898694396943/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=6203012898694396943&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/6203012898694396943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/6203012898694396943'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2011/04/sekilas-tentang-generics.html' title='Sekilas Tentang Generics'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-3079776215216022404</id><published>2011-04-02T05:46:00.003+07:00</published><updated>2011-04-02T05:46:00.117+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Video'/><title type='text'>Video DataSnap Terbaru : DataSnap XE - Passing "Plain Old Delphi Object" Parameters</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Dear Delphiers,&lt;br /&gt;masih ingat artikel&lt;a href="http://delphigurus.blogspot.com/2011/03/belajar-delphi-lewat-youtubecom.html"&gt; ini &lt;/a&gt;kan? Yach kita bisa belajar delphi dengan melihat video panduan di &lt;a href="http://www.blogger.com/www.youtube.com" target="_blank"&gt;youtube&lt;/a&gt; . Pada artikel ini saya akan memberikan sedikit informasi tentang video terbaru (per 1 April 2011) dari chanel &lt;a href="http://www.youtube.com/user/DelphiUniversity" target="_blank"&gt;DelphiUniversity&lt;/a&gt; di &lt;a href="http://www.blogger.com/www.youtube.com" target="_blank"&gt;youtube&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;Video ini berjudul  &lt;a href="http://www.youtube.com/watch?v=yWP2ZkVRx08&amp;amp;feature=uploademail"&gt;Delphi Labs: DataSnap XE - Passing "Plain Old Delphi Object" Parameters &lt;/a&gt; . Di video ini aan didemokan bagaimana cara mengirim dan menerima objek dari dan ke server menggunakan arsitektur DataSnap.&lt;/span&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://3.gvt0.com/vi/yWP2ZkVRx08/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/yWP2ZkVRx08&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266" src="http://www.youtube.com/v/yWP2ZkVRx08&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;Pada bahasa&lt;a href="http://www.oracle.com/us/technologies/java/index.html" target="_blank"&gt; Java&lt;/a&gt; Enterprise Edition, ada satu konsep&lt;b&gt; "Plain Old Java Objects"&lt;/b&gt; untuk mengirimkan data antar aplikasi. Di video ini juga akan dipai patern yang sama untuk bertukar data antar server dan client. Kita akan menggunakan PODOs,&lt;b&gt; "Plain Old Delphi Objects" &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Source yang dituliskan di video ini bisa do dowload di &lt;a href="http://cc.embarcadero.com/item/28276"&gt;http://cc.embarcadero.com/ item/28276 &lt;/a&gt;&lt;br /&gt;&lt;br /&gt; Info lanjut silahkan klik berikut ini :&lt;br /&gt;&lt;a href="http://www.embarcadero.com/rad-in-action/delphi-labs"&gt;http://www.embarcadero.com/ rad-in-action/delphi-labs &lt;/a&gt;&lt;br /&gt;&lt;a href="http://blogs.embarcadero.com/pawelglowacki"&gt;http://blogs.embarcadero.com/ pawelglowacki &lt;/a&gt;  &lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-3079776215216022404?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/3079776215216022404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=3079776215216022404&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/3079776215216022404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/3079776215216022404'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2011/04/video-datasnap-terbaru-datasnap-xe.html' title='Video DataSnap Terbaru : DataSnap XE - Passing &quot;Plain Old Delphi Object&quot; Parameters'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-2116313445122923362</id><published>2011-03-31T05:20:00.001+07:00</published><updated>2011-03-31T05:20:00.372+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DelphiFeeds'/><title type='text'>Let Your Delphi Application Be Executed When A Folder Is Right-Clicked in Windows Explorer + 8 Articles</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;a href="http://feedproxy.google.com/%7Er/delphifeeds/%7E3/CTW1CEza9tM/78386?utm_source=feedburner&amp;amp;utm_medium=email" name="12f01fd8628c557d_1" style="font-family: Arial,Helvetica,sans-serif; font-size: 18px;" target="_blank"&gt;Let Your Delphi Application Be Executed When A Folder Is Right-Clicked in Windows Explorer&lt;/a&gt; &lt;/div&gt;&lt;div style="color: #555555; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 9px 0pt 3px;"&gt;Posted: 28 Mar 2011 11:43 PM PDT&lt;/div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0pt;"&gt;in Delphi TIPS ::   When a users right-clicks on a folder in Windows Explorer a context popup appears. Beside standard items you can add an item for your application. When a user click the item - your application gets started and you can send it (as a parameter) the folder selected.  Read the full ...&lt;img height="1" src="" width="1" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;div class="gmail_quote"&gt;&lt;div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0pt 2em;"&gt;&lt;table&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td style="line-height: 1.4em; margin-bottom: 0pt;"&gt;&lt;div style="margin: 1em 0pt 3px;"&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="line-height: 1.4em; margin-bottom: 0pt;"&gt;&lt;div style="margin: 1em 0pt 3px;"&gt;&lt;a href="http://feedproxy.google.com/%7Er/delphifeeds/%7E3/zk-MBu9KQJw/78372?utm_source=feedburner&amp;amp;utm_medium=email" name="12f01fd8628c557d_2" style="font-family: Arial,Helvetica,sans-serif; font-size: 18px;" target="_blank"&gt;The First Thing You Should Do&lt;/a&gt; &lt;/div&gt;&lt;div style="color: #555555; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 9px 0pt 3px;"&gt;Posted: 28 Mar 2011 04:47 PM PDT&lt;/div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0pt;"&gt;We've all done it:  File|New|VCL Forms Application.  Then we drop a button and a memo, double click on the button, and write some code that prints out to the TMemo. You start out just "testing something out", but then you end up working on a routine, or maybe even a class or a collection ...&lt;img height="1" src="" width="1" /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="line-height: 1.4em; margin-bottom: 0pt;"&gt;&lt;div style="margin: 1em 0pt 3px;"&gt;&lt;a href="http://feedproxy.google.com/%7Er/delphifeeds/%7E3/hRTzCHIu4Tk/78371?utm_source=feedburner&amp;amp;utm_medium=email" name="12f01fd8628c557d_3" style="font-family: Arial,Helvetica,sans-serif; font-size: 18px;" target="_blank"&gt;Web Based IDE's&lt;/a&gt; &lt;/div&gt;&lt;div style="color: #555555; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 9px 0pt 3px;"&gt;Posted: 28 Mar 2011 03:43 PM PDT&lt;/div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0pt;"&gt;I started a computer club at my son's middle school. One of the limitations is that no software can be installed, and there are no development tools on the computers. So I set out to find web based IDE's where we can write and run code via the web browser. This is what I found. ...&lt;img height="1" src="" width="1" /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="line-height: 1.4em; margin-bottom: 0pt;"&gt;&lt;div style="margin: 1em 0pt 3px;"&gt;&lt;a href="http://feedproxy.google.com/%7Er/delphifeeds/%7E3/6ywooTd8uAo/78376?utm_source=feedburner&amp;amp;utm_medium=email" name="12f01fd8628c557d_4" style="font-family: Arial,Helvetica,sans-serif; font-size: 18px;" target="_blank"&gt;Spring 2011&lt;/a&gt; &lt;/div&gt;&lt;div style="color: #555555; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 9px 0pt 3px;"&gt;Posted: 28 Mar 2011 08:56 AM PDT&lt;/div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0pt;"&gt;It's the time of the year again: i am very happy to announce the immediate availability of the "Spring 2011″ releases of out entire product suite. Point your browsers to &lt;a href="http://portal.remobjects.com/" target="_blank"&gt;portal.remobjects.com&lt;/a&gt; (licensed users) or &lt;a href="http://remobjects.com/trials" target="_blank"&gt;remobjects.com/trials&lt;/a&gt; and &lt;a href="http://remobjects.com/free" target="_blank"&gt;remobjects.com/free&lt;/a&gt; for free products and ...&lt;img height="1" src="" width="1" /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="line-height: 1.4em; margin-bottom: 0pt;"&gt;&lt;div style="margin: 1em 0pt 3px;"&gt;&lt;a href="http://feedproxy.google.com/%7Er/delphifeeds/%7E3/W-D0tifJrLM/78357?utm_source=feedburner&amp;amp;utm_medium=email" name="12f01fd8628c557d_5" style="font-family: Arial,Helvetica,sans-serif; font-size: 18px;" target="_blank"&gt;WWDC 2011 Tickets are On Sale&lt;/a&gt; &lt;/div&gt;&lt;div style="color: #555555; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 9px 0pt 3px;"&gt;Posted: 28 Mar 2011 08:50 AM PDT&lt;/div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0pt;"&gt;Apple's annual World Wide Developer Conference (WWDC) in San Francisco has just been announced and opened for registration today. I already got my ticket, and i'm looking forward to seeing many of you there! Go to &lt;a href="http://developer.apple.com/wwdc" target="_blank"&gt;http://developer.apple.com/wwdc&lt;/a&gt; for more info, and get your ticket ...&lt;img height="1" src="" width="1" /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="line-height: 1.4em; margin-bottom: 0pt;"&gt;&lt;div style="margin: 1em 0pt 3px;"&gt;&lt;a href="http://feedproxy.google.com/%7Er/delphifeeds/%7E3/FB-BMvUJ9p0/78360?utm_source=feedburner&amp;amp;utm_medium=email" name="12f01fd8628c557d_6" style="font-family: Arial,Helvetica,sans-serif; font-size: 18px;" target="_blank"&gt;Apple's WWDC2011 Has been announced&lt;/a&gt; &lt;/div&gt;&lt;div style="color: #555555; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 9px 0pt 3px;"&gt;Posted: 28 Mar 2011 08:47 AM PDT&lt;/div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0pt;"&gt;DSConfers: if you haven't got enough quality conference time this year yet, and need something to tide you over until DSConf #2 in the fall, why not attend Apple's WWDC in San Francisco, which was just announced (but hurry up, it will probably sell out fast). Daniel Magin and marc ...&lt;img height="1" src="" width="1" /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="line-height: 1.4em; margin-bottom: 0pt;"&gt;&lt;div style="margin: 1em 0pt 3px;"&gt;&lt;a href="http://feedproxy.google.com/%7Er/delphifeeds/%7E3/PFngzZuW8ww/78345?utm_source=feedburner&amp;amp;utm_medium=email" name="12f01fd8628c557d_7" style="font-family: Arial,Helvetica,sans-serif; font-size: 18px;" target="_blank"&gt;Delphi ClientDataSet Book (by Cary Jensen)&lt;/a&gt; &lt;/div&gt;&lt;div style="color: #555555; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 9px 0pt 3px;"&gt;Posted: 28 Mar 2011 06:09 AM PDT&lt;/div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0pt;"&gt;Cary Jensen has published a brand new Delphi book focused on a very common Delphi component, the ClientDataSet. The books is now available on Amazon.     The book title is "Delphi in Depth: ClientDataSets", with a partial reference to a Delphi book Cary edited in the early days of the product ...&lt;img height="1" src="" width="1" /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="line-height: 1.4em; margin-bottom: 0pt;"&gt;&lt;div style="margin: 1em 0pt 3px;"&gt;&lt;a href="http://feedproxy.google.com/%7Er/delphifeeds/%7E3/jZntfEYq8H8/78359?utm_source=feedburner&amp;amp;utm_medium=email" name="12f01fd8628c557d_8" style="font-family: Arial,Helvetica,sans-serif; font-size: 18px;" target="_blank"&gt;The Best Delphi Ever&lt;/a&gt; &lt;/div&gt;&lt;div style="color: #555555; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 9px 0pt 3px;"&gt;Posted: 28 Mar 2011 03:02 AM PDT&lt;/div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0pt;"&gt;We received a really nice email from someone who evaluated RAD Studio XE so I thought I would share some of it...I just wanted to let you know thatthis is the best Delphi ever !I had just completed an evaluationof Delphi and C++ in RADStudio XE.·        Your ...&lt;img height="1" src="" width="1" /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="line-height: 1.4em; margin-bottom: 0pt;"&gt;&lt;div style="margin: 1em 0pt 3px;"&gt;&lt;a href="http://feedproxy.google.com/%7Er/delphifeeds/%7E3/k0GU0_PAJ2I/78347?utm_source=feedburner&amp;amp;utm_medium=email" name="12f01fd8628c557d_9" style="font-family: Arial,Helvetica,sans-serif; font-size: 18px;" target="_blank"&gt;Cycle Enum Values in Delphi - Round Robin Enumeration Value Cycling&lt;/a&gt; &lt;/div&gt;&lt;div style="color: #555555; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 9px 0pt 3px;"&gt;Posted: 28 Mar 2011 02:00 AM PDT&lt;/div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0pt;"&gt;in Delphi Tips :: An enumerated type in Delphi, or enum lets you define a list of values. The values have no inherent meaning, and their ordinality follows the sequence in which the identifiers are listed.   If you need to allow a user of your application to change the display of the ListView at ...&lt;img height="1" src="" width="1" /&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-2116313445122923362?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/2116313445122923362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=2116313445122923362&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/2116313445122923362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/2116313445122923362'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2011/03/let-your-delphi-application-be-executed.html' title='Let Your Delphi Application Be Executed When A Folder Is Right-Clicked in Windows Explorer + 8 Articles'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-1996360439263840757</id><published>2011-03-30T05:26:00.013+07:00</published><updated>2011-03-30T07:03:22.678+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tutorial'/><title type='text'>Cara Mempercepat Penulisan Source Code</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Dear Delphiers, salah satu tolok ukur produktivitas seorang programmer bisa diukur dengan berapa baris kode bisa dia hasilkan dalam sehari. Walaupun hal ini tidak bisa menjadi acuan utama untuk mengukur produktivitas seorang programmer. Tapi hal ini merupakan parameter yang paling mudah diukur. Jadi tida heran kalau dalam wawancara pekerjaan calon programmer sering ditanya pernah mengerjakan proyek dengan berapa baris kode.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;Delphi, dengan segala kelebihnannya menyediakan satu &lt;i&gt;tool&lt;/i&gt; untuk mempercepat penulisan &lt;i&gt;source code&lt;/i&gt;. &lt;i&gt;Tool&lt;/i&gt; ini yaitu &lt;i&gt;Codes Template&lt;/i&gt;. Dengan &lt;i&gt;tool &lt;/i&gt; kita bisa membuat template untuk kode-kode program yang sering kita gunakan. Kita bisa memanggil &lt;i&gt;template &lt;/i&gt;dengan menuliskan dua atau tiga huruf pertama dari nama &lt;i&gt;template &lt;/i&gt;kemudian diikuti dengan menekan kombinasi tombol &lt;i&gt;Ctrl+J &lt;/i&gt;&lt;i&gt;. &lt;/i&gt;Perhatikan studi kasus di bawah ini :&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Saya, ketika melakukan proses edit data selalu memanggil &lt;i&gt;form look up&lt;/i&gt; data. Dari &lt;i&gt;form &lt;/i&gt;tersebut saya pilih data yang akan saya edit. Setelah mendapatkan data yang akan diedit tersebut, kemudian saya tampilkan dalam &lt;i&gt;form.&lt;/i&gt; Hal ini saya kerjakan berulang-ulang untuk semua form dalam &lt;i&gt;project &lt;/i&gt;yang sedang saya kerjakan. Untuk menampilkan data saya menggunakan &lt;i&gt;syntacs &lt;/i&gt;seperti di bawah ini :&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;  sSQL := 'select Nobukti, tglbukti, keterangan from tjournal';&lt;br /&gt;  with cLookUp('Daftar Jurnal', sSQL) do&lt;br /&gt;  begin&lt;br /&gt;    try&lt;br /&gt;      if Strings[0] &amp;lt;&amp;gt; '' then&lt;br /&gt;   begin&lt;br /&gt;     // Tampilkan dalam form untuk diedit&lt;br /&gt;   end;&lt;br /&gt; finally&lt;br /&gt;      Free;&lt;br /&gt;    end;&lt;br /&gt;  end;&lt;br /&gt; &lt;/pre&gt;Karena baris kode diatas sering saya pakai, maka saya bisa membuat sebuah template sehingga saya bisa melakukan penulisan baris kode untuk edit data dengan lebih cepat. Cara membuat &lt;i&gt;code template &lt;/i&gt;: &lt;br /&gt;1. Clik Tools &amp;gt; Editor Option&lt;br /&gt;2. Akan muncul jendela &lt;b&gt;&lt;i&gt;Editor Properties &lt;/i&gt;&lt;/b&gt;, Pilih Tab Source Options&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-2RGS4Vczkv4/TZJq6h24eII/AAAAAAAAAIA/QAhPRN0WLlo/s1600/CodeTemplate.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="430" src="http://3.bp.blogspot.com/-2RGS4Vczkv4/TZJq6h24eII/AAAAAAAAAIA/QAhPRN0WLlo/s320/CodeTemplate.gif" width="452" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3. Click &lt;i&gt;button&lt;/i&gt; Edit Code Templates ...&amp;gt; akan muncul jendela baru untuk mengedit/menambahkan template baru &lt;br /&gt;&lt;br /&gt;4. Click &lt;i&gt;button &lt;/i&gt;Add &amp;gt; akan muncul dialog untuk memasukkan nama dan deskripsi template&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-G--oJH_eo0g/TZJrfqT_zWI/AAAAAAAAAII/8uoF2pVEyPE/s1600/Edit%2BCodeTemplate.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="429" src="http://2.bp.blogspot.com/-G--oJH_eo0g/TZJrfqT_zWI/AAAAAAAAAII/8uoF2pVEyPE/s320/Edit%2BCodeTemplate.gif" width="448" /&gt;&lt;/a&gt;&lt;/div&gt;5. Masukkan nama &lt;i&gt;template &lt;/i&gt; dan &lt;i&gt;description &lt;/i&gt; untuk &lt;i&gt;template &lt;/i&gt;tersebut &amp;gt; Click OK&lt;br /&gt;&lt;br /&gt;6. &lt;i&gt;Copy-&lt;/i&gt;kan baris kode yang sering kita pakai&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-kct7K6Uvu8A/TZJrx-1k9qI/AAAAAAAAAIQ/XNYheHBS5Os/s1600/SourceCodeTemplate.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="490" src="http://4.bp.blogspot.com/-kct7K6Uvu8A/TZJrx-1k9qI/AAAAAAAAAIQ/XNYheHBS5Os/s320/SourceCodeTemplate.gif" width="487" /&gt;&lt;/a&gt;&lt;/div&gt;7. Perhatikan pada source code yang saya beri garis bawah berwarna biru, &lt;i&gt;&lt;b&gt;"|"&lt;/b&gt;&lt;/i&gt; . Karakter menandakan letak kursor pada saat kita mengenarte baris kode menggunakan template.&lt;br /&gt;&lt;br /&gt;8. Cara menggunakan template ini yaitu dengan mengetikkan 2 atau tiga huruf pertama kemudian diikuti tombol &lt;i&gt;Ctrl+J. &lt;/i&gt;Untuk contoh di atas, kita menuliskan "Loo" kemudian diikuti &lt;i&gt;Ctrl+J. &lt;/i&gt;Lihat hasilnya di bawah ini :&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-tYdMyuHMChk/TZJr8MUST5I/AAAAAAAAAIY/RTBIEe0OTWo/s1600/HasilSourceCodeTemplate.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="319" src="http://3.bp.blogspot.com/-tYdMyuHMChk/TZJr8MUST5I/AAAAAAAAAIY/RTBIEe0OTWo/s320/HasilSourceCodeTemplate.gif" width="473" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-1996360439263840757?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/1996360439263840757/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=1996360439263840757&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/1996360439263840757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/1996360439263840757'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2011/03/cara-mempercepat-penulisan-source-code.html' title='Cara Mempercepat Penulisan Source Code'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-2RGS4Vczkv4/TZJq6h24eII/AAAAAAAAAIA/QAhPRN0WLlo/s72-c/CodeTemplate.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-3984910691128413694</id><published>2011-03-29T05:59:00.001+07:00</published><updated>2011-03-29T06:00:01.583+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DelphiFeeds'/><title type='text'>TZDB 1.7 database 14 March</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="gmail_quote"&gt;&lt;div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0pt 2em;"&gt;&lt;table style="border: 0pt none; margin: 0pt; padding: 0pt; width: 100%;"&gt; &lt;tbody&gt;&lt;tr&gt;&lt;td style="vertical-align: top;" width="99%"&gt;&lt;/td&gt;&lt;td width="1%"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="line-height: 1.4em; margin-bottom: 0pt;"&gt;&lt;div style="margin: 1em 0pt 3px;"&gt;&lt;a href="http://feedproxy.google.com/%7Er/delphifeeds/%7E3/68UcDbtdtms/78317?utm_source=feedburner&amp;amp;utm_medium=email" name="12efce7f83036556_1" style="font-family: Arial,Helvetica,sans-serif; font-size: 18px;" target="_blank"&gt;TZDB 1.7 database 14 March&lt;/a&gt; &lt;/div&gt;&lt;div style="color: #555555; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 9px 0pt 3px;"&gt;Posted: 27 Mar 2011 08:28 AM PDT&lt;/div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0pt;"&gt;I have finally managed to get some free time on my hands and released the latest update to TZDB containing the latest DB (from 14 March). As usual, no code changes, just data updates. For those unaware: TZDB is an open source project that provides Delphi (7+) and FreePascal (2.0+) users with a ...&lt;img height="1" src="" width="1" /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table style="border-top: 1px solid rgb(153, 153, 153); margin-top: 1.5em; padding-top: 4px; width: 100%;"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td style="color: #333333; font-family: Helvetica,Arial,Sans-Serif; font-size: 11px; margin: 0pt 6px 1.2em 0pt; text-align: left;"&gt;&lt;/td&gt;&lt;td style="color: #333333; font-family: Helvetica,Arial,Sans-Serif; font-size: 11px; margin: 0pt 6px 1.2em 0pt; text-align: right; vertical-align: top;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="2" style="color: #333333; font-family: Helvetica,Arial,Sans-Serif; font-size: 11px; margin: 0pt 6px 1.2em 0pt; text-align: left;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-3984910691128413694?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/3984910691128413694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=3984910691128413694&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/3984910691128413694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/3984910691128413694'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2011/03/tzdb-17-database-14-march.html' title='TZDB 1.7 database 14 March'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-8802204413955393722</id><published>2011-03-28T08:43:00.003+07:00</published><updated>2011-03-28T08:55:51.620+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DelphiFeeds'/><title type='text'>Understanding Embarcadero AppWave + 3 Articles</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Understanding Embarcadero AppWavePosted: 25 Mar 2011 12:52 AM PDTTwo days ago Embarcadero gave a public webinar about a very interesting (and very bold) new initiative, called AppWave, which wants to turn applications into commodities on Windows much like Apple and Google have done for their phones. In this blog post, I'm not trying to explain the idea to ...&lt;span class="fullpost"&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="gmail_quote"&gt;&lt;div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0pt 2em;"&gt;&lt;table&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td style="line-height: 1.4em; margin-bottom: 0pt;"&gt;&lt;div style="margin: 1em 0pt 3px;"&gt;&lt;a href="http://feedproxy.google.com/%7Er/delphifeeds/%7E3/UMgNoUydSeI/78256?utm_source=feedburner&amp;amp;utm_medium=email" name="12eed5ec882dcbf4_1" style="font-family: Arial,Helvetica,sans-serif; font-size: 18px;" target="_blank"&gt;Understanding Embarcadero AppWave&lt;/a&gt; &lt;/div&gt;&lt;div style="color: #555555; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 9px 0pt 3px;"&gt;Posted: 25 Mar 2011 12:52 AM PDT&lt;/div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0pt;"&gt;Two days ago Embarcadero gave a public webinar about a very interesting (and very bold) new initiative, called AppWave, which wants to turn applications into commodities on Windows much like Apple and Google have done for their phones. In this blog post, I'm not trying to explain the idea to ...&lt;img height="1" src="" width="1" /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="line-height: 1.4em; margin-bottom: 0pt;"&gt;&lt;div style="margin: 1em 0pt 3px;"&gt;&lt;a href="http://feedproxy.google.com/%7Er/delphifeeds/%7E3/w0g5ka0Qtdw/78245?utm_source=feedburner&amp;amp;utm_medium=email" name="12eed5ec882dcbf4_2" style="font-family: Arial,Helvetica,sans-serif; font-size: 18px;" target="_blank"&gt;Important Compatibility Announcement regarding OpenSSL&lt;/a&gt; &lt;/div&gt;&lt;div style="color: #555555; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 9px 0pt 3px;"&gt;Posted: 24 Mar 2011 12:58 PM PDT&lt;/div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0pt;"&gt;The latest two versions of OpenSSL I've released only support Windows XP SP2, Windows Server 2003 SP1 and newer. The affected OpenSSL versions are: 0.9.8 q, 0.9.8 r, 1.0.0 c and 1.0.0 d. Technical Background: The mentioned libraries statically link against a version of msvcrt.lib which include ...&lt;img height="1" src="" width="1" /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="line-height: 1.4em; margin-bottom: 0pt;"&gt;&lt;div style="margin: 1em 0pt 3px;"&gt;&lt;a href="http://feedproxy.google.com/%7Er/delphifeeds/%7E3/wwt0kXeRfxY/78244?utm_source=feedburner&amp;amp;utm_medium=email" name="12eed5ec882dcbf4_3" style="font-family: Arial,Helvetica,sans-serif; font-size: 18px;" target="_blank"&gt;Implementing generic helpers as metaclasses&lt;/a&gt; &lt;/div&gt;&lt;div style="color: #555555; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 9px 0pt 3px;"&gt;Posted: 24 Mar 2011 11:57 AM PDT&lt;/div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0pt;"&gt;While it wasn't the main point of the post, I did mention previously the possibility of using metaclasses as generic helpers, and how this can be preferable to using interfaces. An esteemed commentator then suggested the example I gave was far too trivial to be generalised, and in particular, ...&lt;img height="1" src="" width="1" /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td style="line-height: 1.4em; margin-bottom: 0pt;"&gt;&lt;div style="margin: 1em 0pt 3px;"&gt;&lt;a href="http://feedproxy.google.com/%7Er/delphifeeds/%7E3/g6QwI1XcbKU/78227?utm_source=feedburner&amp;amp;utm_medium=email" name="12eed5ec882dcbf4_4" style="font-family: Arial,Helvetica,sans-serif; font-size: 18px;" target="_blank"&gt;Extend Delphi Components Without the Need to Install in the IDE;  TButton = class(TButton)&lt;/a&gt; &lt;/div&gt;&lt;div style="color: #555555; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 9px 0pt 3px;"&gt;Posted: 23 Mar 2011 06:00 PM PDT&lt;/div&gt;&lt;div style="color: black; font-family: Georgia,Helvetica,Arial,Sans-Serif; font-size: 13px; line-height: 140%; margin: 0pt;"&gt;in Delphi TIPS ::  Have you ever needed for a specific Delphi control, like a TButton, to have just one more property or a method that is a "must have" for your current application? What most beginners do not know is that they *can* create their own custom controls derived from the existing VCL set ...&lt;img height="1" src="" width="1" /&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table style="border-top: 1px solid rgb(153, 153, 153); margin-top: 1.5em; padding-top: 4px; width: 100%;"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td style="color: #333333; font-family: Helvetica,Arial,Sans-Serif; font-size: 11px; margin: 0pt 6px 1.2em 0pt; text-align: left;"&gt;&lt;br /&gt;&lt;/td&gt; &lt;td style="color: #333333; font-family: Helvetica,Arial,Sans-Serif; font-size: 11px; margin: 0pt 6px 1.2em 0pt; text-align: right; vertical-align: top;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan="2" style="color: #333333; font-family: Helvetica,Arial,Sans-Serif; font-size: 11px; margin: 0pt 6px 1.2em 0pt; text-align: left;"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-8802204413955393722?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/8802204413955393722/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=8802204413955393722&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/8802204413955393722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/8802204413955393722'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2011/03/understanding-embarcadero-appwave-3.html' title='Understanding Embarcadero AppWave + 3 Articles'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-1362442687214950453</id><published>2011-03-24T06:00:00.002+07:00</published><updated>2011-03-24T10:50:36.502+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Video'/><title type='text'>Belajar Delphi Lewat youtube.com</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Hello Delphiers,&lt;br /&gt;pada artikel ini saya mengajak delphier semua untuk mencoba belajar delphi melalui &lt;a href="http://www.youtube.com/"&gt;youtube&lt;/a&gt;. Ya&lt;a href="http://www.youtube.com/"&gt; youtube&lt;/a&gt;. Di situs itu sudah ada &lt;b&gt;&lt;i&gt;channel&lt;/i&gt;&lt;/b&gt; yang khusus berisi tutorial delphi, yaitu &lt;a href="http://www.youtube.com/user/DelphiUniversity"&gt;DelphiUniversity&lt;/a&gt;. Sampai artikel ini ditulis (17 Maret 2011) sudah ada sekitar 14 tutorial.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;Ke 14 tutorial itu membahas produk terbaru dari &lt;a href="http://www.embarcadero.com/"&gt;embarcadero&lt;/a&gt;, yaitu Delphi XE. Kebanyakan membahas teknologi yang lagi hot, yaitu DataSnap XE. Tidak sabar melihat video-video itu? Silahkan klik &lt;a href="http://www.youtube.com/user/DelphiUniversity"&gt;link&amp;nbsp; ini&lt;/a&gt; :&lt;br /&gt;&lt;span class="fullpost"&gt; Ini beberapa contoh tutorialnya:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://2.gvt0.com/vi/LE9mHh35YhY/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/LE9mHh35YhY&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266" src="http://www.youtube.com/v/LE9mHh35YhY&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://3.gvt0.com/vi/ES-4L91rGys/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/ES-4L91rGys&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266" src="http://www.youtube.com/v/ES-4L91rGys&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-1362442687214950453?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/1362442687214950453/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=1362442687214950453&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/1362442687214950453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/1362442687214950453'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2011/03/belajar-delphi-lewat-youtubecom.html' title='Belajar Delphi Lewat youtube.com'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-5179865779224222176</id><published>2011-03-22T06:00:00.003+07:00</published><updated>2011-03-22T06:00:07.138+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OOP'/><title type='text'>Object Oriented Programming Pada Delphi - Bag 6</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Pada &lt;a href="http://delphigurus.blogspot.com/2011/03/object-oriented-programming-pada-delphi_14.html"&gt;artikel sebelumnya&lt;/a&gt;, kita sudah sedikit mengimplementasikan prinsip-prinsip OOP pada kelas TMruList. Pada artikel berikut ini, kita akan membahas beberapa hal prinsip tentang OOP lebih lanjut. Kita akan membahas skope variable dan method, constructor dan destructor, dll. &lt;br /&gt;&lt;span class="fullpost"&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Skope Variable dan Method &lt;/b&gt;&lt;br /&gt;Ketika kita bicara tentang skope dari variable dan method, artinya kita membicarakan dari mana suatu method/variable bisa diakses. Bisa juga kita artikan siapa saja yang bisa mengakses variable dan method tersebut . Pada kelas yang sudah kita buat, semua method dan variable bisa diakses oleh siapapun dan dari manapun. Hal yang demikian bukanlah design yang bagus. Coba perhatikan variable FNumItems pada kelas TMRUList.Variable ini hanya dipakai di dalam kelas tersebut untuk mencatat berapa jumlah string yang ada pada list. Karena variable ini kelihatan (bisa dipakai) oleh pengguna kelas , maka bisa saja si user mengganti nilai variable ini, maka hal ini akan merusak integritas kelas kita ini. &lt;br /&gt;Jadi, kita harus membedakan variable dan method yang bisa diakses oleh user (di luar kelas) dengan variable atau method yang hanya bisa diakses dari dalam kelas. Kita seharusnya hanya mengijinkan user untuk melihat variable dan method yang berhubungan dengan interface kelas, yaitu hal-hal pokok yang diperlukan untuk menggunakan kelas tersebut . Detail implementasi dari kelas sebaiknya disembunyikan dari user. Dengan demikian kita bisa merubah detail dari implementasi kelas ini tanpa mengganggu baris kode user yang menggunakan kelas ini selama interface kelas tidak berubah. Hal ini merupakan prinsip OOP kedua, yaitu &lt;span class="style1"&gt;&lt;b&gt;enkasulapsi&lt;/b&gt; &lt;b&gt;(encsulaption)&lt;/b&gt;&lt;/span&gt;. &lt;br /&gt;&lt;b&gt;Sidebar &lt;/b&gt;&lt;br /&gt;Prinsip Enkasulapsi …. &lt;br /&gt;Untuk menyembunyikan variable dan method dari pengguna kelas, si pembuat kelas bisa memisahkan kelasnya menjadi beberapa seksi (bagian). Seksi-seksi ini menentukan skope dari variable dan method yang dideklarasikan di masing-masing seksi tersebut. Sebuah kelas bisa mempunyai empat seksi, yaitu : &lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;Public &lt;br /&gt;Published &lt;br /&gt;Private &lt;br /&gt;Protected &lt;/b&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Bagaimana skope dan siapa saja yang bisa mengakses variable/method kita tergantung di mana kita mendeklarasikan variable/method tersebut.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Public &lt;/b&gt;&lt;br /&gt;Semua hal yang dideklarasikan pada bagian ini berarti bisa diakses oleh pengguna kelas. Kemudian, jika kita dalam mendeklarasikan method atau variable tidak dimasukkan ke seksi manapun, maka by default, method/variable tersebut seperti dideklarasikan di seksi public. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Private &lt;/b&gt;&lt;br /&gt;Kebalikan dengan seksi &lt;i&gt;public&lt;/i&gt;, semua yang dideklarasikan di seksi ini hanya bisa diakses dari kelas yang bersangkutan. Versi kedua dari kelas MRUList memberikan contoh variable yang dideklarasikan di seksi private, yaitu FNumItems dan FMList. Perhatikan baris kode berikut ini : &lt;br /&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;Type&lt;br /&gt; TMruList = Class&lt;br /&gt;  Private&lt;br /&gt;   FMList : Array[0..MRUMaxItems – 1] of String;&lt;br /&gt;   FNumItems : Integer;&lt;br /&gt;  Public&lt;br /&gt;   Function Count : Integer;&lt;br /&gt;   Procedure Add( s : String);&lt;br /&gt;   Function GetString( n : Integer) : String&lt;br /&gt; End;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Dengan deklarasi seperti di atas, pengguna kelas ini tidak bisa langsung mengakses FMList atau FNumItems secara langsung. Hanya kelas MRUList sendiri yang bisa mengaksesnya. Jadi, pengguna kelas tidak perlu tahu apa itu FMList dan FNumItems . Hal inilah yang dimaksud enkasulapsi - yaitu menyembunyikan implementasi detail suatu kelas. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;Protected &lt;/i&gt;&lt;/b&gt;&lt;br /&gt;Seksi &lt;i&gt;Protected&lt;/i&gt; , pada bagian ini, semua yang dideklarasikan bisa diakses dari kelas ini sendiri dan kelas-kelas turunannya. Pembahasan ini akan lebih detail nanti (kalau ada waktu) ketika membahas tentang &lt;i&gt;&lt;b&gt;inheritance&lt;/b&gt;&lt;/i&gt;. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;Published &lt;/i&gt;&lt;/b&gt;&lt;br /&gt;Seksi &lt;i&gt;publised&lt;/i&gt; hampir sama dengan public. Bedanya, jika class ini berupa kelas komponen, maka semua yang dideklarasikan di seksi published ini akan muncul di object properties. Hal ini tidak terjadi jika dideklarasikan di seksi public. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;Tibalah Saatnya Menuliskan Contructor &amp;amp; Destructor Sendiri &lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Dari artikel-artikel sebelumnya, kita sudah pernah membahas apa itu constructor– yaitu sebuah &lt;i&gt;function&lt;/i&gt; khusus yang dipakai untuk mengalokasikan memori untuk objek dari kelas di mana &lt;i&gt;constructor&lt;/i&gt; tersebut dideklarasikan. &lt;i&gt;By default&lt;/i&gt;, suatu kelas mempunyai sebuah &lt;i&gt;constructor&lt;/i&gt; yaitu &lt;i&gt;create&lt;/i&gt;. Sebenarnya kita bisa mendeklarasikan &lt;i&gt;constructor&lt;/i&gt; sendiri untuk kelas-kelas yang kita buat. Caranya sama dengan membuat sebuah &lt;i&gt;method&lt;/i&gt;. Dengan membuat &lt;i&gt;cosntructor&lt;/i&gt; sendiri, kita bisa memperloleh keuntungan yaitu kita bisa melakukan inisialisasi properti ketika &lt;i&gt;constructor&lt;/i&gt; dipanggil. &lt;br /&gt;Sebagai contoh, berikut ini saya tuliskan baris kode untuk mengalokasikan memori untuk objek bertipe kelas TSquare, setelah itu dilakukan inisialisi properti dari objek tersebut. : &lt;br /&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;o := TSquare.Create;&lt;br /&gt;o.FX := 10;&lt;br /&gt;o.FY := 10;&lt;br /&gt;o.FWidth := 5;&lt;br /&gt;o.FCaption := ‘First Square';&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Jika kita menuliskan constructor sendiri untuk kelas TSquare ini, kita bisa mengirimkan nilai awal (&lt;i&gt;initial value&lt;/i&gt;) dari atribut-atribut kelas TSQuare ini. Kita bisa menuliskan : &lt;br /&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;o := TSquare.Create( 10, 10, 5, ‘First Square'); &lt;/pre&gt;&lt;br /&gt;Baris kode di atas lebih elegan dan menguntungkan. Dengan membuat constructor sendiri, kita bisa menjamin ada nilai awal untuk atribut dari kelas ketika pertama kali constructor dipanggil. Jika ada atribut yang tidak mempunyai nilai awal , lalu atribut-atribut tersebut dipakai pada suatu method, bisa jadi error yang akan ditampilkan oleh &lt;i&gt;compiler&lt;/i&gt;. Lihat kode di bawah ini :&lt;br /&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;o := TSquare.Create; &lt;br /&gt;// Calculate its area; &lt;br /&gt;a := o.Area; &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Baris kode di atas, kita menjalankan method area (untuk menghitung luas) , tapi kita lupa melakukan inisialisasi atribut panjang dan lebar. Jika kita membuat contructor sendiri, kesalahan yang seperti ini akan bisa dihindari karena kita dipaksa untuk memasukkan nilai awal untuk atribut panjang dan lebar pada saat memanggil constructor.&lt;br /&gt;&lt;br /&gt;Keuntungan lain dengan membuat constructor sendiri yaitu kita bisa melakukan inisialisasi suat objek yang dalam kelas. Dibagian awal dari artikel &lt;b&gt;OOP Pada Delphi&lt;/b&gt; ini, kita membuat sebuah kelas yaitu  TMRUList. Kelas ini mempunyai atribut yang bertipe TStringList. Sebelum bisa digunakan, atribut yang bertipe TStringList ini harus dialokasikan memori untuknya (&lt;i&gt;Instansiasi, saya kebelakang akan menggunakan istilah instansiasi untuk menggantikan istilah "&lt;b&gt;Mengalokasikan Memori&lt;/b&gt;"&lt;/i&gt;). Tempat yang paling tepat untuk meng-instantsiasi atribut ini adalah constructor. Jadi, ketika kelas TMRUList di-instantsiasi, pada saat yang sama kelas ini juga meng-instantsiasi atribut yang berti TStringList tersebut. &lt;br /&gt;&lt;br /&gt;Sekarang, artibut yang bertipe TStringlist tadi juga perlu dibebaskan memori-nya (&lt;i&gt;destroy, saya akan memakai istilah ini untuk menggantikan istilah "&lt;b&gt;membebaskan memori&lt;/b&gt;"&lt;/i&gt;) .Kapan yang tepat untuk men-destroy atribut tersebut? Saat yang yaitu ketika proses destryo objek yang bertipe TMRUList itu sendiri. Sama dengan proses instansiasi, proses destroy juga tidak otomatis dilakukan. Ketika objek TMRUList di-destroy, kita perle mengeksekusi baris kode yang akan men-destroy atribut yang bertipe TStringList. Di dalam delphi, disediakan method yang dipakai untuk men-destroy suatu object, yaitu &lt;i&gt;destructor &lt;/i&gt;. &lt;i&gt;Destructor&lt;/i&gt; bisa dibilang sebagai kebalikan dari &lt;i&gt;constructor&lt;/i&gt; – destructor ini dipanggil ketia sebuah objek di-destroy.&lt;br /&gt;&lt;br /&gt;Lebih jelasnya lihat baris kode berikut ini : &lt;br /&gt;Kita deklarasikan sebuah constructor pada bagian deklarasi kelas dengan kata kunci &lt;b&gt; Constructor&lt;/b&gt; : &lt;br /&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;Type&lt;br /&gt; TSquare = Class&lt;br /&gt; FX, FY : Integer;&lt;br /&gt; FCaption : String;&lt;br /&gt; FWidth : Integer;&lt;br /&gt; Function Area : Integer;&lt;br /&gt; &lt;br /&gt; Constructor Create( px, py : Integer; // deklarasi constructor&lt;br /&gt; pWidth : Integer; Caption : String;&lt;br /&gt;End; &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Kemudian, kita tuliskan isi dari constructor tersebut pada bagian implementation. Pada bagian, kita juga menggunakan kata kunci Constructor: &lt;br /&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;Constructor TSquare.Create(px, py : Integer;&lt;br /&gt; pWidth : Integer; pCaption : String);&lt;br /&gt;Begin&lt;br /&gt; Self.FX   := px;&lt;br /&gt; Self.FY   := py;&lt;br /&gt; Self.FWidth  := pWidth;&lt;br /&gt; Self.FCaption  := pCaption;&lt;br /&gt;End;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Seperti yang terlihat pada baris kode di atas, , yang dilakukan constructor adalah meng-&lt;i&gt;copy&lt;/i&gt; nilai dari parameter ke atribut yang ada pada kelas tersebut. Untuk kasus di atas, penggunaan &lt;i&gt;keyword&lt;/i&gt; adalah &lt;i&gt;optional&lt;/i&gt; saja. Hal ini karena nama parameter dengan atribut kelas berbeda. Jika anda menamakan paramer sama dengan atribut kelas, maka penggunaan &lt;i&gt;keyword &lt;/i&gt;&lt;i&gt;Self &lt;/i&gt;adalah sebuah keharusan. Namun, lebih baik anda menghindari penamaan yang sama antara paramer dan nama atribut kelas. &lt;br /&gt;&lt;br /&gt;Baris kode berikut memperlihat constructor pada kelas TMRUList. Pada kelas ini, digunakan atribut yang bertipe TStringList , yaitu FMList , untuk menampung string yang paling akhir dipakai.&lt;br /&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;Constructor TMRUList.Create;&lt;br /&gt;Begin&lt;br /&gt; FMList := TStringList.Create;&lt;br /&gt;End;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Pada baris kode di atas, constructor hanya meng-instantsiasi kelas TStringList dan menyimpannya pada atribut FMList. Seperti yang sudah saya utarakan di atas, atribut FMList harus di-&lt;i&gt;destroy&lt;/i&gt; ketika kelas TMRList ini di-destry. Kita harus lakukan hal ini di dalam destructor. &lt;br /&gt;&lt;br /&gt;Delphi secara otomatis akan memanggil destructor ketika methog &lt;i&gt;destroy&lt;/i&gt; dari suatu objek dijalankan. &lt;br /&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;mruList := TMRUList.Create;&lt;br /&gt;Try&lt;br /&gt; // Work with mruList here&lt;br /&gt;Finally&lt;br /&gt; mruList.Free; // baris ini akan memanggil destructor&lt;br /&gt;End; &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Ketika method Free dijalankan, Delphi secara otomatis akan memanggil destructor. Destructor di deklarasikan dengan kata kunci Destructor. Yang perlu diingat, kita harus menambah kata kunci &lt;i&gt;Override &lt;/i&gt;di belakang deklarasi destructor. Berikut deklarasi kelas TMRUList secara lengkap : &lt;br /&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;Type&lt;br /&gt; TMruList = Class&lt;br /&gt; Private&lt;br /&gt;  FMList : TStringList;&lt;br /&gt;  Constructor Create;&lt;br /&gt;  Destructor Destroy; Override;&lt;br /&gt; Public&lt;br /&gt;  Function Count : Integer;&lt;br /&gt;  Procedure Add( s : String);&lt;br /&gt; Function GetString( n : Integer) : String&lt;br /&gt;End;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Implemenasi dari destructor hampir sama dengan constructor. Kalau constructor biasanya namanya create, sedangkan destructor namanya harus destroy. Yang perlu diingat yaitu kita harus men-destroy dulu atribut yang bertipe kelas baru kemudian memanggil method &lt;span class="style1"&gt;Destroy&lt;/span&gt;. Ingat, dalam memanggil method destroy harus diawali dengan kata kunci &lt;b&gt;&lt;i&gt; inherited&lt;/i&gt;&lt;/b&gt; : &lt;br /&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;Destructor TMRUList.Destroy;&lt;br /&gt;Begin&lt;br /&gt; FMList.Free;&lt;br /&gt; Inherited Destroy;&lt;br /&gt;End;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Perhatikan, pada baris kode kelas di atas, variable numItems saya hilangkan, karena variable nilainya bisa langsung didapatkan dari atribut yang bertipe TStringList, yaitu dengan memanggil method &lt;span class="style1"&gt;Count&lt;/span&gt;. Berikut ini, baris kode kelas TMRUList setelah numItems dihilangkan : &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;// Return the number of elements in the MRUList&lt;br /&gt;Function TMruList.Count : Integer;&lt;br /&gt;Begin&lt;br /&gt; Result := Self.FMList.Count;&lt;br /&gt;End;&lt;br /&gt;&lt;br /&gt;// Shift all the elements in the list up by one,&lt;br /&gt;// add new element at the start&lt;br /&gt;Procedure TMruList.Add(s : String);&lt;br /&gt;Var&lt;br /&gt; i : Integer;&lt;br /&gt;Begin&lt;br /&gt; Self.FMList.Insert(0, s);&lt;br /&gt; If Self.FMList.Count &amp;gt;= MRUMaxItems Then&lt;br /&gt;  Self.FMList.Delete( Self.FMList.Count – 1);&lt;br /&gt;End;&lt;br /&gt;&lt;br /&gt;Function GetString( n : Integer ) : String;&lt;br /&gt;Begin&lt;br /&gt; If (n &amp;gt;= 0) and (n &amp;lt;= Self.FMList.Count - 1) Then&lt;br /&gt;  Result := Self.FMList.Strings[n];&lt;br /&gt;End;&lt;br /&gt;&lt;/pre&gt;Sekian&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-5179865779224222176?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/5179865779224222176/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=5179865779224222176&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/5179865779224222176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/5179865779224222176'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2011/03/object-oriented-programming-pada-delphi_22.html' title='Object Oriented Programming Pada Delphi - Bag 6'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-1125293279757527746</id><published>2011-03-14T07:30:00.009+07:00</published><updated>2011-03-18T12:31:18.224+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OOP'/><title type='text'>Object Oriented Programming Pada Delphi - Bag 5</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Delphi Lover, &lt;a href="http://delphigurus.blogspot.com/2011/03/object-oriented-programming-pada-delphi_07.html"&gt;pada artikel sebelumnya &lt;/a&gt;kita telah belajar membuat kelas sendiri lengkap dengan method-methodnya. Pada artikel ini, kita akan mempelajari konvensi penamaan kelas, membuat kelas yang sering dipakai di dunia nyata. Dengan mempelajari artikel ini diharapkan baris kode kita mudah dibaca (karena sesuai dengan konvensi di Delphi) dan memperdalam pemahaman kita tentang kelas, objek dan cara penggunaanya. Selamat mengikuti.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;  &lt;br /&gt;&lt;b&gt;Konvensi Penamaan Pada Delphi&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Salah satu konvensi pada Delphi adalah nama kelas selalu diawali dengan huruf T (te) yang merupakan sigkatan dari type. Itulah mengapa pada artikel-artikel terdahulu kita menamakan TSquare dan Tstudent bukan Student dan Square. Coba perhatikan kelas-kelas bawaan Dephi semua diawali dengan huruf T (type), mis TButton, TForm, dll.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Konvensi lainnya yaitu nama atribut selalu diawali dengan huruf F (ef), yang merupakan singkatan dari Field. Akan lebih jelas kenapa diawali huruf F (ef) setelah kita mempelajari istilah properties pada artikel-artikel berikutnya. Untuk sekarang ikuti dulu aja : )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Kelas MRU List&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Sudah ada beberapa hal tentang OOP yang kita pelajari, namun contoh berikut, yang merupakan contoh yang sering terjadi di dunia nyata akan lebih memperdalam pemahaman kita tentang OOP. Kita akan membuat kelas (tipe data baru) MRUList – yaitu sebuah kelas yang akan dipakai untuk mencatat string yang sering digunakan pada sebuah aplikasi (Most Recently Used). Contoh implementasi MRU antara lain :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1.Produk Microsoft Office, bisa menampilkan file yang paling sering dipakai.&lt;br /&gt;2.Delphi , bisa menampilkan file-file yang baru saja dibuka.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Kita akan membuat sebuah aplikasi di mana user bisa melihat string apa saja yang baru saja dipakai. Karena kita belum mempelajari semua fitur OOP di delphi, kelas yang akan kita buat merupakan kelas yang sederhana dulu. Kita akan mencoba memakai fitur-fitur OOP yang sudah kita pelajari selama ini.&lt;br /&gt;OK, sekarang kita mulai dengan menentukan operasi-operasi apa saja yang akan dilakukan oleh kelas. Kira-kira operasi yang kita butuhkan meliputi :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1.Operasi Query berapa elemen yang ada di list;&lt;br /&gt;2.Operasi untuk menambahkan string pada MRU List;&lt;br /&gt;3.Operasi untuk menampilkan string yang ada pada posisi tertentu;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ketika kita menambahkan sebuah string pada list, string tersebut akan berada di awal list.Pada aplikasi ini kita harus tentukan jumlah maksimal  string yang bisa ditampung di dalam list. Jika sudah mencapai jumlah maksimal, ketika ada string yang ditambahkan lagi, maka kita harus menghapus string yang terakhir dan menempatkan string yang baru pada awal list. Itulah mengapa aplikasi ini disebut MRU (Most Recently Used) List, karena kita dengan aplikasi ini kita bisa mengetahui daftar string apa saja yang baru saja dipakai. &lt;br /&gt;Berikut ini deklarasi awal dari kelas yang akan kita buat : &lt;br /&gt;&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;Type&lt;br /&gt;  TMruList = Class&lt;br /&gt;    Function Count : Integer;&lt;br /&gt;    Procedure Add( s : String);&lt;br /&gt;    Procedure GetString( n : Integer) : String&lt;br /&gt;  End;&lt;br /&gt;&lt;/pre&gt;Berdasarkan deklarasi kelas di atas, berikut ini contoh penggunaannya : &lt;br /&gt;&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;Var&lt;br /&gt;  muList : TMruList;&lt;br /&gt;  s : String;&lt;br /&gt;&lt;br /&gt;Begin&lt;br /&gt;  // inisialisasi objek / alokasikan memori&lt;br /&gt;  mruList := TMruList.Create;&lt;br /&gt;  Try &lt;br /&gt;    // menambahkan string ke objek&lt;br /&gt;    mruList.Add(‘Spence’);&lt;br /&gt;    mruList.Add(‘Jones’);&lt;br /&gt;&lt;br /&gt;    // akses string dalam list&lt;br /&gt;    // string terakhir dipakai berada di index 0&lt;br /&gt;    s := mruList.GetString( 0 );&lt;br /&gt;    // s berisi Jones (string terakhir);&lt;br /&gt; Finally&lt;br /&gt;  // bebaskan memori&lt;br /&gt;  mruList.Free;&lt;br /&gt; End;&lt;br /&gt;End;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Pada contoh di atas, kita alokasikan dan membebasan meori pada procedure yang sama. Jika kita menggunakan kelas ini pada sebuah form, maka kita sebaiknya mengalokasikan memori pada saat form dicreate (onCreate Event) dan membebaskan memori pada saat form didestrory (onDestroy event).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;OK, sekarang tiba saatnya kita menuliskan baris kode di bagian implementasi kelas. Namun sebelum itu, kita harus tentukan dulu bagaimana caranya menyimpan string pada kelas ini. Solusi terbaik mungkin dengan menggunakan TstringList untuk menyimpan string. Ketika user menambahkan string ke dalam MRUList, kita tambahkan saja string tersebut pada awal stringlist.  OK, karena solusi untuk menyimpan string kita gunakan stringlist, maka kita harus deklarasikan sebuah variable yang bertipe TstringList. Kira-kira bagian deklarasi dari kelas TmruLIst seperti di bawah ini : &lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;Type&lt;br /&gt;  TMruList = Class&lt;br /&gt;    FMList : TStringList;&lt;br /&gt;    Function Count : Integer;&lt;br /&gt;    Procedure Add( s : String);&lt;br /&gt;    Procedure GetString( n : Integer) : String&lt;br /&gt;  End;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Dengan demikian kelas di atas harus mengalokasikan memori untuk variable FMList. Kita harus menambahkan baris kode berikut ini : &lt;br /&gt;&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;FMList := TStringList.Create;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Dimana kita harus tambahkan baris kode di atas? Hmmm , perhatikan, proses pengalokasian memori untuk kelas TmruLIst tidak otomatis mengalokasikan memori untuk varable FMList. Kita bisa mengalokasikan memori untuk variable FMList (dengan menambahkan baris kode di atas) pada baris setelah kita alokasikan memori untk kelas TmruList ini. Lihat baris kode berikut : &lt;br /&gt;&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;mruList := TMruList.Create;&lt;br /&gt;mruList.FMList := TStringList.Create;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Tapi cara yang demikian cara yang kurang bagus (poor design) . Dengan cara di atas berarti kita mewajibkan programmer lain yang menggunakan kelas ini untuk melakukan operasi yang berurutan, yaitu mengalokasikan memori untuk kelas, lalu mengalokasikan memori untuk variable FMList. Demikian juga ketika akan melakukan proses membebaskan memori, programmer harus membebaskan memori FMList dulu baru membebaskan memori untuk kelas ini. Hal ini sangat merepotkan dan cenderung menambah resiko kesalahan. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ada satu solusi untuk masalah di atas, yaitu dengan menyerahkan proses pengalokasian memori pada constructor dan pembebasan memori pada destructor. Cara ini akan kita implementasikan nanti pada artikel berikutnya. Untuk sementara kita akan menggunakan array dengan panjang yang kita tetapkan di awal. Array ini dipakai untuk menampung string. Selain itu kita juga mendeklarasikan satu variable yang akan mencatat berapa string yang digunakan pada satu waktu. Lihat baris kode berikut ini : &lt;br /&gt;&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;Const&lt;br /&gt; MRUMaxItems = 4;&lt;br /&gt;&lt;br /&gt;Type&lt;br /&gt; TMruList = Class&lt;br /&gt;  FMList : Array[0..MRUMaxItems – 1] of String;&lt;br /&gt;  FNumItems : Integer;&lt;br /&gt;  Function Count : Integer;&lt;br /&gt;  Procedure Add( s : String);&lt;br /&gt;  Function GetString( n : Integer) : String&lt;br /&gt; End;&lt;br /&gt;Implementation&lt;br /&gt;&lt;br /&gt;// Return the number of elements in the MRUList&lt;br /&gt;Function TMruList.Count : Integer;&lt;br /&gt;Begin&lt;br /&gt; Result := Self.FNumItems;&lt;br /&gt;End;&lt;br /&gt;// Shift all the elements in the list up by one, add new element at the start&lt;br /&gt;Procedure TMruList.Add(s : String);&lt;br /&gt;Var&lt;br /&gt; i : Integer;&lt;br /&gt;Begin&lt;br /&gt; For i := max(Self.FNumItems, MRUMaxItems - 1] DownTo 1   Do&lt;br /&gt;  Self.FMList[i] := Self.FMList[i – 1];&lt;br /&gt;&lt;br /&gt; Self.MList[0] := s;&lt;br /&gt; Self.FNumItems := Max(FNumItems + 1, MRUMaxItems);&lt;br /&gt;End;&lt;br /&gt;Function GetString( n : Integer ) : String;&lt;br /&gt;Begin&lt;br /&gt; If (n &amp;gt;= 0) and (n &amp;lt;= Self.FNumItems - 1) Then&lt;br /&gt;  Result := Self.FMList[n];&lt;br /&gt;End; &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;(Bersambung)&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-1125293279757527746?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/1125293279757527746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=1125293279757527746&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/1125293279757527746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/1125293279757527746'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2011/03/object-oriented-programming-pada-delphi_14.html' title='Object Oriented Programming Pada Delphi - Bag 5'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-7756819779638028890</id><published>2011-03-10T08:53:00.004+07:00</published><updated>2011-03-10T11:26:11.588+07:00</updated><title type='text'>Free Magazine (Sekilas Tentang Delphi Starter Edition)</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Nama Blaise Pascal Magazine seharusnya bukanlah nama asing buat kita-kita, para delphi maniak. Ya, sebuah majalah yang berisi tentang bahasa keluarga pascal. Sesuai tag line-nya “ALL ABOUT DELPHI AND DELPHI PRISM(.Net) , LAZARUS &amp;amp; PASCAL, AND RELATED LANGUAGES” . Pada edisi 15/97 Download edition membahas tentang Delphi Starter Edition.&lt;br /&gt;&lt;br /&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;span class="fullpost"&gt; &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.blaisepascal.eu/freedownloads/Blaise15UKTotaal_Download.pdf"&gt;&lt;img border="0" height="104" src="http://1.bp.blogspot.com/-NnJcnBN_Qp0/TXgs8EsKUfI/AAAAAAAAAGs/Je5lLc-qrQ0/s320/BlaisePascal.jpg" width="320" /&gt;&lt;span id="goog_442498565"&gt;&lt;/span&gt;&lt;/a&gt;&lt;span id="goog_442498566"&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;Pada edisi kali ini akan dibahas beberapa hal tentang Delphi Starter Edition, antara lain : &lt;/div&gt;&lt;div class="MsoListParagraphCxSpFirst" style="line-height: normal; margin-bottom: 0.0001pt; text-indent: -0.25in;"&gt;1.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Delphi XE Starter edition reviewed&lt;span style="font-family: Verdana-Italic; font-size: 10pt;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="text-indent: -0.25in;"&gt;2.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Delphi XE Starter try: a littel Mailserver &lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="text-indent: -0.25in;"&gt;3.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;ClientDataset: what to do if you dont have it?&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="text-indent: -0.25in;"&gt;4.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;get kbmMemTable CodeGear Edition its free!&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="text-indent: -0.25in;"&gt;5.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Introduction to Databases Part 2:&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 0.75in; text-indent: -0.25in;"&gt;-&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Common Database Objects&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 0.75in; text-indent: -0.25in;"&gt;-&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Advantage Database Server and Delphi XE Starter Edition&lt;/div&gt;&lt;div class="MsoListParagraphCxSpLast" style="margin-left: 0.75in; text-indent: -0.25in;"&gt;-&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Moving /adding your components into the Delphi Starter Edition&lt;/div&gt;&lt;div class="MsoNormal"&gt;Menarik bukan? Edisi ini bisa anda download &lt;a href="http://www.blaisepascal.eu/freedownloads/Blaise15UKTotaal_Download.pdf"&gt;disini&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-7756819779638028890?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/7756819779638028890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=7756819779638028890&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/7756819779638028890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/7756819779638028890'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2011/03/free-magazine-sekilas-tentang-delphi.html' title='Free Magazine (Sekilas Tentang Delphi Starter Edition)'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-NnJcnBN_Qp0/TXgs8EsKUfI/AAAAAAAAAGs/Je5lLc-qrQ0/s72-c/BlaisePascal.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-123216944709293591</id><published>2011-03-07T21:45:00.021+07:00</published><updated>2011-03-18T12:31:41.960+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OOP'/><title type='text'>Object Oriented Programming Pada Delphi - Bag 4</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Para Delphi dan OOP Mania, pada &lt;a href="http://delphigurus.blogspot.com/2011/03/object-oriented-programming-pada-delphi.html"&gt;artikel sebelumnya&lt;/a&gt; kita telah mempelajari cara mengalokasikan dan membebaskan memori sebuah objek. Pada artikel berikut ini, saya akan coba menjelaskan bagaimana cara mendeklarasikan sebuah kelas lengkap dengan method – methodnya. Selamat mengikuti.&lt;br /&gt;&lt;span class="fullpost"&gt;  &lt;br /&gt;Seperti yang telah kita pelajari pada &lt;a href="http://delphigurus.blogspot.com/2011/02/object-oriented-programming-oop-pada.html"&gt;artikel sebelumnya&lt;/a&gt;, kelas adalah sebuah pola/rancangan/struktur data. Pada artikel tersebut, kita telah mendeklarasikan kelas sebagai berikut :&lt;br /&gt;&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;Type&lt;br /&gt; TStudent = Class&lt;br /&gt;  FNama : String;&lt;br /&gt;  FNIS : String;&lt;br /&gt;  FAlamat : String;&lt;br /&gt;  FTelpon : String;&lt;br /&gt; End;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Jika kita membuat empat objek bertipe TStudent, maka masing-masing objek tersebut akan mempunyai atribut yang sama yaitu nama,nis, alamat dan telpon. Struktur dari masing-masing objek tadi sama persis,dan struktur objek ini ditentukan pada/oleh kelas TStudent.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Atribut-atribut yang ada pada objek student – dalam kasus ini yaitu  FNama, FNIS, Falamat ,dan FTelpon, di OOP dikenal dengan beberapa nama. Kadang disebut instance variables, data members, properties dan fields. Hati-hati, jangan terkecoh dengan fields yang berarti kolom pada table.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Jika kita telah terbiasa dengan tipe data Record, tentunya kita akan melihat bahwa struktur sebuah kelas tidak berbeda dengan struktur tipe data record. Keduanya merupakan tipe data yang merupakan gabungan dari beberapa data. Lalu apa yang membedakan kelas dengan tipe data record ? Di dalam kelas, kita bisa membuat procedure (biasa disebut method). Dengan method ini nantinya objek yang kita buat bisa melakukan sesuatu. Method untuk kelas TStudent bisa "RegisterForClass", "SavetoTable", "SendInvoice", dll. Untuk lebih memberi gambaran apa itu method, coba anda buka kelas TstringList dan TiniFile. Sebutkan method-method yang ada pada kedua kelas tersebut.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Saatnya Kita Menuliskan Method&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ada dua langkah yang harus kita lakukan ketika akan membuat sebuah method. Yang pertama, kita harus deklarasikan method tersebut pada bagian deklarasi kelas. Hal ini hampir sama dengan pendeklarasian atribut/properties kelas. Deklarasi ini akan memberitahulan ke compiler method-method apa saja yang dimiliki kelas ini. Method pada kenyataannya sama dengan function atau procedure. Method bisa mengembalikan nilai dan bisa juga menerima parameter. Berikut ini adalah contoh kelas dengan empat atribut dan tiga methods :&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;Type&lt;br /&gt; TSquare = Class&lt;br /&gt;  FX, FY : Integer;&lt;br /&gt;  FWidth : Integer;&lt;br /&gt;  Caption : String;&lt;br /&gt;  Function Area : Integer; // hitung luas&lt;br /&gt;  Procedure MoveLeft(dx, dy : Integer); menggerakan ke kiri&lt;br /&gt;  Procedure MoveRight(dx, dy : Integer); menggerakan ke kanan&lt;br /&gt;End;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Langkah selanjutnya yaitu menuliskan baris kode untuk method-method tadi. Kita nanti akan melihat bagaimana cara menuliskan baris kode pada sebuah method , namun sebelum itu coba kita lihat bagaimana kita akan menggunakan method-method tersebut:&lt;br /&gt;&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;Var&lt;br /&gt; Square1 : TSquare;&lt;br /&gt; SqWidth : Integer;&lt;br /&gt;&lt;br /&gt;Begin&lt;br /&gt; Square1 := TSquare.Create;&lt;br /&gt; Try&lt;br /&gt;  Square1.Fx := 10;&lt;br /&gt;  Square1.Fy := 20;&lt;br /&gt;  Square1.FWidth := 7;&lt;br /&gt;&lt;br /&gt;  SqWidth := Square1.Area; // 49 nilai yg kita harapkan       Square1.MoveLeft(2, 3);&lt;br /&gt; Finally&lt;br /&gt;  Square1.Free;&lt;br /&gt; End;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Seperti yang kita lihat pada baris kode di atas, kita bisa memanggil method dengan menuliskan nama method tersebut diawali dengan nama objeknya (disambung dengan dot/titik) , hal ini sama dengan cara memanggil atribut kelas. Sekarang, jika kita mempunyai dua buah objek bertipe TSquare, dan kita panggil salah satu method, atribut mana yang dipakai oleh method tersebut ? Perhatikan baris kode berikut ini :&lt;br /&gt;&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;Var&lt;br /&gt; Square1 : TSquare;&lt;br /&gt; Square2 : TSquare;&lt;br /&gt; SqWidth : Integer;&lt;br /&gt;&lt;br /&gt;Begin&lt;br /&gt; Square1 := TSquare.Create;&lt;br /&gt; Square1.FWidth := 7;&lt;br /&gt;&lt;br /&gt; Square2 := TSquare.Create;&lt;br /&gt; Square2.FWidth := 5;&lt;br /&gt; SqWidth := Square1.Area; // Hasilnya 49 atau 25?&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Berapa nilai sqWidth? Kita inginkan nilainya 49 – yang didapat dari nilai atribut Width x Width. Dan memang demikian. Lalu kenapa bisa nilainya 49 kok bukan 25? Perhatikan, bahwa sebuah method akan menggunakan atribut dari objek yang memanggilnya. Jika kita memanggil method area dari objek Square1 , maka method ini akan menggunakan atribut width milik objek square1 yang bernilai 7. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Sejauh ini kita sudah mengetahui cara mendeklarasikan sebuah  method. Selanjutnya kita harus menuliskan baris kode yang merupakan implementasi method yang kita deklarasikan.Kita harus tuliskan baris kode tersebut pada bagian implementation. Bagaimana caranya? Mudah, tuliskan seperti kita menulis sebuah procedure/function seperti biasa. Tapi satu hal yang perlu  kita perhatikan. Kita harus bertitahu compiler bahwa procedure yang kita tuliskan bukan procedure seperti biasanya. Caranya dengan menambahkan nama kelas sebelum nama methos (disambung dengan dot/titik). Lihat contoh dibawah ini : &lt;br /&gt;&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;TSquare.Area : Integer;&lt;br /&gt;&lt;br /&gt;//dan&lt;br /&gt;&lt;br /&gt;Procedure TSquare.MoveLeft(dx, dy : Integer);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Yang perlu anda catat bahwa,  kenapa objek yang memanggil method area tidak dijadikan parameter? Lalu bagaimana method – yang aslinya berupa procedure/function biasa – bisa mengakses data dari objek tersebut? Sebenarnya , objek tersebut dijadikan parameter pada method tadi, tapi kita tidak melihatnya, atau lebih tepatnya kita tidak mau menuliskannya. Ketika kita menuliskan baris kode :&lt;br /&gt;&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;SqWidth := Square1.Area; // 49&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Compiler sebenarnya mengenerate baris kode : &lt;br /&gt;&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;SqWidth := Area( Square1 )&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Jadi secara “&lt;i&gt;Behind the scenes&lt;/i&gt;”  compiler menjadikan objek sebagai parameter. Di damal method, kita bisa menggunakan “identifier” self untuk mengacu ke objek yang memanggil method tersebut.Ketika kita menuliskan baris kode : &lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;Square1.Area&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Di dalam method tersebut Self mengacu ke objek  Square1. Jika kita menulis baris kode :&lt;br /&gt;&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;Square2.Area&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Berarti Self mengacu ke objek Square2.&lt;br /&gt;Di bawah ini keseluruhan kode untuk method Area:&lt;br /&gt;&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;Function TSquare.Area : Integer;&lt;br /&gt;&lt;br /&gt;Begin&lt;br /&gt; Result := Self.FWidth * Self.FWidth;&lt;br /&gt;End;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Dan di bawah ini keseluruhan kode untuk method MoveLeft dan MoveRight:&lt;br /&gt;&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;Procedure TSquare.MoveLeft( dx, dy : Integer);&lt;br /&gt;&lt;br /&gt;Begin&lt;br /&gt; Self.Fx := Self.Fx – dx;&lt;br /&gt; Self.Fy := Self.Fy – dy;&lt;br /&gt;End;&lt;br /&gt;Procedure TSquare.MoveRight( dx, dy : Integer);&lt;br /&gt;&lt;br /&gt;Begin&lt;br /&gt; Self.Fx := Self.Fx + dx;&lt;br /&gt; Self.Fy := Self.Fy + dy;&lt;br /&gt;End;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Pada sebagian besar kasus, penggunaak Self merupakan opsional saja – jadi kita bisa langsung mengakses atribut objek tanpa didahului self, seperti pada baris kode berikut ini :&lt;br /&gt;&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;Function TSquare.Area : Integer;&lt;br /&gt;&lt;br /&gt;Begin&lt;br /&gt; Result := FWidth * FWidth;&lt;br /&gt;End;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Baris kode di atas tidak menimbulkan error. Hal ini karena compiler tahu method yang dipanggil tersebut milik kelas apa, oleh karena itu compiler tahu atribut yang kita akses baik kita menggunakan self atau tidak. . Namun ada satu pengecualian, jika kita mempunyai variable lokal pada method yang namanya sama persis dengan atribut objek, maka untuk mengakses atribut objek harus didahuui dengan self, jika tidak maka compiler akan membaca variable lokal tersebut (bukan atribut objek) , perhatikan contoh di bawah ini :&lt;br /&gt;&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;Function TSquare.Area : Integer;&lt;br /&gt;&lt;br /&gt;Var&lt;br /&gt; FWidth : Integer; &lt;br /&gt;Begin&lt;br /&gt; Result := FWidth * FWidth;&lt;br /&gt;End;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Pada method di atas terdapat satu variable lokal bernama Fwidth. Jika kita akses Fwidth tanpa diawalai Self, maka compiler akan memanggil Fwidth (variable lokal) bukan Fwidth (Atribut objek)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Tip&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Setelah kita deklarasikan method kita bisa klik Ctrl Shift C –Delphi akan mengenerate kode (hanya outline) di bagian implementation. (Bersambung)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-123216944709293591?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/123216944709293591/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=123216944709293591&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/123216944709293591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/123216944709293591'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2011/03/object-oriented-programming-pada-delphi_07.html' title='Object Oriented Programming Pada Delphi - Bag 4'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-7913715462663980317</id><published>2011-03-03T13:01:00.002+07:00</published><updated>2011-03-18T12:39:28.126+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Video'/><title type='text'>Delphi Starter Edition video</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;a href="http://www.embarcadero.com/products/delphi/starter"&gt;Delphi XE Starter Edition&lt;/a&gt; adalah sebuah solusi yang ditawarkan oleh Embarcadero. Dengan paket ini kita bisa mendapatkan harga yang jauh lebih murah dibanding Delphi Profesional maupun Delphi Enterprise.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Untuk lebih mengenal apa itu itu Delphi XE Starter Edition bisa di lihat video berikut ini : &lt;br /&gt;&lt;br /&gt;&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://1.gvt0.com/vi/kjAltkkGEFE/0.jpg" height="300" width="100%"&gt;&lt;param name="movie" value="http://www.youtube.com/v/kjAltkkGEFE&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266" src="http://www.youtube.com/v/kjAltkkGEFE&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;Jika masih punya pertanyaan seputar Delphi Starter Edition bisa di lifat &lt;a href="http://www.embarcadero.com/products/delphi/starter-faq"&gt;FAQ&lt;/a&gt; tentang edisi ini.&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-7913715462663980317?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/7913715462663980317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=7913715462663980317&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/7913715462663980317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/7913715462663980317'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2011/03/delphi-starter-edition-video.html' title='Delphi Starter Edition video'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-4625448145676334131</id><published>2011-03-01T04:15:00.004+07:00</published><updated>2011-03-18T12:34:19.023+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OOP'/><title type='text'>Object Oriented Programming Pada Delphi - Bag 3</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Pada &lt;a href="http://delphigurus.blogspot.com/2011/02/object-oriented-programming-oop-pada_22.html"&gt;artikel sebelumnya&lt;/a&gt; , kita telah mempelajari cara menggunakan kelas dan objek. Pada artikel berikut ini, saya akan membahas tentang bagaimana cara mengalokasikan dan membebaskan memori yang dipakai objek. Selamat mengikuti.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Pastikan bebaskan memori yang sudah tidak terpakai !&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Perhatikan potongan program di bawah ini : &lt;pre class="Delphi" name="code"&gt;Procedure Test;&lt;br /&gt;Var&lt;br /&gt;i, j : Integer;&lt;br /&gt;stringList1 : TStringList;&lt;br /&gt;&lt;br /&gt;Begin&lt;br /&gt;stringList1 := TStringList.Create;&lt;br /&gt;i := 10;&lt;br /&gt;j := 0;&lt;br /&gt;i := i div j; // baris 10 – menimbulkan Exception&lt;br /&gt;stringList1.Free; // baris 11 – tdk akan pernah dieksekusi&lt;br /&gt;End;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Pada baris ke 10, program akan menampilkan eksepsi devide by zero. Jika kita jalankan kode di atas menggunakan debugger, kita akan lihat bahwa baris ke 11 tidak akan pernah dieksekusi. Memori yang di alokasikan  untuk stringList1 tidak pernah dibebaskan. Contoh di atas mungkin akan jarang terjadi, namun yang jelas kita harus hati-hati ketika mengalokasikan memori , kita harus memastikan bahwa memori yang dialokasikan tadi bisa dibebaskan. Delphi menyarankan – dan saya juga – untuk selalu mengapit penulisan Create / Free dengan Try / Finally. Try / Finally merupakan bagian dari standar pemrograman Pascal, cara kerjanya saya jelaskan dibawah ini.&lt;br /&gt;&lt;br /&gt;Dalam menggunakan Try/Finally kita akan menjumpai dua buah kelompok baris kode. Kelompok pertama terletak di antara Try dan Finally, sedangkan kelompok kedua terleta di antara finally dan end. Perhatikan potongan baris kode di bawah ini :&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;Try&lt;br /&gt;kelompok 1&lt;br /&gt;Finally&lt;br /&gt;kelompok 2&lt;br /&gt;End;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Jika ada baris kode di kelompok pertama menimbulkan eksepsi, maka delphi akan menjaankan baris kode yang berada di kelompok kedua sebelum menampilkan eksepsi. Jika kelompok pertama tidak menimbulkan ekspsi baris kode pada kelompok kedua tetap akan dijalankan. Oleh karena itu, baris kode pada kelompok kedua pasti akan diekseusi baik terjadi atau tidak eksepsi pada baris kode di kelompok pertama. Untuk memastikan program bisa membebaskan memori yang sudah tidak terpakai, panggillah procedure free pada kelompok kedua. Lihat pola standar berikut ini :&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;objek := namakelas.namaconstructor&lt;br /&gt;Try&lt;br /&gt;// Gunakan objek di sini&lt;br /&gt;Finally&lt;br /&gt;&lt;objek&gt;.Free;&lt;br /&gt;End;&lt;br /&gt;&lt;/objek&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Perhatikan , kita harus memanggil constructor sebelum baris Try. Hal ini untuk mengantisipasi jika constructor gagal dieksekusi. Jika constructor gagal dieksekusi, delphi tidak akan mengalokasikan memori..Jika constructor dieksekusi setelah baris Try, delphi akan menjalankan baris kode pada kelompok kedua, hal ini akan memungkinkan delphi membebaskan memori yang belum dialokasikan. Dengan menempatkan constructor sebelum try, jika constructornya gagal dieksekusi maka delphi tidak akan mengeksekusi baris kode pada kelompok kedua.&lt;br /&gt;Jika kita harus mengalokasikan dan membebaskan memori untuk lebih dari satu  buah objek, penggunaan Try / Finally akan sedikit lebih komplek. Perhatikan potongan baris kode berikut ini :&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;Var&lt;br /&gt;Student1 : TStudent;&lt;br /&gt;StringListl : TStringList;&lt;br /&gt;&lt;br /&gt;Begin&lt;br /&gt;// alokasikan memori&lt;br /&gt;StringListl := TStringList.Create;&lt;br /&gt;Student1 := TStudent.Create;&lt;br /&gt;Try&lt;br /&gt;// akses data Student1 &amp;amp; StringList1&lt;br /&gt;Finally&lt;br /&gt;Student1.Free;&lt;br /&gt;StringList.Free;&lt;br /&gt;End;&lt;br /&gt;&lt;/pre&gt;Apakah baris kode di atas sudah memastikan procedure free akan dipanggil? Tidak. Jika constructor TStudent gagal dieksekusi, program tidak akan masuk padablok Try,oleh karena itu baris kode pada blok finally tidak akan dieksekusi,dan memori untuk StringList1 tidak akan dibebaskan. Solusi yang bisa kita lakukan adalah :&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;Var&lt;br /&gt;Student1 : TStudent;&lt;br /&gt;StringListl : TStringList;&lt;br /&gt;&lt;br /&gt;Begin&lt;br /&gt;// alokasikan memori&lt;br /&gt;StringListl := TStringList.Create;&lt;br /&gt;Try&lt;br /&gt;Student1 := TStudent.Create;&lt;br /&gt;Try&lt;br /&gt;// akses data Student1 &amp;amp; StringList1&lt;br /&gt;Finally&lt;br /&gt;Student1.Free;&lt;br /&gt;End;&lt;br /&gt;Finally&lt;br /&gt;StringList.Free;&lt;br /&gt;End;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Baris kode di atas bisa dicompile, tapi penulisan baris kode seperti sangat membosankan; coba anda bayangkan jika kita harus create tiga objek atau lebih . Satu trik untuk menyederhanakan baris kode di atas bisa kita buat. Trik ini berdasarkan bahwa Free tidak akan dijalankan jika objeknya nil. Coba cek algoritma precedure Free di bawah ini :&lt;br /&gt;&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;// Delphi’s Free&lt;br /&gt;If theObjectBeingReleased &amp;lt;&amp;gt; Nil Then&lt;br /&gt;ReleaseTheMemory; // Self.Destroy&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Sebelum membebaskan memori, procedure Free pertamakali akan mengecek apakah objeknya nil atau tidak. Berarti, apakah baris kode berikut ini aman ?&lt;br /&gt;&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;Var&lt;br /&gt;Student1 : TStudent;&lt;br /&gt;Begin&lt;br /&gt;// Lupa inisialisasi&lt;br /&gt;Student1.Free;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Jawabannya tergantung dari nilai  Student1 ketika procedure Free dipanggil. Apakah Student1 nil? Tidak. Di Delphi, variable tidak diberi nilai awal. Perhatikan baris kode di bawah ini (saya jamin tidak akan menimbulkan error) :&lt;br /&gt;&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;Var&lt;br /&gt;Student1 : TStudent;&lt;br /&gt;Begin&lt;br /&gt;Student1 := Nil;&lt;br /&gt;&lt;br /&gt;// Lupa inisialisasi Student1&lt;br /&gt;Student1.Free;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Bagaimana baris kode di atas bisa menyederhanakan penulisan baris kode yang mengharuskan kita mengalokasikan memori dan membebaskan memori dari banyak objek? Perhatikan, dengan memehami algoritma procedure Free berarti kita bisa menuliskan baris kode berikut ini :&lt;br /&gt;&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;Student1 := Nil;&lt;br /&gt;Try&lt;br /&gt;Student1 := TStudent.Create;&lt;br /&gt;Finally&lt;br /&gt;Student1.Free;&lt;br /&gt;End;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Jika constructor gagal dijalankan bisa dipastikan procedure Free tidak akan gagal dieksekusi. Kenapa demikian? Ya, karena jika constructor gagal dieksekusi berarti objek tersebut tidak dialokasikan memori untuknya sehingga nilainya tetap nil. Jika objek bernilai nil, ketika dipanggil procedure Free tidak akan menimbulkan error..&lt;br /&gt;Jadi , solusi yang bisa kita ambil ketika kita harus mengalokasikan memori untuk banyak objek bisa seperti baris berikut ini :&lt;br /&gt;&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;Var&lt;br /&gt;Student1 : TStudent;&lt;br /&gt;StringListl : TStringList;&lt;br /&gt;&lt;br /&gt;Begin&lt;br /&gt;Student1 := Nil;&lt;br /&gt;StringList1 := Nil;&lt;br /&gt;Try&lt;br /&gt;StringListl := TStringList.Create;&lt;br /&gt;Student1 := TStudent.Create;&lt;br /&gt;// Akses data Student1 dan StringList1&lt;br /&gt;Finally&lt;br /&gt;Student1.Free;&lt;br /&gt;StringList.Free;&lt;br /&gt;End;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Penulisan baris kode yang awal , yaitu menuliskan try/finally di dalam try finally, merupakan solusi yang lebih aman, namun agak ribet. Sedangkan solusi yang kedua (dengan inisialisasi objek menjadi nil) enawarkan solusi penulisan baris kode yang singkat dan enak dibaca. Silahkan anda pilih sendiri.&lt;br /&gt;Berbica mengenai kegagalan dalam membebaskan memori, sebenarnya ada beberapa tool yang bisa membantu kita dalam mendekteksi hal ini. Beberapa contoh antara lain : FastMM dan EukareLog. Silahkan pelajari kedua tool tersebut. &lt;a href="http://delphigurus.blogspot.com/2011/03/object-oriented-programming-pada-delphi_07.html"&gt;Bersambung&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-4625448145676334131?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/4625448145676334131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=4625448145676334131&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/4625448145676334131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/4625448145676334131'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2011/03/object-oriented-programming-pada-delphi.html' title='Object Oriented Programming Pada Delphi - Bag 3'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-4953905782754521008</id><published>2011-02-25T12:49:00.015+07:00</published><updated>2011-03-18T12:37:07.562+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Download'/><title type='text'>Wallpaper Delphi XE</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Bagi teman-teman yang ingin mempercantik destopnya dengan walpaper bernuansa Delphi XE, silahkan download gambarnya di bawah ini&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;1. 1440 X 900&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-r_snvRbNKko/TWdFYxf_6aI/AAAAAAAAAGI/rT7786ln-s0/s1600/DelphiXE_PAPER_1440x900.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5577502955428374946" src="http://4.bp.blogspot.com/-r_snvRbNKko/TWdFYxf_6aI/AAAAAAAAAGI/rT7786ln-s0/s320/DelphiXE_PAPER_1440x900.jpg" style="cursor: pointer; float: left; height: 200px; margin: 0pt 10px 10px 0pt; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2. 1280 x 1024&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-N-KKOMZYZDw/TWdFYtBXv0I/AAAAAAAAAGA/HaULy1iK_RQ/s1600/DelphiXE_PAPER_1280x1024.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5577502954226171714" src="http://3.bp.blogspot.com/-N-KKOMZYZDw/TWdFYtBXv0I/AAAAAAAAAGA/HaULy1iK_RQ/s320/DelphiXE_PAPER_1280x1024.jpg" style="cursor: pointer; float: left; height: 256px; margin: 0pt 10px 10px 0pt; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3. 1280 x 1024&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-uAhiEeikLaI/TWdFYZrnpWI/AAAAAAAAAF4/GmmZndpGhLs/s1600/DelphiXE_PAPER_1280x800.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5577502949034665314" src="http://2.bp.blogspot.com/-uAhiEeikLaI/TWdFYZrnpWI/AAAAAAAAAF4/GmmZndpGhLs/s320/DelphiXE_PAPER_1280x800.jpg" style="cursor: pointer; float: left; height: 200px; margin: 0pt 10px 10px 0pt; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4. 1024 x 768&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-DpwRBD7r9Xw/TWdFYNx8bQI/AAAAAAAAAFw/UFVH1MqnHC8/s1600/DelphiXE_PAPER_1024x768.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5577502945839967490" src="http://2.bp.blogspot.com/-DpwRBD7r9Xw/TWdFYNx8bQI/AAAAAAAAAFw/UFVH1MqnHC8/s320/DelphiXE_PAPER_1024x768.jpg" style="cursor: pointer; float: left; height: 240px; margin: 0pt 10px 10px 0pt; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-4953905782754521008?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/4953905782754521008/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=4953905782754521008&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/4953905782754521008'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/4953905782754521008'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2011/02/wallpaper-delphi-xe.html' title='Wallpaper Delphi XE'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-r_snvRbNKko/TWdFYxf_6aI/AAAAAAAAAGI/rT7786ln-s0/s72-c/DelphiXE_PAPER_1440x900.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-7879885421067451519</id><published>2011-02-22T06:13:00.021+07:00</published><updated>2011-03-18T12:32:23.458+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OOP'/><title type='text'>Object Oriented Programming (OOP) Pada Delphi - Bag 2</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Pada &lt;a href="http://delphigurus.blogspot.com/2011/02/object-oriented-programming-oop-pada.html"&gt;artikel sebelumnya&lt;/a&gt; sudah saya jelaskan secara ringkas tentang apa itu OOP, objek, kelas dan sebuah contoh sederhana tentang deklarasi kelas. Pada artikel ini saya akan membahas lebih dalam tentang objek.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Bekerja Dengan Objek&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Sebelum kita melanjutkan ke bagian cara deklarasi kelas, kita akan sedikit membahas bagaimana caranya menggunakan kelas dan objek. Kita akan menggunakan TstringList (dawaan delphi) sebagai contoh dalam pembahasan ini.&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;Var&lt;br /&gt;StringList1 : TStringList; // TStringList &amp;gt; kelas –&lt;br /&gt;// StringList1 objek&lt;/pre&gt;&lt;br /&gt;Di mana kita harus tuliskan deklarasi di atas? Ini tergantung pada dimana kita akan menggunakan objek ini (scope) berapa lama kita akan menggunakannya (lifetime-nya). Jika kita hanya akan mengakes pada satu method kita, maka deklarasikan pada method tersebut. Misalnya :&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;Procedure Test;&lt;br /&gt;Var&lt;br /&gt;StringList1 : StringList;&lt;br /&gt;Begin&lt;br /&gt;&lt;br /&gt;End;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Pada contoh di atas,  variable StringList1 kita deklarasikan pada procedure test. Setelah kita selesai menjalankan procedure test, maka kita sudha tidak bisa mengakses variable StringList1 lagi. Jika kita ingin objek kita ingin objek Stringlist1 ini mempunya skope yang lebih luas dan life time yang lebih lama,  kita harus deklarasikan objek ini di luar procedure test. Jika kita deklarasikan objek ini di bagian implementation unit, diluar procedue test, maka objek ini bisa diakses dari semua bagian unit di mana objek ini di deklarasikan. Tapi jika objek ini kita deklarasikan di bagian interface, maka objek ini akan bisa diakses dari semua bagian unit di mana objek ini dideklarasikan dan bisa juga diakses dari unit lainnnya yang mencantumkan unit ini pada bagia uses-nya.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Tanpa memperhatikan dimana kita deklarasikan objek Stringlist1, program kita mempunya kewajaiban untuk mengalokasikan dan membebaskan (jika sudah tidak dipakai) memori. Hal ini yang menjadi perbedaan pokok jika kita bekerja menggunakan variable bertipe objek dan variable bertipe biasa (non objek), misalnya :&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;Var&lt;br /&gt;i : Integer;&lt;br /&gt;&lt;br /&gt;Begin&lt;br /&gt;i := 10;&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Hanya dengan mendeklarasikannya berarti  kita sudah menglokasikan memori untuk variable tersebut. Beda jika yang kita deklarasikan merupakan variable objek. Setelah variable tersebut kita deklarasikan, kita tidak bisa langsung memakainya. Kita harus alokasikan memori dulu untuk variable tersebut, misalnya :&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;Var&lt;br /&gt;Student1 : TStudent;&lt;br /&gt;Begin&lt;br /&gt;// alokasikan memori sebelum student1 digunakan.&lt;br /&gt;end&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Untuk menglakikasikan memori, kita harus memanggil sebuah procedure khusus yang biasa disebut constructor.  Procedure Constructor sebuah kelas bisa beragam namanya, bahkan sebuah kelas bisa mempunyai lebih dari satu constructor. Kebanyakan dan biasanya, procedure constructor diberi nama Create.  Kita nanti , pada artikel-artikel beikutnya, akan membahas lebih mendalam bagaimana caranya membuat constructor.  Cara memanggil contructor yaitu dengan cara menuliskan nama kelasnya sebelum nama constructor tersebut, misalnya :&lt;br /&gt;&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;TStudent1.Create;&lt;br /&gt;TStringlist.Create;&lt;/pre&gt;&lt;br /&gt;Constructor sebenarnya sebuah fungsi yang mengembalikan sebuah pointer yang mengarah ke memori yang dialokasikan untuk objek tersebut. Contoh yang lebih jelas bisa dilihat di bawah ini :&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;Var&lt;br /&gt;Student1 : TStudent;&lt;br /&gt;Begin&lt;br /&gt;// Alokasikan memori    &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Kesalahan yang sering terjadi bagi yang baru belajar OOP adalah dia lupa memanggil constructornya sebelum digunakan objek yang dia deklarasikan.&lt;br /&gt;Setelah kita alokasikan memori untuk objek tersebut ( dengan memanggil constructor) , kita bisa mengakses data dari objek tersebut dengan menggunakan operator titik (dot) , seperti :&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;Student1 := TStudent.Create;&lt;br /&gt;Student1.Nama := ‘Bagus’;&lt;br /&gt;Student1.NIS := ‘613990005’;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Jika kita mencoba mengakses data dari objek tersebut tanpa memanggil constructornya, maka akan terjadi error (runtime error)&lt;br /&gt;Oya, dalam sebuah program, kita bisa mendeklarasikan dan menggunakan banyak objek , misalnya :&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;var&lt;br /&gt;Student1 : TStudent;&lt;br /&gt;Student2 : TStudent;&lt;br /&gt;Begin&lt;br /&gt;// Alokasikan memori&lt;br /&gt;Student1 := TStudent.Create;&lt;br /&gt;Student2 := TStudent.Create;&lt;br /&gt;&lt;/pre&gt;Dan masing-masing object mempunyai data sendiri-sendiri. Dalam contoh ini (tepatnya yang dideklarasikan di artikel sebelumnya) Student1 mempunyai empat data yaitu Nama,NIS, Alamat dan Telpon, demikian juga Student2.&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;Student1 := TStudent.Create;&lt;br /&gt;Student2 := TStudent.Create;&lt;br /&gt;&lt;br /&gt;Student1.FNama := ‘Bagus Prasojo’;&lt;br /&gt;Student2.FNama := ‘Andi’;&lt;br /&gt;&lt;/pre&gt;Oya, setiap kita mengalokasikan memori untuk sebuah objek, maka memori itu akan tetap terpakai selama objek tersebut belum di hancurkan (destroy). Oleh karena itu, setiap kita mengalokasikan memori maka kewajiban kita untuk membebaskan memori tersebut setelah objek yang kita buat sudah tidak diperlukan lagi. Jika kita lupa , maka akan terjdi yang namanya memory leak. Apa itu memory leak? Saya membahasnya lebih detail pada artikel &lt;a href="http://delphigurus.blogspot.com/2010/07/beberapa-hal-yang-menyebabkan-memory.html"&gt;ini&lt;/a&gt; dan &lt;a href="http://delphigurus.blogspot.com/2010/07/mendeteksi-memory-leak.html"&gt;ini&lt;/a&gt;, silahkan dibaca. Cara membebaskan memory begitu mudah, tinggal panggil procedure free, misalnya :&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;Student1.Free;&lt;br /&gt;Student2.Free;&lt;br /&gt;&lt;/pre&gt;Perhatikan, pola cara membebaskan memori dengan mengalokasikan memori berbeda. Jika kita mengalokasikan memori dengan memanggil funsi create diawali nama kelas, tapi ketika kita membebaskan memori kita panggil procedure free diawali dengan nama objek. Beda ya memanggil procedure diawali dengan nama kelas dan nama objek? Yupe, beda, di artikel-artikel selanjutnya akan kita bahas tentang hal ini.&lt;br /&gt;Di bawah ini contoh penulisan sebuah procedure secara lengkap dimulai dari deklarasi, alokasi memori, dan diakhiri dengan pembebasan memori..&lt;br /&gt;&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;Procedure Test;&lt;br /&gt;Var&lt;br /&gt;StringList1 : StringList; // deklarasi&lt;br /&gt;&lt;br /&gt;Begin&lt;br /&gt;// Panggil constructor untuk alokasikan memori&lt;br /&gt;StringList1 := TStringList1.Create;&lt;br /&gt;&lt;br /&gt;// ubah dan akses data&lt;br /&gt;&lt;br /&gt;// bebaskan memori&lt;br /&gt;StringList1.Free;&lt;br /&gt;End;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Pada contoh di atas, kita mengalokasikan memori dan membebaskan memori pada satu procedure yang sama. Hal ini tidak bermasalah selama objek yang kita alokasikan memori untuknya hanya bisa diakses dari procedure tersebut. Jika objek tersebut bisa diakses dari seluruh bagian unit, maka kita harus hati-hati dalam menentukan kapan kita harus memanggil procedure free (untuk membebaskan memori).&lt;br /&gt;&lt;br /&gt;Inti dari apa yang kita bahas di atas tadi adalah, ketika kita mengalokasikan memori untuk sebuah objek, maka kita beranggung jawab untuk membebaskan memori tersebut. Jika kita lupa , maka kemungkinan terjadinya memory leak sangat besar. Namun hal ini sebenarnya tidak sesederhana itu. Pada artikel selanjutnya kita akan bahas lebih mendalam. Bersambung&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-7879885421067451519?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/7879885421067451519/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=7879885421067451519&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/7879885421067451519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/7879885421067451519'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2011/02/object-oriented-programming-oop-pada_22.html' title='Object Oriented Programming (OOP) Pada Delphi - Bag 2'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-8979598674158961871</id><published>2011-02-15T21:35:00.006+07:00</published><updated>2011-03-18T12:32:55.889+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OOP'/><title type='text'>Object Oriented Programming (OOP) Pada Delphi - Bag 1</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Object Pascal, adalah sebuah bahasa dimana delphi menjadi salah satu IDE (Integrated Development Environment) nya, adalah sebuah bahasa yang mendukung penuh konsep OOP. Sederhananya, bahasa ini memungkinkan bagi programmer untuk membuat dan memanipulasi object. Lebih detailnya, bahasa ini mendukung empat prinsip pokok OOP yaitu : Data Abstraction, Encapsulation, Inheritance, Polymorphism.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Mempelajari OOP berbeda dengan mempelajari Delphi. Apalagi bagi seorang yang sudah mengenal bahasa Pascal. Bisa jadi ada orang yang sangat mahir delphi/pascal namun sangat lemah pada konsep OOP.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Apa itu OOP? Apa Itu Object? Apa Itu Kelas?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;OOP adalah semua hal yang berkaitan dengan writing programs that manipulate objects : ). Delphi, Java, C++ adalah beberapa contoh bahasa yang mendukung OOP. Ketiga bahasa di atas mempunyai prinsip-prinsip OOP yang sama, tentunya dengan sintaks (penulisan baris kode program) yang berbeda. Sekali kita sudah menguasai konsep OOP, maka akan begitu mudah mempelajari OOP pada bahasa manapun. Karena kita hanya akan fokus pada sistaks, bukan pada apa itu OOP.&lt;br /&gt;&lt;br /&gt;Setiap kita mempelajari OOP, maka kita tidak akan lepas dari dua istilah objek dan class (Kelas). Kelas adalah pola/rancangan/struktur data yang dipakai programmer untuk membuat tipe data baru. Untuk mempermudah, kadang saya menyamakan kelas dengan tipe data : ). Setiap bahasa pemrograman mempunyai tipe data bawaan misalnya integer, string, boolean, dll. Delphi dan bahasa lainnya (yang mendukung OOP) memungkinkan bagi programmer untuk membuat tida data sendiri, misalnya Tmahasiswa, Trekening, Tbank, dll. Selama tipe data tersebut bukan tipe data bawaan bahasanya, kita bisa menyebutnya tipe data abstract (abstract data types). VCL (Visual Component Library) milik delphi merupakan contoh koleksi dari banyak kelas. Jadi form, button, combobox, query, dll adalah kelas yang sudah dibuat oleh tim developer embarcadero.&lt;br /&gt;&lt;br /&gt;Kita bisa membuat kelas sendiri dan menggunakannya sama dengan kelas-kelas yang ada pada VCL delphi. Kita akan membahsa lebih detail mengenai cara pembuatan dan penggunaan kelas baru pada beberapa artikel berikutnya. Untuk memberikan gambaran awal apa itu kelas perhatikan baris kode berikut ini :&lt;br /&gt;&lt;pre&gt;TStudent = class&lt;br /&gt;FNama: string;&lt;br /&gt;FNIS: string;&lt;br /&gt;FAlamat: string;&lt;br /&gt;FTelpon: string;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;Baris kode di atas adalah sebuah deklarasi kelas Tstudent dimana kelas tersebut mempunya empat atribut (informasi) yaitu Fnama, FNIS, Falamat, dan Ftelpon. Kita bisa memakai kelas (tipe data) TSTudent ini dengan cara :&lt;br /&gt;&lt;pre&gt;Var&lt;br /&gt;Student1 : TStudent;&lt;br /&gt;Student2 : TStudent;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Pada pembahasan di atas, kita sudah membahasa apa itu kelas. Lalu apa itu objek? Hmmm… mudah. Objek adalah instansiasi dari kelas, atau suatu data yang bertipe data kelas. Hmmm mbulet : ). Dari deklarasi di atas, kita bisa perjelas bahwa Student1, Student2 adalah objek dan Tstrudent adalah kelas. &lt;a href="http://delphigurus.blogspot.com/2011/02/object-oriented-programming-oop-pada_22.html"&gt;(Bersambung)&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-8979598674158961871?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/8979598674158961871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=8979598674158961871&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/8979598674158961871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/8979598674158961871'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2011/02/object-oriented-programming-oop-pada.html' title='Object Oriented Programming (OOP) Pada Delphi - Bag 1'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-7246609633185155251</id><published>2010-07-16T13:01:00.005+07:00</published><updated>2011-03-18T12:40:05.375+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lain-lain'/><title type='text'>Nick Hodges Keluar Dari Embarcadero</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="MsoNormal"&gt;Nick Hodges Keluar Dari Embarcadero&lt;/div&gt;&lt;div class="MsoNormal"&gt;Salah satu orang penting di Embarcadero telah keluar, lebih tepatnya dikeluarkan.  Dia ungkapkan hal itu di akun Facebook-nya.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;a href="http://www.freeimagehosting.net/"&gt;&lt;img alt="Free Image Hosting" border="0" src="http://www.freeimagehosting.net/uploads/b229ab420f.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Di forum embarcadero dia juga mengatakan yang sama. &lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal; margin-bottom: 0.0001pt;"&gt;&lt;i&gt;&lt;span style="font-size: 12pt;"&gt;Folks --&lt;br /&gt;&lt;br /&gt;There have been some rumors floating around, and I wanted to set things&lt;br /&gt;straight.&lt;br /&gt;&lt;br /&gt;I was let go by Embarcadero on Monday. This wasn't my decision.&lt;br /&gt;&lt;br /&gt;About twenty years ago, a friend in the Navy gave me a copy of Tom&lt;br /&gt;Swan's Mastering Turbo Pascal series, and right from the start, I loved&lt;br /&gt;the elegance and beauty of it. I taught myself, and I used Borland&lt;br /&gt;Pascal for Windows to write what was possibly the world's crappiest&lt;br /&gt;shareware. &lt;img alt=":-)" border="0" class="jive-emoticon" height="32" shapes="_x0000_i1025" src="file:///C:/Users/bagus/AppData/Local/Temp/msohtmlclip1/01/clip_image001.gif" width="32" /&gt;&lt;br /&gt;&lt;br /&gt;Then Delphi came along, and I was totally hooked. I loved it. The&lt;br /&gt;beauty of the VCL, the speed of the compiler, the awesome design-time&lt;br /&gt;experience -- it was quite intoxicating. I was fortunate enough to get&lt;br /&gt;on the beta, which allowed me to get smart enough to stumbled my way on&lt;br /&gt;to TeamB. I became what Guy Kawasaki calls a "customer evangelist". I&lt;br /&gt;attended my first Borcon in 1995, I became a Borcon speaker, and then&lt;br /&gt;even a Borcon Advisory Board member. I'd like to think that you could&lt;br /&gt;say that there was no greater or more passionate Delphi fan and&lt;br /&gt;supporter than I -- except maybe for Dr. Bob. &lt;img alt=";-)" border="0" class="jive-emoticon" height="32" shapes="_x0000_i1026" src="file:///C:/Users/bagus/AppData/Local/Temp/msohtmlclip1/01/clip_image001.gif" width="32" /&gt;&lt;br /&gt;&lt;br /&gt;In 2006 I moved my family half way across the country to become the&lt;br /&gt;Delphi Product Manager. Later, I moved over to be R&amp;amp;D Manager, a job I&lt;br /&gt;truly loved. Working at a place that raises your IQ 20 points just by&lt;br /&gt;walking in the door is terrific. During my time with the company, I&lt;br /&gt;continued to be a tireless advocate for Delphi, for CodeGear and then&lt;br /&gt;Embarcadero, for the development team, and for you customers. I pretty&lt;br /&gt;much ate, breathed, and slept Delphi.&lt;br /&gt;&lt;br /&gt;It's a real bummer that there no longer room at Embarcadero for&lt;br /&gt;Delphi's biggest supporter -- again, with props to Dr. Bob &lt;img alt=":-)" border="0" class="jive-emoticon" height="32" shapes="_x0000_i1027" src="file:///C:/Users/bagus/AppData/Local/Temp/msohtmlclip1/01/clip_image001.gif" width="32" /&gt;&lt;br /&gt;&lt;br /&gt;Obviously, moving forward, I'm going to have to cast a wide net to find&lt;br /&gt;a position, so I don't know if I'll be able to remain a "direct" member&lt;br /&gt;of the community. (That may actually please some of you, I know. &lt;img alt=";-)" border="0" class="jive-emoticon" height="32" shapes="_x0000_i1028" src="file:///C:/Users/bagus/AppData/Local/Temp/msohtmlclip1/01/clip_image001.gif" width="32" /&gt;&lt;br /&gt;) But Delphi is still the best and coolest development tool around. It&lt;br /&gt;will easily survive the loss of one guy. I won't be posting as much&lt;br /&gt;here in the coming weeks, I don't think, but I'll be around. And of&lt;br /&gt;course, if anyone has any job leads, please let me know. I've got&lt;br /&gt;lots of time for interviews. &lt;img alt=";-)" border="0" class="jive-emoticon" height="32" shapes="_x0000_i1029" src="file:///C:/Users/bagus/AppData/Local/Temp/msohtmlclip1/01/clip_image001.gif" width="32" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: normal;"&gt;&lt;i&gt;&lt;span style="font-size: 12pt;"&gt;--&lt;br /&gt;&lt;br /&gt;Nick&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;a href="https://forums.embarcadero.com/thread.jspa?threadID=40037&amp;amp;tstart=0"&gt;https://forums.embarcadero.com/thread.jspa?threadID=40037&amp;amp;tstart=0&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-7246609633185155251?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/7246609633185155251/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=7246609633185155251&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/7246609633185155251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/7246609633185155251'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2010/07/nick-hodges-keluar-dari-embarcadero.html' title='Nick Hodges Keluar Dari Embarcadero'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-5355112015280602568</id><published>2010-07-09T12:54:00.004+07:00</published><updated>2011-03-18T12:40:31.249+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lain-lain'/><title type='text'>Sejarah Pascal</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Sebagai pecinta pascal, ada baiknya kita mengetahui sejawah dari pascal. Pada artikel berikut, saya akan mencoba mengumpulkan artikel-artikel dari internet yang berkaitan dengan pascal. Selain pascal, saya juga akan mengumpulkan artikel tentang Delphi&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Pascal_%28programming_language%29"&gt;&lt;b&gt;http://en.wikipedia.org/wiki/Pascal_(programming_language)&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;br /&gt;Pascal is based on the &lt;a href="http://en.wikipedia.org/wiki/ALGOL" title="ALGOL"&gt;ALGOL&lt;/a&gt; programming language and named in honor of the &lt;a href="http://en.wikipedia.org/wiki/France" title="France"&gt;French&lt;/a&gt; mathematician and philosopher &lt;a href="http://en.wikipedia.org/wiki/Blaise_Pascal" title="Blaise Pascal"&gt;Blaise Pascal&lt;/a&gt;. Wirth subsequently developed the &lt;a href="http://en.wikipedia.org/wiki/Modula-2" title="Modula-2"&gt;Modula-2&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Oberon_%28programming_language%29" title="Oberon (programming language)"&gt;Oberon&lt;/a&gt;, languages similar to Pascal. Before, and leading up to Pascal, Wirth developed the language &lt;a href="http://en.wikipedia.org/wiki/Euler_%28programming_language%29" title="Euler (programming language)"&gt;Euler&lt;/a&gt;, followed by &lt;a href="http://en.wikipedia.org/wiki/ALGOL_W" title="ALGOL W"&gt;Algol-W&lt;/a&gt;.&lt;br /&gt;Initially, Pascal was largely, but not exclusively, intended to teach students &lt;a href="http://en.wikipedia.org/wiki/Structured_programming" title="Structured programming"&gt;structured programming&lt;/a&gt;. A generation of students used Pascal as an introductory language in undergraduate courses. Variants of Pascal have also frequently been used for everything from research projects to &lt;a href="http://en.wikipedia.org/wiki/PC_game" title="PC game"&gt;PC games&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Embedded_systems" title="Embedded systems"&gt;embedded systems&lt;/a&gt;. Newer Pascal compilers exist which are widely used. &lt;sup&gt;[&lt;/sup&gt;&lt;a href="http://en.wikipedia.org/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"&gt;&lt;i&gt;&lt;sup&gt;citation needed&lt;/sup&gt;&lt;/i&gt;&lt;/a&gt;&lt;sup&gt;]&lt;/sup&gt;&lt;br /&gt;Pascal was the primary high-level language used for development in the &lt;a href="http://en.wikipedia.org/wiki/Apple_Lisa" title="Apple Lisa"&gt;Apple Lisa&lt;/a&gt;, and in the early years of the Mac; parts of the original &lt;a href="http://en.wikipedia.org/wiki/Apple_Macintosh" title="Apple Macintosh"&gt;Macintosh&lt;/a&gt; operating system were hand-translated into &lt;a href="http://en.wikipedia.org/wiki/Motorola_68000" title="Motorola 68000"&gt;Motorola 68000&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Assembly_language" title="Assembly language"&gt;assembly language&lt;/a&gt; from the Pascal sources. The popular &lt;a href="http://en.wikipedia.org/wiki/Typesetting" title="Typesetting"&gt;typesetting&lt;/a&gt; system &lt;a href="http://en.wikipedia.org/wiki/TeX" title="TeX"&gt;TeX&lt;/a&gt; by &lt;a href="http://en.wikipedia.org/wiki/Donald_E._Knuth" title="Donald E. Knuth"&gt;Donald E. Knuth&lt;/a&gt; was written in &lt;a href="http://en.wikipedia.org/wiki/WEB" title="WEB"&gt;WEB&lt;/a&gt;, the original &lt;a href="http://en.wikipedia.org/wiki/Literate_programming" title="Literate programming"&gt;literate programming&lt;/a&gt; system, based on &lt;a href="http://en.wikipedia.org/wiki/Digital_Equipment_Corporation" title="Digital Equipment Corporation"&gt;DEC&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/PDP-10" title="PDP-10"&gt;PDP-10&lt;/a&gt; Pascal, while an application like &lt;a href="http://en.wikipedia.org/wiki/Total_Commander" title="Total Commander"&gt;Total Commander&lt;/a&gt; was written in &lt;a href="http://en.wikipedia.org/wiki/Delphi_%28programming_language%29" title="Delphi (programming language)"&gt;Delphi&lt;/a&gt; (i.e. &lt;a href="http://en.wikipedia.org/wiki/Object_Pascal" title="Object Pascal"&gt;Object Pascal&lt;/a&gt;).&lt;br /&gt;Object Pascal is still widely used&lt;sup&gt;[&lt;/sup&gt;&lt;a href="http://en.wikipedia.org/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"&gt;&lt;i&gt;&lt;sup&gt;citation needed&lt;/sup&gt;&lt;/i&gt;&lt;/a&gt;&lt;sup&gt;]&lt;/sup&gt; for developing Windows applications such as &lt;a href="http://en.wikipedia.org/wiki/Skype" title="Skype"&gt;Skype&lt;/a&gt;.&lt;br /&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;br /&gt;&lt;div style="margin-left: 36pt; text-indent: -18pt;"&gt;&lt;b&gt;1.&lt;span style="font-family: &amp;quot;; font-size: 7;"&gt;      &lt;/span&gt;&lt;/b&gt;&lt;a href="http://burks.bton.ac.uk/burks/language/oberon/obhist/history.htm"&gt;&lt;b&gt;http://burks.bton.ac.uk/burks/language/oberon/obhist/history.htm&lt;/b&gt;&lt;/a&gt;&lt;b&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/div&gt;In the late sixties, several proposals for an evolutionary successor to Algol were developed. The most successful one was Pascal, defined in 1970 by Prof. Niklaus Wirth at ETH Zürich, the Swiss Federal Institute of Technology. Besides cleaning up or leaving out some of Algol's more obscure features, Pascal added the capability to define new data types out of simpler existing ones. Pascal also supported dynamic data structures; i.e., data structures which can grow and shrink while a program is running.&lt;br /&gt;Pascal received a big boost when ETH released a Pascal compiler that produced a simple intermediate code for a virtual machine (P-code), instead of true native code for a particular machine. This simplified porting Pascal to other processor architectures considerably, because only a new P-code interpreter needed be written for this purpose, not a whole new compiler. One of these projects had been undertaken at the University of California, San Diego. Remarkably, this implementation (UCSD Pascal) didn't require a large and expensive mainframe computer, it ran on the then new Apple II personal computers. This gave Pascal a second important boost. The third one came when Borland released TurboPascal, a fast and inexpensive compiler, and integrated development environment for the IBM PC. Later, Borland revived its version of Pascal when it introduced the rapid application development environment Delphi.&lt;br /&gt;Pascal has greatly influenced the design and evolution of many other languages, from Ada to Visual Basic.&lt;br /&gt;&lt;h1 style="margin-left: 36pt; text-indent: -18pt;"&gt;2.&lt;span style="font-family: &amp;quot;; font-size: 7;"&gt;     &lt;/span&gt;&lt;span class="fn"&gt;Delphi History – from Pascal to Borland Developer Studio 2006 (diambil dari http://delphi.about.com/cs/azindex/a/dhistory.htm)&lt;/span&gt;&lt;/h1&gt;&lt;div class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;This document provides concise descriptions of Delphi versions and its history, along with a brief list of features and notes. Find out how Delphi evolved from Pascal to a RAD tool that can help you solve complex development problems to deliver high-performance, highly scalable applications ranging from desktop and database applications to mobile and distributed applications for the Internet – not only for Windows but also for Linux and the .NET. &lt;/div&gt;&lt;b&gt;What is Delphi?&lt;/b&gt;&lt;br /&gt;&lt;a href="http://www.borland.com/delphi" target="_blank"&gt;Borland Delphi&lt;/a&gt; is a high-level, compiled, strongly typed language that supports structured and object-oriented design. Delphi language is based on Object Pascal. Today, Delphi is much more than simply "Object Pascal language". &lt;br /&gt;&lt;b&gt;The roots: Pascal and its history&lt;/b&gt;&lt;br /&gt;The origin of Pascal owes much of its design to Algol - the first high-level language with a readable, structured, and systematically defined syntax. In the late sixties (196X), several proposals for an evolutionary successor to Algol were developed. The most successful one was Pascal, defined by Prof. Niklaus Wirth. Wirth published the original definition of Pascal in 1971. It was implemented in 1973 with some modifications. Many of the features of Pascal came from earlier languages. The case statement, and value-result parameter passing came from Algol, and the records structures were similar to Cobol and PL 1. Besides cleaning up or leaving out some of Algol's more obscure features, Pascal added the capability to define new data types out of simpler existing ones. Pascal also supported dynamic data structures; i.e., data structures which can grow and shrink while a program is running. The language was designed to be a teaching tool for students of programming classes. &lt;br /&gt;In 1975, Wirth and Jensen produced the ultimate Pascal reference book "Pascal User Manual and Report". Wirth stopped its work on Pascal in 1977 to create a new language, Modula - the successor to Pascal. &lt;br /&gt;&lt;b&gt;Borland Pascal&lt;/b&gt;&lt;br /&gt;With the release (November 1983) of &lt;a href="http://bdn.borland.com/article/0,1410,20693,00.html" target="_blank"&gt;Turbo Pascal 1.0&lt;/a&gt;, Borland started its journey into the world of development environments and tools. To create Turbo Pascal 1.0 Borland licensed the fast and inexpensive Pascal compiler core, written by Anders Hejlsberg. Turbo Pascal introduced an Integrated Development Environment (IDE) where you could edit the code, run the compiler, see the errors, and jump back to the lines containing those errors. Turbo Pascal compiler has been one of the best-selling series of compilers of all time, and made the language particularly popular on the PC platform. &lt;br /&gt;In 1995 Borland revived its version of Pascal when it introduced the rapid application development environment named Delphi - turning Pascal into a visual programming language. The strategic decision was to make database tools and connectivity a central part of the new Pascal product. &lt;br /&gt;&lt;b&gt;The roots: Delphi&lt;/b&gt;&lt;br /&gt;After the release of Turbo Pascal 1, Anders joined the company as an employee and was the architect for all versions of the Turbo Pascal compiler and the first three versions of Delphi. As a chief architect at Borland, Hejlsberg secretly turned Turbo Pascal into an object-oriented application development language, complete with a truly visual environment and superb database-access features: Delphi. &lt;br /&gt;What follows on the next two pages, is a concise description of Delphi versions and its history, along with a brief list of features and notes.&lt;br /&gt;&lt;div class="MsoNormal"&gt;Now, that we know what Delphi is and where are its roots, it's time to take a trip into the past... &lt;/div&gt;&lt;b&gt;Why the name "Delphi"?&lt;/b&gt;&lt;br /&gt;As explained in the Borland's &lt;a href="http://bdn.borland.com/museum/" target="_blank"&gt;Museum&lt;/a&gt; &lt;a href="http://bdn.borland.com/article/0,1410,20396,00.html" target="_blank"&gt;article&lt;/a&gt;, project codenamed Delphi hatched in mid 1993. Why Delphi? It was simple: "If you want to talk to [the] Oracle, go to Delphi". When it came time to pick a retail product name, after an article in Windows Tech Journal about a product that will change the life of programmers, the proposed (final) name was AppBuilder. Since Novell released its Visual AppBuilder, the guys at Borland needed to pick another name; it became a bit of a comedy: the harder people tried to dismiss "Delphi" for the product name, the more it gained support. Once touted as the "VB killer" Delphi has remained a cornerstone product for Borland. &lt;br /&gt;Note: some of the links below marked with an asterix (*), using the Internet Archive &lt;a href="http://web.archive.org/" target="_blank"&gt;WayBackMachine&lt;/a&gt;, will take you several years in the past, showing how Delphi site looked long-ago.&lt;br /&gt;The rest of the links will point you to a more in-depth look at what each (new) technology is about, with tutorials and articles. &lt;br /&gt;&lt;b&gt;Delphi 1 (1995)&lt;/b&gt;&lt;br /&gt;Delphi, Borland's powerful Windows programming development tool first appeared in 1995. Delphi 1 extended the Borland Pascal language by providing &lt;a href="http://delphi.about.com/cs/oopindelphi/index.htm"&gt;object-orientated&lt;/a&gt; and &lt;a href="http://delphi.about.com/cs/formsdialogs/index.htm"&gt;form-based&lt;/a&gt; approach, extremely fast native code compiler, visual two-way tools and great &lt;a href="http://delphi.about.com/cs/database/"&gt;database&lt;/a&gt; support, close integration with &lt;a href="http://delphi.about.com/cs/windowsshellapi/"&gt;Windows&lt;/a&gt; and the &lt;a href="http://delphi.about.com/library/weekly/aa020999.htm"&gt;component&lt;/a&gt; technology. &lt;br /&gt;Here's the &lt;a href="http://bdn.borland.com/article/0,1410,32975,00.html" target="_blank"&gt;Visual Component Library First Draft&lt;/a&gt; &lt;br /&gt;&lt;a href="http://web.archive.org/web/19961221140523/www.borland.com/delphi/delphi1.0/" target="_blank"&gt;Delphi 1&lt;sup&gt;*&lt;/sup&gt;&lt;/a&gt; slogan:&lt;br /&gt;&lt;i&gt;Delphi and Delphi Client/Server are the only development tools that provide the Rapid Application Development (RAD) benefits of visual component-based design, the power of an optimizing native code compiler and a scalable client/server solution.&lt;/i&gt; &lt;br /&gt;Here’s what were the "&lt;a href="http://web.archive.org/web/19961221162009/www.borland.com/delphi/delphi1.0/reasons.html" target="_blank"&gt;7 Top Reasons to Buy Borland Delphi 1.0 Client/Server&lt;sup&gt;*&lt;/sup&gt;&lt;/a&gt;" &lt;br /&gt;&lt;b&gt;Delphi 2 (1996)&lt;/b&gt;&lt;br /&gt;&lt;a href="http://web.archive.org/web/19961221133404/www.borland.com/delphi/" target="_blank"&gt;&lt;i&gt;Delphi 2&lt;sup&gt;*&lt;/sup&gt;&lt;/i&gt;&lt;/a&gt;&lt;i&gt; is the only Rapid Application Development tool that combines the performance of the world's fastest optimizing 32-bit native-code compiler, the productivity of visual component-based design, and the flexibility of scalable database architecture in a robust object-oriented environment.&lt;/i&gt; &lt;br /&gt;Delphi 2, beside being developed for the Win32 platform (full Windows 95 support and integration), brought improved &lt;a href="http://delphi.about.com/b/a/027886.htm"&gt;database grid&lt;/a&gt;, &lt;a href="http://delphi.about.com/cs/oleanddelphi/index.htm"&gt;OLE automation&lt;/a&gt; and variant data type support, the &lt;a href="http://delphi.about.com/library/weekly/aa080602a.htm"&gt;long string&lt;/a&gt; data type and &lt;a href="http://delphi.about.com/cs/kbcurt/index.htm"&gt;Visual Form Inheritance&lt;/a&gt;. Delphi 2: "the Ease of VB with the Power of C++" &lt;br /&gt;&lt;b&gt;Delphi 3 (1997)&lt;/b&gt;&lt;br /&gt;&lt;i&gt;The most comprehensive set of visual, high-performance, client and server development tools for creating distributed enterprise and Web-enabled applications.&lt;/i&gt; &lt;br /&gt;&lt;a href="http://web.archive.org/web/19970509020226/www.borland.com/delphi/" target="_blank"&gt;Delphi 3&lt;sup&gt;*&lt;/sup&gt;&lt;/a&gt; introduced new features and enhancements in the following areas: the &lt;a href="http://delphi.about.com/library/weekly/aa051203a.htm"&gt;code insight&lt;/a&gt; technology, &lt;a href="http://delphi.about.com/b/a/007329.htm"&gt;DLL debugging&lt;/a&gt;, &lt;a href="http://delphi.about.com/cs/vclwriteenhance/"&gt;component templates&lt;/a&gt;, the &lt;a href="http://delphi.about.com/cs/usedbvcl/index_3.htm"&gt;DecisionCube&lt;/a&gt; and &lt;a href="http://delphi.about.com/library/weekly/aa082101a.htm"&gt;TeeChart&lt;/a&gt; components, the &lt;a href="http://delphi.about.com/cs/distrubuted/"&gt;WebBroker&lt;/a&gt; technology, &lt;a href="http://delphi.about.com/library/weekly/aa042099.htm"&gt;ActiveForms&lt;/a&gt;, &lt;a href="http://delphi.about.com/library/weekly/aa010901a.htm"&gt;component packages&lt;/a&gt;, and integration with &lt;a href="http://delphi.about.com/cs/comoleactivex/"&gt;COM&lt;/a&gt; through interfaces. &lt;br /&gt;&lt;b&gt;Delphi 4 (1998)&lt;/b&gt;&lt;br /&gt;&lt;a href="http://web.archive.org/web/19990218210804/www.inprise.com/delphi/" target="_blank"&gt;&lt;i&gt;Delphi 4&lt;sup&gt;*&lt;/sup&gt;&lt;/i&gt;&lt;/a&gt;&lt;i&gt; is a comprehensive set of professional and client/server development tools for building high productivity solutions for &lt;/i&gt;&lt;a href="http://delphi.about.com/cs/distrubuted/"&gt;&lt;i&gt;distributed computing&lt;/i&gt;&lt;/a&gt;&lt;i&gt;. Delphi provides &lt;/i&gt;&lt;a href="http://delphi.about.com/cs/delphiandothers/index.htm"&gt;&lt;i&gt;Java interoperability&lt;/i&gt;&lt;/a&gt;&lt;i&gt;, high performance database drivers, CORBA development, and Microsoft BackOffice support. You've never had a more productive way to customize, manage, visualize and update data. With Delphi, you deliver robust applications to production, on time and on budget.&lt;/i&gt; &lt;br /&gt;Delphi 4 introduced docking, anchoring and constraining components. New features included the AppBrowser, &lt;a href="http://delphi.about.com/library/weekly/aa041800a.htm"&gt;dynamic arrays&lt;/a&gt;, &lt;a href="http://delphi.about.com/library/weekly/aa050900a.htm"&gt;method overloading&lt;/a&gt;, Windows 98 support, improved OLE and COM support as well as extended database support. &lt;br /&gt;&lt;b&gt;Delphi 5 (1999)&lt;/b&gt;&lt;br /&gt;&lt;i&gt;High-productivity development for the Internet&lt;/i&gt; &lt;br /&gt;&lt;a href="http://web.archive.org/web/20000815074526/www.borland.com/delphi/" target="_blank"&gt;Delphi 5&lt;sup&gt;*&lt;/sup&gt;&lt;/a&gt; introduced many new features and enhancements. Some, among many others, are: various desktop layouts, the concept of &lt;a href="http://delphi.about.com/cs/objectpascalide/index_2.htm"&gt;frames&lt;/a&gt;, parallel development, &lt;a href="http://delphi.about.com/library/weekly/aa102400a.htm"&gt;translation&lt;/a&gt; capabilities, enhanced integrated debugger, new &lt;a href="http://delphi.about.com/cs/internetintranet/"&gt;Internet&lt;/a&gt; capabilities (&lt;a href="http://delphi.about.com/library/weekly/aa072500a.htm"&gt;XML&lt;/a&gt;), more database power (&lt;a href="http://delphi.about.com/library/weekly/aa010101a.htm"&gt;ADO support&lt;/a&gt;), etc. &lt;br /&gt;Then, in 2000, Delphi 6 was the first tool to fully supports new and emerging Web Services ...&lt;br /&gt;&lt;div class="MsoNormal"&gt;What follows is a concise description of most recent Delphi versions, along with a brief list of features and notes. &lt;/div&gt;&lt;b&gt;Delphi 6 (2000)&lt;/b&gt;&lt;br /&gt;&lt;i&gt;Borland Delphi is the first rapid application development environment for Windows that fully supports new and emerging Web Services. With Delphi, corporate or individual developers can create next-generation e-business applications quickly and easily.&lt;/i&gt; &lt;br /&gt;&lt;a href="http://delphi.about.com/library/weekly/aa100901a.htm"&gt;Delphi 6&lt;/a&gt; introduced new features and enhancements in the following areas: IDE, Internet, XML, Compiler, COM/Active X, Database support...&lt;br /&gt;What’s more, Delphi 6 added the support for cross-platform development – thus enabling the same code to be compiled with Delphi (under Windows) and &lt;a href="http://delphi.about.com/cs/kylix/"&gt;Kylix&lt;/a&gt; (under Linux). More enhancements included: support for &lt;a href="http://delphi.about.com/cs/webservices/"&gt;Web Services&lt;/a&gt;, the DBExpress engine, new components and classes... &lt;br /&gt;&lt;b&gt;Delphi 7 (2001)&lt;/b&gt;&lt;br /&gt;&lt;a href="http://borland.com/delphi" target="_blank"&gt;&lt;i&gt;Borland Delphi 7 Studio&lt;/i&gt;&lt;/a&gt;&lt;i&gt; provides the migration path to &lt;/i&gt;&lt;a href="http://delphi.about.com/cs/delphifornet/"&gt;&lt;i&gt;Microsoft .NET&lt;/i&gt;&lt;/a&gt;&lt;i&gt; that developers have been waiting for. With Delphi, the choices are always yours: you're in control of a complete e-business development studio — with the freedom to easily take your solutions cross-platform to Linux.&lt;/i&gt; &lt;br /&gt;&lt;b&gt;Delphi 8&lt;/b&gt;&lt;br /&gt;For the &lt;a href="http://delphi.about.com/cs/delphifornet/a/aa041703a.htm"&gt;8th&lt;/a&gt; anniversary of Delphi, Borland prepared the most significant Delphi release: Delphi 8 continues to provide Visual Component Library (VCL) and Component Library for Cross-platform (CLX) development for Win32 (and Linux) as well as new features and continued framework, compiler, IDE, and design time enhancements. &lt;br /&gt;&lt;b&gt;Delphi 2005 (part of Borland Developer Studio 2006)&lt;/b&gt;&lt;br /&gt;&lt;a href="http://delphi.about.com/library/weekly/aa083104a.htm"&gt;Diamondback&lt;/a&gt; is the code name of the next Delphi release. The new Delphi IDE supports multiple personalities. It supports Delphi for Win 32, Delphi for .NET and C#... &lt;br /&gt;&lt;b&gt;Delphi 2006 (part of Borland Developer Studio 2006)&lt;/b&gt;&lt;br /&gt;&lt;a href="http://delphi.about.com/od/productreviews/ss/delphi2006first.htm"&gt;BDS 2006&lt;/a&gt; (code named "DeXter") includes complete RAD support for C++ and C# in addition to Delphi for Win32 and Delphi for .NET programming languages. &lt;br /&gt;&lt;b&gt;Turbo Delphi - for Win32 and .Net development&lt;/b&gt;&lt;br /&gt;&lt;a href="http://delphi.about.com/od/turbodelphitutorial/a/turbo_tutorial.htm"&gt;Turbo Delphi&lt;/a&gt; line of products is a subset of the BDS 2006. &lt;br /&gt;&lt;b&gt;Delphi in the Future...&lt;/b&gt; See what CodeGear (Borland) plans are for Delphi up to the year 2007: &lt;a href="http://dn.codegear.com/article/33383" target="_blank"&gt;Delphi Road Map&lt;/a&gt;...&lt;br /&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-5355112015280602568?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/5355112015280602568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=5355112015280602568&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/5355112015280602568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/5355112015280602568'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2010/07/sebagai-pecinta-pascal-ada-baiknya-kita.html' title='Sejarah Pascal'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-1526912341707670533</id><published>2010-07-08T12:03:00.008+07:00</published><updated>2011-03-18T12:41:05.190+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips Dan Trick'/><title type='text'>Function Untuk Menambahkan Karakter ‘0’( Nol)  di depan Angka</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Biasanya , ketika kita bikin aplikasi database kita akan banyak berurusan dengan data No Bukti. Pada umumnya, data no bukti ini mempunyai pola tertentu, misalnya :&lt;br /&gt;&lt;br /&gt;PO/10/0000001 : No Bukti Purchase Order, tahun 2010, no Urut 1&lt;br /&gt;GR/10/0000101 : No Bukti Goods Receiving, tahun 2010, no Urut 101.&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;PO/10/0000001 : No Bukti Purchase Order, tahun 2010, no Urut 1&lt;br /&gt;GR/10/0000101 : No Bukti Goods Receiving, tahun 2010, no Urut 101.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Dengan pola seperti itu, wajib bagi kita untuk menambahkan karakter 0 sebelum no urut. Pada artikel ini saya akan mencoba memberikan dua contoh function yang bisa melakukan hal di atas.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. Cara Sendiri&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="Delphi" name="code"&gt;function TambahkanKarakterNol(Const AAngka, &lt;br /&gt;ALength : Integer) : String;&lt;br /&gt;begin&lt;br /&gt;Result := IntToStr(AAngka);&lt;br /&gt;while length(Result) &amp;lt; ALength do Result := '0' + Result;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;b&gt;2. Caranya Delphi : )&lt;/b&gt; &lt;pre class="Delphi" name="code"&gt;function TambahkanKarakterNol(AAngka, ALength : Integer): string;&lt;br /&gt;begin&lt;br /&gt;Result := SysUtils.Format('%.*d',[ALength, AAngka]);&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-1526912341707670533?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/1526912341707670533/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=1526912341707670533&amp;isPopup=true' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/1526912341707670533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/1526912341707670533'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2010/07/function-untuk-menambahkan-karakter-0.html' title='Function Untuk Menambahkan Karakter ‘0’( Nol)  di depan Angka'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-1924482362083075522</id><published>2010-07-07T12:25:00.003+07:00</published><updated>2011-03-18T12:41:41.022+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips Dan Trick'/><title type='text'>Cara Efektif Menggunakan StringGrid</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;StringGrid merupakan salah satu VCL yang sangat berguna. Jika anda sudah familiar dengan Webbased Application, anda bisa analogikan StringGrid dengan Table. Table digunakan untuk meenampilkan data. Adapun StringGrid, selain sebagai komponen untuk menampilkan data, dia juga juga bisa sebagai tempat untuk memasukkan data, lihat gambar di bawah ini : &lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt; &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.freeimagehosting.net/"&gt;&lt;img alt="Free Image Hosting" border="0" size="50%" src="http://www.freeimagehosting.net/uploads/6d48a2972c.gif" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;Pada gambar di atas, saya menampilkan form jurnal umum sebagai contoh penggunaan StringGrid. Pada contoh di atas, stringgrid dipakai untuk memasukkan data item jurnal berupa Kode dan nama perkiraan, status Debet/Kredit dan Nominal.&lt;/div&gt;&lt;div class="MsoNormal"&gt;Untuk memanfaatkan Stringgrid saya mempunyai beberapa konstanta yang mencerminkan nomor urut kolom, misalnya _KolKode merujuk pada kolom Kode Perkiraan, _KolNama merujuk pada kolom Nama. Lebih jelasnya lihat baris kode berikut : &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Const&lt;br /&gt;_KolKode : Integer = 0;&lt;br /&gt;_KolNama : Integer = 1;&lt;br /&gt;_KolDK : Integer = 2;&lt;br /&gt;_KolNominal : Integer = 3;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;Konstanta-konstanta tersebut saya pakai di beberapa tempat. Diantaranya pada pada proses Edit. Ketika edit yang harus dilakukan adalah menampilkan kembali daftar Item Jurnal pada Grid. Lebih jelasnya lihat baris kode di bawah ini :  &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;Var&lt;br /&gt;i: Integer;&lt;br /&gt;iBaris: Integer;&lt;br /&gt;begin&lt;br /&gt;ClearGrid;&lt;br /&gt;&lt;br /&gt;iBaris := 1;&lt;br /&gt;for i := 0 to Journal.JournalItems.Count - 1 do&lt;br /&gt;begin&lt;br /&gt;SGIteJurnal.Cells[_KolKode,iBaris]    := Journal.JournalItems[i].Kode;&lt;br /&gt;SGIteJurnal.Cells[_KolNama,iBaris]    := Journal.JournalItems[i].Nama;&lt;br /&gt;SGIteJurnal.Cells[_KolDK,iBaris]      := Journal.JournalItems[i].DK;&lt;br /&gt;SGIteJurnal.Cells[_KolNominal,iBaris] := FormatFloat('0.00', Journal.JournalItems[i].Nominal);&lt;br /&gt;&lt;br /&gt;if i &amp;lt; Journal.JournalItems.Count then&lt;br /&gt;begin&lt;br /&gt;Inc(iBaris);&lt;br /&gt;SGIteJurnal.RowCount := SGIteJurnal.RowCount + 1;&lt;br /&gt;end;&lt;br /&gt;end;&lt;br /&gt;end;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Sampai di belum terlihat apa manfaatnya menggunakan konstanta-konstanta di atas. Manfaatnya akan terlihat ketika tiba-tiba bos kita atau klien kita meminta perubahan tampilan di StringGrid. Misalnya Klien pengin merubah urutan data yang tadinya Kode,Nama,DK, Nominal menjadi Kode,Nama,DK, Nominal. Kalau kita tidak menggunakan kontanta maka kita harus menukar nomor kolom DK dan Nominal di semua baris kode yang menggunakan kedua kolom tersebut. Namun, jika kita menggunakan konstanta maku kita cukup menukar value dari konstanta-konstanta yang merujuk ke kedua kolom terssbut. Kita cukup melakukan perubahan sebai berikut : &lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;pre&gt;Const&lt;br /&gt;_KolKode    : Integer = 0;&lt;br /&gt;_KolNama    : Integer = 1;&lt;br /&gt;_KolNominal : Integer = 2;&lt;br /&gt;_KolDK      : Integer = 3;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="MsoNormal"&gt;&lt;i&gt;&lt;span style="font-family: &amp;quot;;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Mudah bukan? : )&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/div&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-1924482362083075522?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/1924482362083075522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=1924482362083075522&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/1924482362083075522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/1924482362083075522'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2010/07/cara-efektif-menggunakan-stringgrid.html' title='Cara Efektif Menggunakan StringGrid'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-1369964921509037614</id><published>2010-07-06T12:45:00.003+07:00</published><updated>2011-03-18T12:42:38.775+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lain-lain'/><title type='text'>Perubahan Terbaik Saya Berkaitan Dengan Delphi</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Dear Delphier,&lt;br /&gt;Dalam artikel berikut saya akan menguraikan perubahan terbaik yang sudah saya lakukan berkaitan dengan Delphi/Pascal. Dari sini saya harapkan bisa diambil manfaatnya terutama bagi para Delphier pemula. Setidaknya mereka tidak melakukan kesalahan yang sudah saya lakukan. Dari artikel ini juga saya berharap agar para Delphier muda bisa mengikuti perubahan-perubahan tersebut sehingga bisa segera merasakan betapa nikmatnya perubahan-perubahan tersebut : ).&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoListParagraph" style="text-indent: -18pt;"&gt;&lt;b&gt;1.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/b&gt;&lt;b&gt;Berpindah Dari Paradigma Procedural Ke OOP (Object Oriented Programming)&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Perubahan ini bagi saya merupakan perubahan yang spektakuler. Dari perubahan ini semakin membuka pikiran saya bahwa begitu banyak hal yang belum saya kuasai dalam dunia pemrograman. Dari sini saya juga mulai merasa nikmatnya pemrograman. Banyak hal yang dulunya sangat sulit (baca : sangat melelahkan) dilakukan, dengan paradigma OOP hal itu bisa dilakukan dengan sangat mudah.&lt;/div&gt;&lt;div class="MsoNormal"&gt;Perjumpaan saya pertama kali dengan OOP yaitu ketika saya pindah kerja ke  &lt;a href="http://www.tigaserangkai.co.id/"&gt;PT. Tiga Serangkai Inti Corpora&lt;/a&gt; sebuah Holding Company yang memiliki beberapa unit bisnis yaitu &lt;i&gt;Printing And Publishing, Retail, Book Distribution, Consumer Goods Distribution&lt;/i&gt;, dll.  Sebenarnya pada saat kuliah saya juga sudah mengenal OOP, tapi karena tidak pernah diterapkan ya akhirnya hanya sebatas kenal saja.&lt;/div&gt;&lt;div class="MsoListParagraph" style="text-indent: -18pt;"&gt;&lt;b&gt;2.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/b&gt;&lt;b&gt;Merapikan Source Code&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Dulu, saya merasa source code saya adalah yang paling amburadul dan sulit terbaca. Ketika terpaksa harus membuka program-program lama, saya butuh waktu yang agak lama untuk mengingat kembali apa yang saya lakukan dengan source code tersebut. Saya saja sulit apa lagi orang lain. Tentunya hal ini bertentangan dengan perkataan seorang pakar pemrograman, Martin Fowler. Martin Fowler berkata : “&lt;i&gt;Any Fool Can Write Code That A Computer Can Understand. Good Programmers Write Code That Humans Can Understand&lt;/i&gt;”. Mulai sekarang saya berusaha untuk merapikan source code saya, bukan hanya supaya enak dilihat tapi juga enak dibaca (baca : dimengerti). Untuk mewujudkan hal tersebut, yang saya lakukan antara lain : &lt;/div&gt;&lt;div class="MsoListParagraphCxSpFirst" style="text-indent: -18pt;"&gt;a.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;Meluruskan Indentasi&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="text-indent: -18pt;"&gt;b.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;      &lt;/span&gt;Membuat nama method sejelas mungkin sehingga tidak perlu penjelasan maksud dari method tersebut sengan menambahkan &lt;i&gt;Comment&lt;/i&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="text-indent: -18pt;"&gt;c.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;Menamakan Variable sejelas mungkin.&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="text-indent: -18pt;"&gt;d.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;      &lt;/span&gt;Membatasi jumlah baris source code dalam satu method.&lt;/div&gt;&lt;div class="MsoListParagraphCxSpLast" style="text-indent: -18pt;"&gt;e.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;      &lt;/span&gt;Dll&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoListParagraph" style="text-indent: -18pt;"&gt;&lt;b&gt;3.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/b&gt;&lt;b&gt;Menggunakan Model Maker&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Design Kelas begitu sangat mudah. Kesan itulah yang pertama kali saya rasakan ketika memakai tool ini. Dengan tool ini kita akan sangat mudah untuk mendesign Class Diagram, Sequence Diagram, dll. Hebatnya lagi, class diagram yang sudah kita buat bisa kita generate menjadi file dot pas sehingga bisa langsung kita gunakan.&lt;/div&gt;&lt;div class="MsoListParagraph" style="text-indent: -18pt;"&gt;&lt;b&gt;4.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/b&gt;&lt;b&gt;Menggunakan Model Maker Explorer&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Sebuah tool pemrograman yang sangat luar biasa. Sekali anda pakai saya jamin anda akan merasa ada yang kurang jika melakukan aktifitas coding tanpa tool ini. Dengan tool ini kita dengan mudah mebuat variable, Field, Property, dll tanpa harus memindahkan kursor ke bagian deklarasi. Dengan tool ini kita juga bisa melakukan extract method. Pengin mencobanya?&lt;/div&gt;&lt;div class="MsoListParagraph" style="text-indent: -18pt;"&gt;&lt;b&gt;5.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;&lt;/b&gt;&lt;b&gt;Berpindah Dari Delphi 7 Ke Delphi 2010&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Delphi 2010 merupakan versi terakhir dari Delphi. Banyak perubahan dari Delphi 7 ke Delphi 2010 ini. Salah satu yang membuat saya gembira adalah adanya fasilitas Refactoring. Delphi 2010 ini juga sudah terintegrasi dengan Dunit sehingga memudahkan kita untuk melakukan unit testing. Delphi 2010 juga sudah dilengkapi dengan memory management yang baik. Salah satunya dia bisa melaporkan jia terjadi memory leak. Bagaimana caranya? Baca saja artikel saya yang membahas tentang mendekteksi memory leak di blog ini juga.&lt;/div&gt;&lt;div class="MsoNormal"&gt;Selain perubahan-perubahan di atas, saya masih mempunyai obsesi dalam dunia pemrograman. Hal-hal yang sangat ingin saya lakukan adalah :&lt;/div&gt;&lt;div class="MsoListParagraphCxSpFirst" style="text-indent: -18pt;"&gt;1.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;Menguasai Teknik XP (Extreem Programming)&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="text-indent: -18pt;"&gt;2.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;Menguasai Design Pattern&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="text-indent: -18pt;"&gt;3.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;Membuat Program Yang Fully OOP&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="text-indent: -18pt;"&gt;4.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;Explorasi FPC (Free Pascal Compiler) dan Lazarus&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="text-indent: -18pt;"&gt;5.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;Explorasi XML&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="text-indent: -18pt;"&gt;6.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;Menguasai Web Service di Delphi&lt;/div&gt;&lt;div class="MsoListParagraphCxSpLast" style="text-indent: -18pt;"&gt;7.&lt;span style="font: 7pt &amp;quot;Times New Roman&amp;quot;;"&gt;       &lt;/span&gt;Menulis buku tentang Delphi&lt;/div&gt;&lt;div class="MsoNormal"&gt;Bisa membantu mewujudkan kenginan dan harapan saya? : )&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-1369964921509037614?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/1369964921509037614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=1369964921509037614&amp;isPopup=true' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/1369964921509037614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/1369964921509037614'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2010/07/perubahan-terbaik-saya-berkaitan-dengan.html' title='Perubahan Terbaik Saya Berkaitan Dengan Delphi'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-3669773918738730763</id><published>2010-07-05T13:00:00.005+07:00</published><updated>2010-07-05T13:06:34.750+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DevExpress'/><title type='text'>Merubah Warna Textbox Pada Saat Mendapatkan Focus [DevEx : 1]</title><content type='html'>Dear Delphiers,&lt;br /&gt;Kadang-kadang kita menghendaki komponen textbox berubah warnanya ketika dia mendapat focus. Hal ini bisa saja kita lakukan dengan mengkombinasikan event OnEnter dan OnExit pada komponen textbox tersebut. OnEnter untuk merubah warna ketika mendapatkan focus dan OnExit kita pakai untuk mengembalikan warna semula. Namun hal ini bukanlah cara yang &lt;span style="font-style: italic;"&gt;Robust&lt;/span&gt;. Dengan cara ini kita harus menerapkannya pada tiap komponen. Ya kalau Cuma satu Form? Bagaimana kalau pada semua form? Bisa dibayangkan bagaimana susahnya merealisasikan keinginan tersebut.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;Ada cara yang lebih mudah. Yaitu dengan menggunakan komponen dari DevExpress. Di sini saya menggunakan komponen cxTextEdit. Ikutilah langkah-langkah berikut :&lt;br /&gt;&lt;br /&gt;&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CMASXUN%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C05%5Cclip_filelist.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;   &lt;/w:Compatibility&gt;  &lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" latentstylecount="156"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:Calibri; 	mso-font-alt:Arial; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:-520092929 1073786111 9 0 415 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:10.0pt; 	margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:Calibri; 	mso-fareast-font-family:Calibri; 	mso-bidi-font-family:"Times New Roman"; 	mso-ansi-language:IN;} p.ListParagraph, li.ListParagraph, div.ListParagraph 	{mso-style-name:"List Paragraph"; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:10.0pt; 	margin-left:36.0pt; 	mso-add-space:auto; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:Calibri; 	mso-fareast-font-family:Calibri; 	mso-bidi-font-family:"Times New Roman"; 	mso-ansi-language:IN;} p.ListParagraphCxSpFirst, li.ListParagraphCxSpFirst, div.ListParagraphCxSpFirst 	{mso-style-name:"List ParagraphCxSpFirst"; 	mso-style-type:export-only; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:0cm; 	margin-left:36.0pt; 	margin-bottom:.0001pt; 	mso-add-space:auto; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:Calibri; 	mso-fareast-font-family:Calibri; 	mso-bidi-font-family:"Times New Roman"; 	mso-ansi-language:IN;} p.ListParagraphCxSpMiddle, li.ListParagraphCxSpMiddle, div.ListParagraphCxSpMiddle 	{mso-style-name:"List ParagraphCxSpMiddle"; 	mso-style-type:export-only; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:0cm; 	margin-left:36.0pt; 	margin-bottom:.0001pt; 	mso-add-space:auto; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:Calibri; 	mso-fareast-font-family:Calibri; 	mso-bidi-font-family:"Times New Roman"; 	mso-ansi-language:IN;} p.ListParagraphCxSpLast, li.ListParagraphCxSpLast, div.ListParagraphCxSpLast 	{mso-style-name:"List ParagraphCxSpLast"; 	mso-style-type:export-only; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:10.0pt; 	margin-left:36.0pt; 	mso-add-space:auto; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:Calibri; 	mso-fareast-font-family:Calibri; 	mso-bidi-font-family:"Times New Roman"; 	mso-ansi-language:IN;} @page Section1 	{size:612.0pt 792.0pt; 	margin:72.0pt 90.0pt 72.0pt 90.0pt; 	mso-header-margin:36.0pt; 	mso-footer-margin:36.0pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;}  /* List Definitions */  @list l0 	{mso-list-id:461383087; 	mso-list-type:hybrid; 	mso-list-template-ids:-1579897436 69271567 69271577 69271579 69271567 69271577 69271579 69271567 69271577 69271579;} @list l0:level1 	{mso-level-tab-stop:none; 	mso-level-number-position:left; 	text-indent:-18.0pt;} ol 	{margin-bottom:0cm;} ul 	{margin-bottom:0cm;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Table Normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:10.0pt; 	font-family:"Times New Roman"; 	mso-ansi-language:#0400; 	mso-fareast-language:#0400; 	mso-bidi-language:#0400;} &lt;/style&gt; &lt;![endif]--&gt;  &lt;p class="ListParagraphCxSpFirst" style="text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="" lang="IN"&gt;&lt;span style=""&gt;1.&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span lang="IN"&gt;Tempatkan sebuah komponen cxEditStyleControllerStyle pada form;&lt;/span&gt;&lt;/p&gt;  &lt;p class="ListParagraphCxSpLast" style="text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="" lang="IN"&gt;&lt;span style=""&gt;2.&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span lang="IN"&gt;Setting property StyleFocused sesuai Keinginan. Disini saya melakukan setting property StyleFocused seperti gambar di bawah ini &lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.freeimagehosting.net/"&gt;&lt;img src="http://www.freeimagehosting.net/uploads/8ab8041981.gif" alt="Free Image Hosting" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;meta equiv="Content-Type" content="text/html; charset=utf-8"&gt;&lt;meta name="ProgId" content="Word.Document"&gt;&lt;meta name="Generator" content="Microsoft Word 11"&gt;&lt;meta name="Originator" content="Microsoft Word 11"&gt;&lt;link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CMASXUN%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C06%5Cclip_filelist.xml"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;   &lt;/w:Compatibility&gt;  &lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" latentstylecount="156"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;style&gt; &lt;!--  /* Font Definitions */  @font-face 	{font-family:Calibri; 	mso-font-alt:Arial; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:-520092929 1073786111 9 0 415 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:10.0pt; 	margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:Calibri; 	mso-fareast-font-family:Calibri; 	mso-bidi-font-family:"Times New Roman"; 	mso-ansi-language:IN;} p.ListParagraph, li.ListParagraph, div.ListParagraph 	{mso-style-name:"List Paragraph"; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:10.0pt; 	margin-left:36.0pt; 	mso-add-space:auto; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:Calibri; 	mso-fareast-font-family:Calibri; 	mso-bidi-font-family:"Times New Roman"; 	mso-ansi-language:IN;} p.ListParagraphCxSpFirst, li.ListParagraphCxSpFirst, div.ListParagraphCxSpFirst 	{mso-style-name:"List ParagraphCxSpFirst"; 	mso-style-type:export-only; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:0cm; 	margin-left:36.0pt; 	margin-bottom:.0001pt; 	mso-add-space:auto; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:Calibri; 	mso-fareast-font-family:Calibri; 	mso-bidi-font-family:"Times New Roman"; 	mso-ansi-language:IN;} p.ListParagraphCxSpMiddle, li.ListParagraphCxSpMiddle, div.ListParagraphCxSpMiddle 	{mso-style-name:"List ParagraphCxSpMiddle"; 	mso-style-type:export-only; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:0cm; 	margin-left:36.0pt; 	margin-bottom:.0001pt; 	mso-add-space:auto; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:Calibri; 	mso-fareast-font-family:Calibri; 	mso-bidi-font-family:"Times New Roman"; 	mso-ansi-language:IN;} p.ListParagraphCxSpLast, li.ListParagraphCxSpLast, div.ListParagraphCxSpLast 	{mso-style-name:"List ParagraphCxSpLast"; 	mso-style-type:export-only; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:10.0pt; 	margin-left:36.0pt; 	mso-add-space:auto; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:Calibri; 	mso-fareast-font-family:Calibri; 	mso-bidi-font-family:"Times New Roman"; 	mso-ansi-language:IN;} @page Section1 	{size:612.0pt 792.0pt; 	margin:72.0pt 90.0pt 72.0pt 90.0pt; 	mso-header-margin:36.0pt; 	mso-footer-margin:36.0pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;}  /* List Definitions */  @list l0 	{mso-list-id:461383087; 	mso-list-type:hybrid; 	mso-list-template-ids:-1579897436 69271567 69271577 69271579 69271567 69271577 69271579 69271567 69271577 69271579;} @list l0:level1 	{mso-level-tab-stop:none; 	mso-level-number-position:left; 	text-indent:-18.0pt;} ol 	{margin-bottom:0cm;} ul 	{margin-bottom:0cm;} --&gt; &lt;/style&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Table Normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin:0cm; 	mso-para-margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:10.0pt; 	font-family:"Times New Roman"; 	mso-ansi-language:#0400; 	mso-fareast-language:#0400; 	mso-bidi-language:#0400;} &lt;/style&gt; &lt;![endif]--&gt;  &lt;p class="ListParagraph" style="text-indent: -18pt;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="" lang="IN"&gt;&lt;span style=""&gt;1.&lt;span style=""&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span lang="IN"&gt;Kemudian pada Event OnClick dari form tuliskan baris kode berikut : &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%;font-size:9;" lang="IN" &gt;for i := 0 to ComponentCount - 1 do&lt;br /&gt;&lt;span style=""&gt; &lt;/span&gt;begin&lt;br /&gt;&lt;span style=""&gt;    &lt;/span&gt;if Components[i] is TcxCustomTextEdit then&lt;br /&gt;&lt;span style=""&gt;    &lt;/span&gt;begin&lt;br /&gt;&lt;span style=""&gt;      &lt;/span&gt;(Components[i] as TcxCustomTextEdit).StyleFocused.StyleController&lt;span style=""&gt;   &lt;/span&gt;:= cxEditStyleController;&lt;span style=""&gt;         &lt;/span&gt;&lt;br /&gt;&lt;span style=""&gt;      &lt;/span&gt;(Components[i] as TcxCustomTextEdit).Style.StyleController&lt;span style=""&gt;          &lt;/span&gt;:= cxEditStyleController;&lt;br /&gt;&lt;span style=""&gt;      &lt;/span&gt;(Components[i] as TcxCustomTextEdit).StyleDisabled.StyleController&lt;span style=""&gt;  &lt;/span&gt;:= cxEditStyleController;&lt;br /&gt;&lt;span style=""&gt;   &lt;/span&gt;end;&lt;br /&gt;end;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="IN"&gt;Pada baris kode di atas, program akan mengecek semua komponen yang ada pada form. Jika komponen tersebut merupakan komponen &lt;/span&gt;&lt;span style="line-height: 115%;font-size:9;" lang="IN" &gt;TcxCustomTextEdit &lt;/span&gt;&lt;span lang="IN"&gt;(demikian juga komponen-komponen turunannya) maka program akan mengeset StyleController pada saat focus,normal, dan disable hasilnya bisa dilihat digambar berikut :&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.freeimagehosting.net/"&gt;&lt;img src="http://www.freeimagehosting.net/uploads/14447024b5.gif" alt="Free Image Hosting" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-3669773918738730763?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/3669773918738730763/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=3669773918738730763&amp;isPopup=true' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/3669773918738730763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/3669773918738730763'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2010/07/merubah-warna-textbox-pada-saat.html' title='Merubah Warna Textbox Pada Saat Mendapatkan Focus [DevEx : 1]'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-3623556676791904240</id><published>2010-07-05T12:55:00.001+07:00</published><updated>2010-07-05T13:01:23.721+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DevExpress'/><title type='text'>Pengumuman Soal Dev Express</title><content type='html'>Sudah dua bulan ini saya beralih ke Delphi 2010. Selain itu, saya juga mulai menggunakan komponen DevExpress. Kelihatannya Komponen DevExpress ini cukup lengkap dan menarik. Oleh karena itu, di blog ini saya akan membuat kolom khusus yang berisi artikel-artikel yang berisi petualangan :) saya dalam mempelajari / menggunakaan komponen ini. Happy Reading ....&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-3623556676791904240?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/3623556676791904240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=3623556676791904240&amp;isPopup=true' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/3623556676791904240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/3623556676791904240'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2010/07/pengumuman-soal-dev-express.html' title='Pengumuman Soal Dev Express'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-3242321554702605688</id><published>2010-07-03T13:07:00.001+07:00</published><updated>2011-03-18T12:43:26.705+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lain-lain'/><title type='text'>Daftar Website Yang Membahas Delphi</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Dalam artikel ini saya mencoba memberikan daftar situs yang bermanfaat bagi kita semua, Delphi Lover.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;span xmlns=""&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://delphi-id.org/"&gt;http://delphi-id.org&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Situs ini dikomandani mas Luri Darmawan, seorang pendekar delphi di negeri ini yang sudah kondang di mana-mana. Situs ini berupa forum sharing bagi para delphier. Di situs ini kita bisa berbagi informasi tentang teknologi terbaru dari delphi, tips n trick, pertanyaan, dll.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://delphi-id.tk/"&gt;http://delphi-id.tk&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Situs yang bagus. Situs ini (kelihatannya) muncul akibat situs &lt;a href="http://delphi-id.org/"&gt;http://delphi-id.org&lt;/a&gt; lama down. Tapi akhir-akhir ini kedua situs kakak-adik : ) ini sudah Up semua.&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-left: 36pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://delphi.about.com/"&gt;http://delphi.about.com&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Sebuah situs delphi berbahas inggris yang paling lengkap yang pernah saya jumpai. Situs yang dikomnadani oleh Zarco G ini berisi tutorial, tips n Trick, dan artikel-artikel menarik lainnya. Saya sangat menyukai artikel/tuorial tentang OOP. Bahkan saya bisa sedikit mengenal OOP dari situs ini. DI situs ini kita juga bisa mendapatkan newsletter dari satu bab/tutorial yang sedang dibahas di situs ini.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.delphi3000.com/"&gt;http://www.delphi3000.com&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Situs ini berisi ribuan tips n trick dan artikel menarik tentang delphi. Disitus ini aartikel-artikel tersebut sudah dikategorikan menurut pebahasannya sehingga memudahkan kita dalam melakukan  pencarian.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.embarcadero.com/"&gt;http://www.embarcadero.com&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Situs ini merupakan official website dari perusahaan yang membuat delphi. Dalam situs ini terdapat forum tempat berbagi informasi , pertanyaan dan lainnya dari pada delphier di seluruh dunia.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.delphi-resource.com/"&gt;http://www.delphi-resource.com&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Situs yang bagus dan berisi artikel yang sangat kita perlukan.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://blog.marcocantu.com/"&gt;http://blog.marcocantu.com&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Sebuah blog yang syarat informasi tentang delphi. Blog ini merupakan blog dari Delphi Expert yaitu Marco Cantu. Siapa dia? Ini sekilas info tentang dia : &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The author of this blog is Marco Cantù a Borland Delphi guru with 10 books published on the topic in the US (8 Mastering Delphi editions, DDH, and Mastering Kylix) and tens of translations around the world. Before working with Delphi, he did publish 3 books on C++ (particularly Borland C++ and the venerable OWL library).&lt;br /&gt;&lt;br /&gt;Besides writing, he teaches classes on Delphi and XML technologies, and has spoken at many conferences and user groups worldwide. He has spokean at over 10 Borland US Conferences, at the Software Development Conference (SD), Borland European conferences, EKON (Germany), DCon (UK), Conference to the Max (Holland), and (of course) quite a few in Italy.&lt;br /&gt;&lt;br /&gt;Marco lives in Piacenza, Italy with his wife Lella, their kids Benedetta and Jacopo, and their dog Lillo.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://delphindo.wordpress.com/"&gt;http://delphindo.wordpress.com&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Ini merupakan blog dari milis delphi terbesar di Indonesia, Delphindo. Dalam blog ini banyak artikel yang bermanfaat yang merupakan kontribusi dari pada petinggi di milis Delphindo.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.torry.net/"&gt;http://www.torry.net&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Stus ini berisi daftar kumpulan komponen VCL baik yang FreeWare maupun Shareware, Banyak juga yang benarbenar gratis.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.programmingtutorials.com/delphi.aspx"&gt;http://www.programmingtutorials.com/delphi.aspx&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.klik-kanan.com/delphi/index2.shtml"&gt;http://www.klik-kanan.com/delphi/index2.shtml&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Situs ini berbahasa indonesia.Berisi banyak artikel tentang delphi yang sangat bermanfat.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.festra.com/"&gt;http://www.festra.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Delphi tutorials for beginners and intermediate level programmers * Crash Course Delphi: online, hands-on Delphi tutorial for beginners * Delphi projects with fully commented source code * Free Delphi code * Download tutorial projects with tested source code * Components * DClub Library functions and procedures * Tips and hints * DelphiLand Forum&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://blogs.embarcadero.com/"&gt;http://blogs.embarcadero.com&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Blog ini merupakan (sepertinya) blog agregator dari para crew di embrcadero. Jelas blog yang sangat bermanfaat buat ita yang sedang belajar.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://delphigurus.blogspot.com/"&gt;http://delphigurus.blogspot.com&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Ini blog yang sedang anda baca : )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-3242321554702605688?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/3242321554702605688/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=3242321554702605688&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/3242321554702605688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/3242321554702605688'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2010/07/daftar-website-yang-membahas-delphi.html' title='Daftar Website Yang Membahas Delphi'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-873813740096006370</id><published>2010-07-02T12:30:00.003+07:00</published><updated>2011-03-18T12:44:19.462+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips Dan Trick'/><title type='text'>Beberapa Hal Yang Menyebabkan Memory Leak</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Pada artikel &lt;a href="http://delphigurus.blogspot.com/2010/07/mendeteksi-memory-leak.html"&gt;Mendeteksi Memory Leak&lt;/a&gt; sudah dijelaskan apa itu memory leak dan cara mendeteksinya. Pada artikel berikut ini akan saya berikan dua penulisan program yang akan menyebabkan memory leak.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt; &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1.Object Tidak Di Free Ketika Sudah Tidak Dipakai&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Jika kita meng-create Object secara runtime maka kita berkewajiban untuk mem-Free Object tersebut. Jika kita lupa, maka akan terjadi memory leak. Lihat contoh di bawah ini :&lt;br /&gt;Misalnya kita mempunyai kelas TKaryawan yang di dalamnya ada method SaveToDB.  &lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Var&lt;br /&gt;Karyawan : TKaryawan;&lt;br /&gt;begin&lt;br /&gt;Karyawan  :=  TKaryawan.Create(nil);    &lt;br /&gt;if Karyawan.SaveToDB then&lt;br /&gt;begin&lt;br /&gt;ShowMessage('Berhasil Simpan Data Karyawan');&lt;br /&gt;end else begin&lt;br /&gt;ShowMessage('Gagal Simpan Data Karyawan');&lt;br /&gt;end;&lt;br /&gt;end;  &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Pada contoh di atas, kita meng-create object TKaryawan dengan cara &lt;br /&gt;Karyawan  :=  TKaryawan.Create(nil);    Pada saat create object ini komputer akan mengalokasikan memory untuk object Karyawan. Alokasi memory inilah yang harus dibebaskan ketika object karyawan sudah tidak dipakai lagi. Pada baris kode di atas belum dilakukan hal tersebut. Seharusnya yang harus kita lakukan adalah : &lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Var&lt;br /&gt;Karyawan : TKaryawan;&lt;br /&gt;begin&lt;br /&gt;Karyawan  :=  TKaryawan.Create(nil);    &lt;br /&gt;try&lt;br /&gt;if Karyawan.SaveToDB then&lt;br /&gt;begin&lt;br /&gt;ShowMessage('Berhasil Simpan Data Karyawan');&lt;br /&gt;end else begin&lt;br /&gt;ShowMessage('Gagal Simpan Data Karyawan');&lt;br /&gt;end;&lt;br /&gt;finally&lt;br /&gt;Karyawan.Free;&lt;br /&gt;end;&lt;br /&gt;end;  &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2.Penggunaan Resources (Sumber Daya) Dari Luar&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Contohnya adalah pada saat kita mengakses sebuah file. Lihat contoh berikut :&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Var&lt;br /&gt;F : TextFile;&lt;br /&gt;S : String;&lt;br /&gt;begin&lt;br /&gt;AssignFile(F, 'c:\myFile.Txt');&lt;br /&gt;Readln(F,S);&lt;br /&gt;end;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Pada contoh di atas, kita lupa untuk meng-close file tersebut. Hal ini akan menyebabkan memory leak. Seharusnya yang kita lakukan adalah : &lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Var&lt;br /&gt;F : TextFile;&lt;br /&gt;S : String;&lt;br /&gt;begin&lt;br /&gt;try&lt;br /&gt;AssignFile(F, 'c:\myFile.Txt');&lt;br /&gt;Readln(F,S);&lt;br /&gt;finally&lt;br /&gt;CloseFile(F);&lt;br /&gt;end;&lt;br /&gt;end;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Hati-hati juga ketika kita melakukan koneksi ke database. Setelah sudah tidak diperlukan lagi, maka kita juga wajib menutup koneksi tersebut.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-873813740096006370?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/873813740096006370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=873813740096006370&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/873813740096006370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/873813740096006370'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2010/07/beberapa-hal-yang-menyebabkan-memory.html' title='Beberapa Hal Yang Menyebabkan Memory Leak'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-7156240487146754694</id><published>2010-07-01T13:05:00.002+07:00</published><updated>2011-03-18T12:44:51.671+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips Dan Trick'/><title type='text'>Mendeteksi Memory Leak</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Dear Delphiers,&lt;br /&gt;Kadang kita  mengalami PC yang kita pakai kerja lama-lama lemot.  Viruskah? Sudah update antivirus tetap aja masih lemot. Tapi setelah restart PC kita kembali segar bugar. Kalau memang kejadian ini sering kita alami, seharusnya kita mulai curiga jangan-jangan aplikasi yang sedang kita kerjakan mengalami/melakukan “Memory Leak”&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;Apa itu memory leak?  Memory Leak adalah ketidak mampuan software yang kita bangun untuk membebaskan memory yang dia pakai . Memory Leak adalah masalah yang srius. Coba bayangkan, ketika kita membangun aplikasi yang harus berjalan 24/7 dan pada setiap procedure menyebabkan memory leak, apa yang akan terjadi? Bisa-bisa Komputer akan hang dan bilang kalo dia kehabisan memory (Out Of Memory).&lt;br /&gt;ReportMemoryLeaksOnShutdown&lt;br /&gt;Semua versi delphi mulai Delphi 2006 mempunyai fasilitas memory manager yang sangat-sangat lebih bagus dari versi  sebelumnya. Salah satu fitur yang sangat berguna adalah, aplikasi bisa kita minta melaporkan apakah ada memory leak pada saat aplikasi selesai dijalankan.&lt;br /&gt;Caranya dengan mengganti value dari global variable ReportMemoryLeaksOnShutdown menjadi true. Nilai dari ReportMemoryLeaksOnShutdown by default adalah False. Lebih jelasnya ikuti langkah-langkah berikut ini : &lt;br /&gt;&lt;br /&gt;1. Buka project &amp;gt; View Source&lt;br /&gt;2. Perhatikan baris berikut  :&lt;br /&gt;&lt;br /&gt;begin&lt;br /&gt;Application.Initialize;&lt;br /&gt;......&lt;br /&gt;......&lt;br /&gt;Application.Run;&lt;br /&gt;end.&lt;br /&gt;&lt;br /&gt;Tuliskan code “ReportMemoryLeaksOnShutdown := DebugHook &amp;lt;&amp;gt; 0;” pada baris sebelum baris Application.Initialize. Maka akan menjadi : &lt;br /&gt;&lt;br /&gt;Begin&lt;br /&gt;ReportMemoryLeaksOnShutdown := DebugHook &amp;lt;&amp;gt; 0;&lt;br /&gt;Application.Initialize;&lt;br /&gt;......&lt;br /&gt;......&lt;br /&gt;Application.Run;&lt;br /&gt;end.&lt;br /&gt;&lt;br /&gt;3. Jalankan aplikasi dengan menekan F9.&lt;br /&gt;4. Tekan Ctrl+F2 untuk mengakhiri aplikasi.&lt;br /&gt;&lt;br /&gt;Jika setelah selesai menjalankan aplikasi tidak ada pesan akan adanya memory leak, maka aplikasi kita bebas dari memory leak. Tapi jika ada pesan adanya memory leak, kita harus mencari bagian mana yang menyebaban memory leak tersebut.&lt;br /&gt;&lt;br /&gt;Contoh Memory Leak&lt;br /&gt;Berikut ini contoh jika terjadi Memory Leak. Tempatkan baris code berikut pada event OnCreate dari main form pada aplikasi kita.&lt;br /&gt;&lt;br /&gt;procedure TfrmMain.FormCreate(Sender: TObject);&lt;br /&gt;var&lt;br /&gt;SS: TStrings;&lt;br /&gt;begin&lt;br /&gt;SS := TStringList.Create;&lt;br /&gt;SS.Add('Ini Menyebabkan Memory Leak');&lt;br /&gt;end;&lt;br /&gt;Jalankan aplikasi dan langsung dimatikan. Setelah aplikasi selesai dijalankan maka akan ada pesan kira-kira seperti ini : &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.freeimagehosting.net/"&gt;&lt;img alt="Free Image Hosting" border="0" src="http://www.freeimagehosting.net/uploads/f363da5e9e.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Pesan di atas menunjukan bahwa telah terjadi memory leak pada aplikasi yang baru saja kita jalankan. Kenapa bisa terjadi memory leak? Ya ! Hal ini terjadi karena ada object yang belum di Free. Objek apa itu? Lalu bagaimana mengatasi memory leak pada kasus ini? Caranya, pastikan objek yang sudah di create harus di free ketika objek tersebut sudah tidak dipakai. Perhatikan baris code berikut : &lt;br /&gt;&lt;br /&gt;procedure TfrmMain.FormCreate(Sender: TObject);&lt;br /&gt;var&lt;br /&gt;SS: TStrings;&lt;br /&gt;begin&lt;br /&gt;SS := TStringList.Create;&lt;br /&gt;try&lt;br /&gt;SS.Add('Ini Menyebabkan Memory Leak');&lt;br /&gt;finally&lt;br /&gt;SS.Free;&lt;br /&gt;end;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;Lalu jalankan aplikasi dan langsung dimatikan. Masih ada pesan adanya memory leak?  OK, cukup sekian artikel ini semoga bermanfaat. SELAMAT BERKARYA !&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-7156240487146754694?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/7156240487146754694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=7156240487146754694&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/7156240487146754694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/7156240487146754694'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2010/07/mendeteksi-memory-leak.html' title='Mendeteksi Memory Leak'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-1823427913905035133</id><published>2010-06-29T16:50:00.001+07:00</published><updated>2011-03-18T12:38:07.379+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lain-lain'/><title type='text'>Daftar Website Icon Gratis</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Icon merupakan bagian tak terpisahkan dari sebuah Software. Bisa dibilang Software tanpa icon bagaikan sayur tanpa garam.  Sayangnya tidak semua dari kita bisa membuat Icon yang enak dilihat. Tapi jangan sedih dulu. Di internet sudah banyak situs-situs yang menyediakan icon secara gratis. Situs-situs tersebut a.l. : &lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Icon merupakan bagian tak terpisahkan dari sebuah Software. Bisa dibilang Software tanpa icon bagaikan sayur tanpa garam.  Sayangnya tidak semua dari kita bisa membuat Icon yang enak dilihat. Tapi jangan sedih dulu. Di internet sudah banyak situs-situs yang menyediakan icon secara gratis. Situs-situs tersebut a.l. : &lt;br /&gt;1. http://www.iconspedia.com&lt;br /&gt;2. http://www.freeiconsdownload.com/&lt;br /&gt;3. http://www.freeiconsweb.com/&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.freeimagehosting.net/"&gt;&lt;img alt="Free Image Hosting" border="0" src="http://www.freeimagehosting.net/uploads/cb5a208916.gif" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;4. http://www.iconarchive.com/&lt;br /&gt;5. http://fasticon.com/freeware/&lt;br /&gt;&lt;br /&gt;OK, mulai sekarang jangan malas memoles software yang kita buat dengan menambahkan icon : )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-1823427913905035133?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/1823427913905035133/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=1823427913905035133&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/1823427913905035133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/1823427913905035133'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2010/06/daftar-website-icon-gratis.html' title='Daftar Website Icon Gratis'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-2753593757852214533</id><published>2010-06-29T07:32:00.001+07:00</published><updated>2011-03-18T12:45:22.041+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips Dan Trick'/><title type='text'>Membuat Form Yang Seragam</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Dear Delphiers,&lt;br /&gt;Kadang kita menghendaki semua form yang ada di dalam aplikasi kita seragam. Misalnya, di setiap form kita menghendaki ada tombol New,Edit,Save dan Delete.  Bagi pemula, biasanya mereka akan membuat sebuah form yang dijadikan acuan ketika membuat form-form baru. Ketika membuat form baru yang mereka lakukan pertama kali ada mengkopi form acuan tersebut kemudian me-Rename form tersebut menjadi form yang mereka kehendaki. Hal ini bisa saja dilakukan, tapi kurang Robust. Coba bayangkan, ketika terjadi perubahan misalkan dalam kasus ini klien menghendaki di setiap form ditambahkan tombol Help. Dengan cara di atas, maka kita harus lakukan adalah membuka tiap form lalu menambahkan tombol Help.  Pusingkan? &lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Dear Delphiers,&lt;br /&gt;Kadang kita menghendaki semua form yang ada di dalam aplikasi kita seragam. Misalnya, di setiap form kita menghendaki ada tombol New,Edit,Save dan Delete.  Bagi pemula, biasanya mereka akan membuat sebuah form yang dijadikan acuan ketika membuat form-form baru. Ketika membuat form baru yang mereka lakukan pertama kali ada mengkopi form acuan tersebut kemudian me-Rename form tersebut menjadi form yang mereka kehendaki. Hal ini bisa saja dilakukan, tapi kurang Robust. Coba bayangkan, ketika terjadi perubahan misalkan dalam kasus ini klien menghendaki di setiap form ditambahkan tombol Help. Dengan cara di atas, maka kita harus lakukan adalah membuka tiap form lalu menambahkan tombol Help.  Pusingkan? &lt;br /&gt;&lt;br /&gt;Sebenarnya ada cara yang lebih Robust. Yaitu dengan memanfaatkan konsep yang sangat mendasar di Object Oriented Programming, yaitu Inheritance. Ikuti langkah – langkah berikut ini : &lt;br /&gt;1. Buat sebuat project (saya memakai BDS 2010)&lt;br /&gt;2. Buat sebuat main form, form ini nanti akan kita pakai untuk menampilkan form-form di aplikasi ini. Simpan form tersebut dengan ufrmMain. Jangan lupa namakan form ini dengan frmMain.&lt;br /&gt;3. Tambahkan menu untuk menampilkan form, misalnya Form 1, dan Form 2.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.freeimagehosting.net/"&gt;&lt;img alt="Free Image Hosting" border="0" src="http://www.freeimagehosting.net/uploads/badeacc1d4.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;4. Buatlah sebuah form yang akan dijadikan acuan untuk mebuat form-form yang lain. Tambahkan komponen Toolbar, lalu tambahkan empat tombol pada toolbar tersebut. Ubah caption tombol tersebut dengan New,Save, Edit,Delete. Namakan tombol-tombol tersebut dengan nama btnNew, btnSave, dst. Simpan form ini dengan ufrmDefault.&lt;br /&gt;5. Buatlah dua buah form, turunkan dari form ufrmDefault yang baru saja dibuat. Caranya  Klik File &amp;gt; New &amp;gt; Other &amp;gt; Inheritable Items &amp;gt; Pilih frmDefault. Setelah itu akan muncul sebuah form yang sama persis dengan frmDefault. Namakan form tersebut dengan frmSatu. Simpan form ini dengan nama ufrmSatu. Perhaitkan pada baris deklarasi kelas TfrmSatu. Di situ tertulis : &lt;br /&gt;&lt;br /&gt;TfrmSatu = class(TfrmDefault)&lt;br /&gt;private&lt;br /&gt;{ Private declarations }&lt;br /&gt;public&lt;br /&gt;{ Public declarations }&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;Maksud dari deklarasi tersebut adalah kelas TfrmSatu merupakan turunan dari TfrmDefault&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.freeimagehosting.net/"&gt;&lt;img alt="Free Image Hosting" border="0" src="http://www.freeimagehosting.net/uploads/0288a3d47d.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;6. Ulangi langkah ke lima dan simpan form tersebut dengan ufrmDua. Jangan lupa namakan form tersebut frmDua.&lt;br /&gt;7. Langkah selanjutnya adalah kita tampilkan form tersebut. Ingat, kita tadi sudah membuat dua menu di frmMain. Sekarang kita isi menu-menu itu dengan perintah untuk menampilkan frmSatu dan frmDua. Caranya klik menu untuk menampilkan formSatu, lalu isi dengan perintah di bawah ini : &lt;br /&gt;&lt;br /&gt;frmSatu := TfrmSatu.Create(Self);&lt;br /&gt;frmSatu.Show;&lt;br /&gt;&lt;br /&gt;Lakukan hal yang sama untuk formDua.&lt;br /&gt;8. Langkah terakhir, Klik F9 untuk menjalankan project ini. Coba klik menu untuk fomSatu dan formDua. Sama persiskan? Kita tinggal mengisi form tersebut sesuai kebutuhan. Mudah bukan? SELAMAT BERKARYA&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-2753593757852214533?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/2753593757852214533/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=2753593757852214533&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/2753593757852214533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/2753593757852214533'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2010/06/membuat-form-yang-seragam.html' title='Membuat Form Yang Seragam'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-6182031445276283514</id><published>2010-06-20T20:50:00.001+07:00</published><updated>2011-03-18T12:46:23.398+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips Dan Trick'/><title type='text'>Pengaturan File Project Menggunakan Delphi 2010</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Delphi 2010 merupakan IDE (Integrated Development Environtmen) untuk bahasa Object Pascal. Delphi 2010 ini merupakan produk dari Embarcadero Technologies, Inc. Produk ini merupakan versi terbaru dari keluarga Delphi.&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Delphi 2010 merupakan IDE (Integrated Development Environtmen) untuk bahasa Object Pascal. Delphi 2010 ini merupakan produk dari Embarcadero Technologies, Inc. Produk ini merupakan versi terbaru dari keluarga Delphi.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.freeimagehosting.net/"&gt;&lt;img alt="Free Image Hosting" border="0" src="http://www.freeimagehosting.net/uploads/196bff7e9a.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Pada Delphi 2010 ini terdapat sedikit perubahan dalam konfigurasi file-file sebuah proyek. Dalam artikel ini , saya akan mencoba untuk memberikan contoh cara pengaturan file (organisasi file) dalam sebuah proyek yang dikembangkan menggunakan Delphi 2010. Apa yang saya tuliskan di sini merupakan cara yang saya terapkan dalam mengatur file-file proyek saya selama berkecimpung dalam dunia Delphi. Dan Alhamdulillah, apa yang lakukan selama ini terbukti cukup ampuh sehingga saya tidak mengalami permasalahan dalam pengaturan file-file.&lt;br /&gt;Dalam setiap proyek yang saya kerjakan , saya selalu memisahkan letak file-file berdasarkan kategori sebagai berikut : &lt;br /&gt;a.    Images : Semua file gambar yang digunakan dalam proyek saya masukkan ke folder ini&lt;br /&gt;b.    Classes : Folder ini dipakai untuk menampung file Kelas&lt;br /&gt;c.     Form : Folder ini dipakai untuk menampung file form (.pas dan .dfm)&lt;br /&gt;d.    Library : Folder ini dipakai untuk menampung file-file library&lt;br /&gt;e.    dcu : folder ini dipakai untuk menampung file-file *.dcu (Delphi Compiled Unit) yang dihasilakan ketika proses kompilasi.&lt;br /&gt;f.      bin : folder ini dipakai untuk menampung *.EXE yang dihasilkan ketika proses kompilasi.&lt;br /&gt;&lt;br /&gt;Untuk poin b-d biasanya saya masukkan dalam sebuah folder bernama “Source”. Lebih jelasnya silahkan lihat gambar berikut : &lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_CtVsRcxCgKU/TB4eZIsbQTI/AAAAAAAAAC8/kiFGThZWJLU/s1600/file_explorer.gif" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5484854813363224882" src="http://4.bp.blogspot.com/_CtVsRcxCgKU/TB4eZIsbQTI/AAAAAAAAAC8/kiFGThZWJLU/s320/file_explorer.gif" style="cursor: pointer; height: 208px; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Dalam pengaturan file ini, dibutuhkan kedisiplinan kita ketika menyimpan file. Setiap ketika menambah form baru, maka harus kita pastikan bah kita sudah menyimpannya dalam folder “Form”, demikian juga , ketika kita menambah sebuaf file kelas, maka kita juga harus pastikan bahwa kita sudah menyimpannya dalam folder “Classes”.&lt;br /&gt;Khusus untuk folder bin dan dcu diperlukan settingan khusus supaya file-file *.dcu dan *.exe masuk ke dalam folder tersebut. Perlu diketahui, file *.dcu dan *.exe dihasilkan pada saat kompilasi. Yang perlu anda lakukan adalah sebagai berikut : Klik Project &amp;gt; Options &amp;gt; Delphi Compiler . Cari baris “Unit Output Directory”. Isi baris ini dengan folder path dari folder “dcu”. Lalu cari barus “Output Directry”. Isi baris ini dengan path dari folder “bin”. Lebih jelasnya lihat gambar berikut ini : &lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_CtVsRcxCgKU/TB4e8dyS1cI/AAAAAAAAADE/hvdsfs1BVyY/s1600/project_options.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5484855420320404930" src="http://4.bp.blogspot.com/_CtVsRcxCgKU/TB4e8dyS1cI/AAAAAAAAADE/hvdsfs1BVyY/s320/project_options.png" style="cursor: pointer; height: 142px; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Mudah bukan? Selamat berkarya. Kritik dan Saran Welcome. Thx&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-6182031445276283514?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/6182031445276283514/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=6182031445276283514&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/6182031445276283514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/6182031445276283514'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2010/06/pengaturan-file-project-menggunakan.html' title='Pengaturan File Project Menggunakan Delphi 2010'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_CtVsRcxCgKU/TB4eZIsbQTI/AAAAAAAAAC8/kiFGThZWJLU/s72-c/file_explorer.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-7028181335242601298</id><published>2010-03-09T18:37:00.001+07:00</published><updated>2011-03-18T12:35:30.904+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips Dan Trick'/><title type='text'>How can I prevent the user from closing a form?</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;To prevent the user from closing a form you need to disable the close&lt;br /&gt;button in the title bar of a form and at the same time disable the&lt;br /&gt;"Close" menu item in the form's system menu. This is done by calling&lt;br /&gt;the EnableMenuItem API function (see the example below).&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;To prevent the user from closing a form you need to disable the close&lt;br /&gt;button in the title bar of a form and at the same time disable the&lt;br /&gt;"Close" menu item in the form's system menu. This is done by calling&lt;br /&gt;the EnableMenuItem API function (see the example below). Nonetheless,&lt;br /&gt;the user can still close the form using the Alt+F4 key combination,&lt;br /&gt;so we have to set the KeyPreview form property to True and write an&lt;br /&gt;event handler for the OnKeyDown event to cancel out this hot key:&lt;br /&gt;&lt;br /&gt;procedure TForm1.FormCreate(Sender: TObject);&lt;br /&gt;var&lt;br /&gt;hSysMenu: HMENU;&lt;br /&gt;begin&lt;br /&gt;hSysMenu := GetSystemMenu(Self.Handle, False);&lt;br /&gt;if hSysMenu &amp;lt;&amp;gt; 0 then begin&lt;br /&gt;EnableMenuItem(hSysMenu, SC_CLOSE,&lt;br /&gt;MF_BYCOMMAND Or MF_GRAYED);&lt;br /&gt;DrawMenuBar(Self.Handle);&lt;br /&gt;end;&lt;br /&gt;KeyPreview := True;&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;procedure TForm1.FormKeyDown(Sender: TObject;&lt;br /&gt;var Key: Word; Shift: TShiftState);&lt;br /&gt;begin&lt;br /&gt;if (Key = VK_F4) and (ssAlt in Shift) then&lt;br /&gt;Key := 0;&lt;br /&gt;end; &lt;br /&gt;&lt;br /&gt;Source : http://www.delphi3000.com/articles/article_1597.asp?SK=&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-7028181335242601298?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/7028181335242601298/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=7028181335242601298&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/7028181335242601298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/7028181335242601298'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2010/03/how-can-i-prevent-user-from-closing.html' title='How can I prevent the user from closing a form?'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-555714317670063228</id><published>2010-03-04T08:54:00.002+07:00</published><updated>2011-03-18T12:36:28.026+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Database'/><title type='text'>Introduction to InterBase SQL</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;SQL is not difficult to learn — which is good since any attempt to bypass learning it when working with a database server will almost certainly end in an inefficient failure. This session will introduce the basics of SQL (Structured Query Language, occasionally pronounced "sequel") grammar, and then progress to include intermediate syntax such as JOINs, aggregate functions. Finally, some Interbase-specific keywords and optimizations will be covered. &lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Introduction to InterBase SQL&lt;br /&gt;SQL is not difficult to learn — which is good since any attempt to bypass learning it when working with a database server will almost certainly end in an inefficient failure. This session will introduce the basics of SQL (Structured Query Language, occasionally pronounced "sequel") grammar, and then progress to include intermediate syntax such as JOINs, aggregate functions. Finally, some Interbase-specific keywords and optimizations will be covered.&lt;br /&gt;&lt;br /&gt;Introduction&lt;br /&gt;&lt;br /&gt;SQL is not difficult to learn — which is good since any attempt to bypass learning it when working with a database server will almost certainly end in an inefficient failure. This session will introduce the basics of SQL (Structured Query Language, occasionally pronounced "sequel") grammar, and then progress to include intermediate syntax such as JOINs, aggregate functions. Finally, some Interbase-specific keywords and optimizations will be covered.&lt;br /&gt;&lt;br /&gt;All database servers are slightly different, but most of them use SQL as the primary interface for data modification and retrieval. SQL is an ANSI standard, and was designed to provide a database server-independent way of requesting or modifying data. In practice, the standard, in spite of its monstrous length, leaves enough details for the implementers (the developers of the database servers) to decide upon, that writing a complex query which will work on every DB server on the market can range from tricky to impossible. Since most DB producers add proprietary features to their SQL implementation, SQL is only partially successful as a way to write database-independent client software.&lt;br /&gt;&lt;br /&gt;While they're significant enough to frustrate developers attempting to make a single query run against different servers, these differences are not so great that you will have to re-learn your SQL skills from scratch when moving from, say, SQL Server to InterBase. Once you've learned basic SQL, you should be able to do productive work with most of the popular commercial database servers.&lt;br /&gt;&lt;br /&gt;All of the SQL examples in this paper are designed to work with employee.gdb, one of the example databases which ships with InterBase. Feel free to try each query using the ISQL window in IBConsole. There is a lot of information in this paper, and if you're new to SQL you may find it helpful to try out each section as you go.&lt;br /&gt;&lt;br /&gt;The four essential database operations&lt;br /&gt;&lt;br /&gt;Generally, users need to be able to do one of four things with a particular record (often referred to as CRUD)&lt;br /&gt;&lt;br /&gt;1. Create a new record&lt;br /&gt;2. Read the record&lt;br /&gt;3. Update the data in the record&lt;br /&gt;4. Delete the record&lt;br /&gt;&lt;br /&gt;SELECT&lt;br /&gt;&lt;br /&gt;The SELECT verb is used to retrieve one or more records from one or more tables in the database. Some database servers allow you to retrieve records from multiple databases in a single SELECT statement, but InterBase limits SELECT statements to tables, views, and procedures within a single database.&lt;br /&gt;&lt;br /&gt;A simple SELECT statement looks like this:&lt;br /&gt;&lt;br /&gt;SELECT&lt;br /&gt;&lt;br /&gt;EMP_NO, LAST_NAME&lt;br /&gt;&lt;br /&gt;FROM EMPLOYEE&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A SELECT statement produces a result set, or a collection of data produced by the server in response to a query. When dealing with data from a database in a client application, it is helpful to think of data in terms of result sets instead of as tables, since the returned records may or may not correspond to a single physical table in the database.&lt;br /&gt;&lt;br /&gt;This particular SELECT statement will produce a result set with two columns, and with one row for every row in the EMPLOYEE table. Each row in the result set will have one column corresponding to EMP_NO, and one column corresponding to LAST_NAME.&lt;br /&gt;&lt;br /&gt;Another way to write this query is:&lt;br /&gt;&lt;br /&gt;SELECT&lt;br /&gt;&lt;br /&gt;EMPLOYEE.EMP_NO, EMPLOYEE.LAST_NAME&lt;br /&gt;&lt;br /&gt;FROM EMPLOYEE&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In this case, we have specified the table name both in the list of fields we'd like in the result set, and in the FROM clause, where table names need to be listed. It's not necessary to do this in a SELECT statement which only references a single table, but this syntax will be useful later on when we examine how to join data from multiple tables together into a single SQL statement.&lt;br /&gt;&lt;br /&gt;Specifying a fields list&lt;br /&gt;&lt;br /&gt;In the queries above, we have specified that we'd like two fields from the EMPLOYEE table inour result set. There is a shorthand syntax to indicate that we'd like every field from the EMPLOYEE table in the result set. Just specify "*" instead of a list of fields:&lt;br /&gt;&lt;br /&gt;SELECT *&lt;br /&gt;&lt;br /&gt;FROM EMPLOYEE&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This syntax is useful when running queries against a table when you're not sure what the field names are, but I don't recommend that you use it in client applications. The reason is that network traffic is one of the biggest bottlenecks in an application which works with a database server. The less network traffic, the better! So it is wise to specify only the columns which your application absolutely requires in your SELECT statements. (We'll examine how to retrieve only the rows your application absolutely requires in just a moment.) Even if you need every column in a given table, it is still wise to specify the list of fields explicitly instead of using "*" because additional columns not required by your application might be added to the table later on.&lt;br /&gt;&lt;br /&gt;So you should always specify the field names required by your application when writing SELECT statements. You can specify as many fields as your application requires, just separate them with commas like in the example above.&lt;br /&gt;&lt;br /&gt;Restricting returned records with WHERE&lt;br /&gt;&lt;br /&gt;For the same reason that it is advisable to specify only the columns required by your application in a SELECT statement — network bandwidth — it is even more advisable to restrict the rows returned to only those your user is interested in seeing. It is not at all uncommon to have hundreds of megabytes of data in a single table, and chances are very good that your users only want to see a few of these records at a time. Chances are even better that they don't want to wait for millions of records they're not interested in to cross the network before they can see the 10 or so records that they asked for.&lt;br /&gt;&lt;br /&gt;A note for those migrating older applications where users could simply browse entire tables.&lt;br /&gt;I regularly encounter a great deal of resistence to the idea that this mode of operation must change. The usual excuse is "the users need to be able to see all the records" and "they've always done it that way".&lt;br /&gt;The short answer is: No, they do not need to see all the records.&lt;br /&gt;No user can do anything productive browsing back and forth among thousands of records, they are always looking for particular records, or at worse, a small set of related records. The key is to give them an easy to use means of specifying what they are actually looking for. While there are often a few users who continue to insist, the vast majority catch on easily and find it much more productive.&lt;br /&gt;&lt;br /&gt;A WHERE clause is the part of a select statement used to restrict the rows returned as a part of a result set. Here is an example of a SELECT statement with a WHERE clause added:&lt;br /&gt;&lt;br /&gt;SELECT&lt;br /&gt;&lt;br /&gt;LAST_NAME&lt;br /&gt;&lt;br /&gt;FROM EMPLOYEE&lt;br /&gt;&lt;br /&gt;WHERE&lt;br /&gt;&lt;br /&gt;EMP_NO = 20&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Imagine that we want to know the name of employee #20. This query will return that information with minimal network traffic. If we looked at the metadata for the employee table we would find that there is a constraint, in the form of a Primary Key, placed on the EMP_NO column which tells the database server to ensure that values in this column are unique — no two employee records can have the same value in the EMP_NO column. Therefore, the query above, which specifies a single value for EMP_NO in the WHERE clause will return at most one row. It would return no rows if no employee with EMP_NO = 20 existed.&lt;br /&gt;&lt;br /&gt;Comparison Operators: =, &amp;lt;, &amp;lt; =, &amp;gt; =, &amp;gt;, &amp;lt;&amp;gt;&lt;br /&gt;&lt;br /&gt;The above query used the Equals operator. As with programming languages, the other standard comparison operators are also available. The Not Equal operator can be specified as either"&amp;lt;&amp;gt;" or "!=".&lt;br /&gt;&lt;br /&gt;Thus…&lt;br /&gt;&lt;br /&gt;SELECT&lt;br /&gt;&lt;br /&gt;LAST_NAME&lt;br /&gt;&lt;br /&gt;FROM&lt;br /&gt;&lt;br /&gt;EMPLOYEE WHERE&lt;br /&gt;&lt;br /&gt;EMP_NO &amp;lt;&amp;gt; 20&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;… will bring back all employee names except the one for employee #20.&lt;br /&gt;&lt;br /&gt;SELECT&lt;br /&gt;&lt;br /&gt;LAST_NAME&lt;br /&gt;&lt;br /&gt;FROM&lt;br /&gt;&lt;br /&gt;EMPLOYEE WHERE&lt;br /&gt;&lt;br /&gt;EMP_NO &amp;lt;= 20   … will bring back names for those employees having an Emp_No of less than or equal to 20.  Boolean Operators: AND, OR, NOT  Sometimes we need more complex conditions in a WHERE clause. The AND, OR, and NOT boolean operators can be used to combine multiple conditions:  SELECT  LAST_NAME  FROM EMPLOYEE  WHERE  ((EMP_NO &amp;gt;= 20)&lt;br /&gt;&lt;br /&gt;AND&lt;br /&gt;&lt;br /&gt;(EMP_NO &amp;lt;= 30))  AND  (NOT (JOB_CODE = 'VP'))   The use of parentheses when combining multiple conditions is strongly recommended. There is a set order of operations, but using parentheses will save confusion. Note that strings and dates are always specified with single quotes, since double quotes are reserved for a special SQL feature called delimited identifiers. We'll discuss delimited identifiers later. Much later, if you're lucky…  Conditions: IN, BETWEEN, LIKE  We can also do wildcard matching using LIKE. LIKE works similarly to =, except that it can accept wildcard characters. The character "%" matches a string of any length. The character "_" matches a single character. Here is an example of how to use LIKE:  SELECT  EMP_NO, LAST_NAME  FROM EMPLOYEE  WHERE  (LAST_NAME LIKE 'S%')  OR  (LAST_NAME LIKE '___')   This query will return one row in its result set for any employee whose name starts with "S" or whose name is three characters in length. (Hey, I didn't say it was a useful query.) Note that, depending upon the collation used, LIKE may be case-sensitive, and 'S' may not equal 's'.  Be careful when using LIKE since the database server won't always be able to optimize your query very well. This can be dangerous when selecting from a table with a lot of records in it. We'll cover basic query optimization later on.  BETWEEN is useful for selecting ranges of values. It is inclusive of the specified values:  SELECT  LAST_NAME  FROM EMPLOYEE  WHERE  HIRE_DATE BETWEEN '1/1/2001' AND '12/31/2001'   IN allows you to select records matching a specified set of values:  SELECT  LAST_NAME  FROM EMPLOYEE  WHERE  EMP_NO IN (20, 24, 28, 44)   IN can also be used with sub-selects as you will see.  Dealing with NULL  Please read the next paragraph very carefully:  NULL is not a value. It is a state representing no value.  A field in a table can have many different values. If it's an integer field, it can have about four billion values. But there are only two states: NULL and NOT NULL. NULL means that either no value has ever been specified for that field in that particular row, or the NULL state has been explicitly assigned to it.  NULL is not the same thing as zero, or an empty string. The SQL rules for dealing with NULL in comparisons and operations (addition, subtraction, and the like) are very simple: the result of any operator and NULL is always NULL. So NULL + 100 = NULL, a string concatenated with NULL is also NULL  In a WHERE clause, any comparison with NULL will always evaluate to FALSE. So the following query:  SELECT  EMP_NO, LAST_NAME  FROM EMPLOYEE  WHERE  (HIRE_DATE = NULL) /* Don't do this! */  …will never return any records, since nothing can ever equal NULL, not even NULL itself!  However, we sometimes want to return records where a given column is in the NULL state, so there is a special operator for this: IS  SELECT  EMP_NO, LAST_NAME  FROM EMPLOYEE  WHERE  (HIRE_DATE IS NULL)   Likewise, we might want to return the list of records where the HIRE_DATE column is not in the NULL state:  SELECT  EMP_NO, LAST_NAME  FROM EMPLOYEE  WHERE  (HIRE_DATE IS NOT NULL)   Dealing with Dates  There is often confusion about the correct format to use when expressing a date as a string literal. InterBase will accept a few different formats, but you should select one and use it consistently to avoid confusion when coding. The most common format is 'mm/dd/yyyy'. Other accepted formats include 'mm-dd-yyyy', 'dd.mm.yyyy' and 'yyyy.mm.dd'.  Dates must always be in single quotes. InterBase also accepts a few special quoted strings as the dates they imply, these are 'TODAY', 'YESTERDAY', 'TOMORROW'. Starting with version 6.0, the more standard keyword CURRENT_DATE should be used, you can specify tomorrow with CURRENT_DATE + 1.  Within Delphi/BCB, one should always use the provided AsDateTime methods available in database field objects in order to avoid depending on the field objects to convert from string values. Converting strings to dates depends on the settings of individual workstations (e.g. Windows settings).  Ordering result sets  SQL result sets are always unordered unless you specify otherwise. Put another way, you cannot expect the rows in the result set to come back in the same order even if you run the exact same query twice unless you specify that you'd like the result set ordered. The records might come back in storage order (the order on the disk), they might come back in random order — you just don't know.  So how do you tell the server that you'd like the records ordered? Simply specify which columns should be used to sort the records:  SELECT  EMP_NO, LAST_NAME  FROM EMPLOYEE  WHERE  (HIRE_DATE IS NOT NULL)  ORDER BY  LAST_NAME   This query will return the records in alphabetical order, based upon the employee's name. They'll be in ascending order (that is, A to Z), because that is the default and we did not specify descending order.  Note that two employees might have the same name. Since we didn't specify how to order two records with the same value in the LAST_NAME column, we will receive them in the result set in a random order — if there are two employees named "Smith" we simply cannot expect them to sort in any particular order unless we specify more fields in the ORDER BY clause:  SELECT  EMP_NO, LAST_NAME  FROM EMPLOYEE  WHERE  (HIRE_DATE IS NOT NULL)  ORDER BY  LAST_NAME, HIRE_DATE DESC   In this query, we're telling the server to first order the records by the LAST_NAME column (in ascending order, since there is no DESC next to name), and then order any group of records with the same name in descending order by the value in the HIRE_DATE column. HIRE_DATE is not one of the values we've selected in the result set, but that's OK; there's no requirement that a column be mentioned in the fields list in order to be used in the ORDER BY clause.  As of version 6.5, InterBase will always put records with a NULL state at the top of a list of sorted records, whether the list is ascending or descending. Prior versions sorted NULL to the bottom.  Parameterized queries  It is common in client applications to run very similar queries over and over again. A good example is a master-detail form. As we scroll through the result set representing the master table, the query for the detail result set will be run many times, once for each record.  Because this is so common, there is a special optimization for it supported by nearly every database server on the market, called a parameterized query.  When you type some SQL and send it to the server, there is a lot which has to happen in order to produce your result set. The server must parse your SQL into an internal structure it can understand. The server's optimizer must examine the indices on the table and determine if any of them can be used to run the query more quickly. This is called preparing a query. On the client application, the component sets you're using to build your application typically do some actions behind the scenes, such as interrogating the system table for field lengths and the like.  All of this takes time, and if you know ahead of time that you'll be running the same query over and over again, it's redundant after the first time. When you use a parameterized query, you are in effect telling the server that you'll be running more or less the same query several times, and changing only the values used for comparison in the WHERE clause.  For example, let's say we want a list of projects for a given employee. We'll use this query on a master detail form which allows the user to scroll through a list of employees and see the projects each employee is working on.The "master" query will be one of the queries above which returns EMP_NO as part of the result set. Now we need to write a detail query which shows projects for a given master record:  SELECT  PROJ_ID  FROM EMPLOYEE_PROJECT  WHERE  EMP_NO = :EMP_NO   The colon in this query means that the second reference to EMP_NO is not a field but is a parameter. The parameter, in this case, has the same name as the field EMP_NO, but that's not a requirement. We can now tell the server to prepare this query and then run it multiple times changing only the value of the parameter. It would be like running these two, separate queries:  SELECT  PROJ_ID  FROM EMPLOYEE_PROJECT  WHERE  EMP_NO = 20   SELECT  PROJ_ID  FROM EMPLOYEE_PROJECT  WHERE  EMP_NO = 21    …without the overhead of preparing two separate SQL statements.  You can specify any number of parameters in a query. Each time the query is executed, you can supply different values.  Parameters can also have a NULL state, but remember that if we set the EMP_NO parameter to NULL then this query would return no records since EMP_NO = NULL is false!  INSERT  In some ways, the discussion of SELECT was premature, since we can't SELECT result sets from the database until there is data to SELECT!  The INSERT verb is used to create a new row in a single table. To create a new row in the EMPLOYEE table, we could use the following statement:  INSERT INTO EMPLOYEE (  EMP_NO, LAST_NAME  ) VALUES (  123, 'Smith');   This statement, when run will result in the creation of a new record in the table with the value 123 in the EMP_NO column and the value "Smith" in the LAST_NAME column. These two columns will have the non-NULL state, but all other columns in the table will have the NULL state, unless the database administrator has created a DEFAULT value for the column. There is no requirement to specify every column in the table in an INSERT statement, but a column may have a NOT NULL constraint. If there is a NOT NULL constraint on the column and there is not a DEFAULT value for the column then you must specify a value for the column in your INSERT statement or the server will be unable to create the record and you'll get an error.  If you will be specifying a value for every column in the new row then it's permissible to omit the column list and just give the values, e.g.  INSERT INTO EMPLOYEE  VALUES (  123, 'John', 'Smith', '1234', '05/24/2002', 600, 'VP', '2', 'USA', 100000);   But it's crucial to specify the column values in the order they are defined. It is generally advisable to always specify the column list as it helps avoid problems.  INSERT statements do not return a result set. Only SELECT statements return a result set.  Copying data with INSERT … SELECT  It is sometimes necessary to INSERT many records into a table at once. For example, we might want to create a new project for every employee who was hired today. Instead of specifying the VALUES for the new row as constants, like in the example above, we can embed a SELECT statement into the INSERT statement, and one row will be created for each row in the result set of the SELECT statement:  INSERT INTO EMPLOYEE_PROJECT (  EMPLOYEE_PROJECT.PROJID,  EMPLOYEE_PROJECT.EMP_NO)  SELECT  'BORCON', EMPLOYEE.EMP_NO  FROM EMPLOYEE  WHERE  EMPLOYEE.HIRE_DATE = CURRENT_DATE   This is a somewhat complex statement, so let's look at it carefully.  The first line states that we'll be inserting rows into the EMPLOYEE_PROJECT table.  The second line specifies which fields we'll be specifying values for (later in the statement). It's not necessary to specify the table name in the fields list as I have done here, but I wanted to clearly distinguish the columns in the table we're inserting into from the columns coming from the table we're Selecting from, since some of them have the same names.  The rest of the statement tells InterBase that the values will be coming from a SELECT statement rather than a list of constants. For each row in the result set, one row will be created in EMPLOYEE_PROJECT. CURRENT_DATE is a reserved word (in InterBase 6 and later) which always returns the current date from the server's clock, so the SELECT portion of the statement will return one row for each employee who was hired today. There is only one item in the fields list of the SELECT portion of the statement which is actually a field in the EMPLOYEE table (EMP_NO). The other item is a constant. If we ran the SELECT by itself, the result set might look like this:  COLUMN_1   EMP_NO  1   21  1   22  So these are the values which will be assigned to the two rows which will be inserted into the EMPLOYEE_PROJECT table (presuming that there were two employees hired today).  Note on the Select clause of the Insert…Select statement:This is an Insert statement, not a Select statement. Only single table or view selects are allowed in the Select clause, Interbase will not currently allow joins.  UPDATE  The UPDATE verb is used to change the value of existing rows. Use of a WHERE clause is essential with UPDATE, because, by default, UPDATE changes every row in the table!  If we were going to pay everyone in the company the exact same salary, for example, we might run the following statement:  UPDATE EMPLOYEE  SET SALARY = 5000   Running a statement like this is much more efficient than iterating through the table and updating each record, one at a time, but for the most part we generally do want to change values in only one record or a number if specific records matching some criteria, so most UPDATE statements have WHERE clauses:  UPDATE EMPLOYEE  SET SALARY = 5000  WHERE  EMP_NO = 20   Bad news for employee 20, but the rest of us can breathe easy. It would probably not be a good idea to write an UPDATE statement like this:  UPDATE EMPLOYEE  SET SALARY = 5000  WHERE  FIRST_NAME = 'Bob'   …because if there were more than one Bob in the company then we'd be giving a lousy salary to all of them, not just the lazy one. In general, use the primary key or another unique key of the table when writing a WHERE clause designed to affect only one record.  It's common to write UPDATE statements which specify the value of every column in the table in the WHERE clause. Since the primary key will always uniquely identify a given row, why would anyone do this?  The answer is that this is way of protecting against multiuser conflicts (transactions are another way, but they do it differently). Let's imagine that a user, Emma, creates a new record. Later, another user, Peter, updates the record. Emma returns to her computer, but she hasn't refreshed her display so she doesn't see Peter's changes to the record. Emma decides to change the record. If only the primary key was specified in the WHERE clause of the UPDATE statement, then Emma would write over Peter's changes without realizing it. By specifying all field values in the WHERE clause, and not just the primary key value, the UPDATE statement will have no effect (i.e, it will not change any rows) if the record has been changed since Emma last looked at it. The client application can detect that the statement had no effect and let Emma know that the row has changed (or been deleted) since she last SELECTed it.  DELETE  DELETE looks just like UPDATE except, for obvious reasons, there is no list of fields:  DELETE  FROM EMPLOYEE  WHERE  EMP_NO = 20   Like UPDATE, you can omit the WHERE clause if you want to affect (in this case, clear) the entire table:  DELETE FROM EMPLOYEE   Moving beyond simple SELECTs  Subqueries  A subquery is a SELECT inside of another SQL statement and is used to select values  from another table to be used for qualifying or setting values in the outer SQL statement. Subqueries can also be used in other statements too but are most commonly used in Select statements:  SELECT  EMPLOYEE.EMP_NO, EMPLOYEE.LAST_NAME  FROM EMPLOYEE  WHERE  EMPLOYEE.EMP_NO IN (SELECT PROJECT.EMP_NO FROM PROJECT)   This query will return the list of employees who have at least one project. Again, it's not strictly necessary to use the table names in the fields list (e.g., EMPLOYEE.EMP_NO), but it helps to clarify where the fields are coming from since EMPLOYEE and EMPLOYEE_PROJECT both have a field called EMP_NO.  This query shows an example of using the IN operator with a subquery. We can't use the = comparison here, because the subquery returns many rows, and we can't use an equality comparison to compare a single value with a large number of rows. If we had tried to use = instead of IN, we'd receive the charming error message, "Multiple rows in singleton select." The = comparison could only be used if we were absolutely certain the subquery would return only one row.  Subqueries can also be used in UPDATE statements. Let's imagine you want to set the project start date on every row in the EMPLOYEE_PROJECT table equal to the HIRE_DATE for the corresponding employee in the EMPLOYEE table. The following statement would do the trick:  UPDATE EMPLOYEE_PROJECT  SET EMPLOYEE_PROJECT.START_DATE =  (SELECT  EMPLOYEE.HIRE_DATE  FROM EMPLOYEE  WHERE  EMPLOYEE.EMP_NO = EMPLOYEE_PROJECT.EMP_NO  )  (This query won't actually work since the EMPLOYEE_PROJECT doesn't have a field called START_DATE.)  This kind of statement works fairly well for tables which are not especially large. For very large tables, use a stored procedure to do the update (see the Optimization section for details). Attempting this on a large table, especially if more than one subquery must be used to set field values, will perform very poorly because the subqueries must be executed once for each record to be updated.  The following statement will delete any employees with no projects:  DELETE  FROM EMPLOYEE  WHERE  EMPLOYEE.EMP_NO NOT IN  (SELECT  EMPLOYEE_PROJECT.EMP_NO  FROM EMPLOYEE_PROJECT  )   JOINs  Everything we have seen thus far is useful, but JOINs are the real power of a relational database server. JOINs allow the developer to combine data from multiple tables in to a single result set. It is common when designing databases to use a lot of separate tables for various attributes of a single entity. For example, you might store records of an employee's salary, residence, etc., in separate tables rather than expanding the EMPLOYEE table. There a lot of advantages to doing this (the employee might have more than one residence, for example), but without being able to combine the information it would be very difficult to create a mailing list.  A JOIN is simply a way of telling the database server how to match rows from two different tables. You can then return fields from both tables in your result set. For example, let's imagine we want to return a result set with employee names and the names of the projects they're working on. We need to tell the database server to match EMPLOYEE_PROJECT records with records in the EMPLOYEE table. In particular, given an EMPLOYEE_PROJECT record, we need to find a record in the EMPLOYEE table with the same EMP_NO value.  The following query JOINs the two tables together to produce the desired result:  SELECT  EMPLOYEE.LAST_NAME, EMPLOYEE_PROJECT.PROJ_ID  FROM EMPLOYEE  INNER JOIN EMPLOYEE_PROJECT  ON EMPLOYEE_PROJECT.EMP_NO = EMPLOYEE.EMP_NO  ORDER BY  EMPLOYEE.LAST_NAME, EMPLOYEE_PROJ_ID  This query uses a particular type of JOIN called an INNER JOIN. INNER JOIN means that one or more records with a given EMP_NO must be present in both the EMPLOYEE_PROJECT and EMPLOYEE tables in order to produce a row in the result set. In other words, if there was a row in the EMPLOYEE table for employee #10 but there was no row in the EMPLOYEE_PROJECT table for employee #10 then there would be no row in the result set for employee #10.  If no JOIN type is specified in the query (if we write JOIN EMPLOYEE instead of INNER JOIN EMPLOYEE) then an INNER JOIN will be used. INNER JOIN is the default join type.  The second most common type of JOIN is a LEFT OUTER JOIN. This type of JOIN returns at least one row for each row in the "left" table, whether or not there is a corresponding row in the "right" table.  The terms "left" and "right" often seem confusing at first, but that's what the SQL Standard calls them. The terms are based on the fact that we (at least most of the western world) read from left to right, therefore just remember that left refers to the table mentioned first and right refers to the second table being joined to the first. In the example above, the EMPLOYEE table is the left table, and the EMPLOYEE_PROJECT table is the right table.  As previously mentioned, the query above won't return any rows in its result set for employees without projects. What if we wanted to see these employees anyway? Use a LEFT OUTER JOIN instead of an INNER JOIN:  SELECT  EMPLOYEE.LAST_NAME, EMPLOYEE_PROJECT.PROJ_ID  FROM EMPLOYEE  LEFT OUTER JOIN EMPLOYEE_PROJECT  ON EMPLOYEE_PROJECT.EMP_NO = EMPLOYEE.EMP_NO  ORDER BY  EMPLOYEE.LAST_NAME, EMPLOYEE_PROJECT.PROJ_ID   In this result set, the column EMPLOYEE_PROJECT.PROJ_ID will have a NULL state on rows for employees who don't have any projects. This might seem confusing since there are no records in the EMPLOYEE_PROJECT table with the NULL state in the PROJ_ID field, but it simply indicates that there is no matching record. In other words, if a column is NULL in the result set of a query resulting from a JOIN, one of two things is going on:  1. There was a matching row in the appropriate table, and the state of the corresponding column for that row was NULL, or 2. There was no matching row in the appropriate table.  In addition to INNER and LEFT OUTER joins, there are also RIGHT OUTER and FULL OUTER joins (OUTER is optional and can be omitted). A RIGHT join, as it implies, is opposite of a LEFT join - all records are selected from the table on the right, and only matching records are selected from the table on the left. A FULL join is very rarely ever desired, it will select all records from both tables whether or not there is a match in the other.  Using aliases for field and table names  As we get used to the idea of having multiple tables in a SELECT statement, specifying the table names can get to be a lot of typing. SQL allows us to specify an alias for table names:  SELECT  E.LAST_NAME, EP.PROJ_ID  FROM EMPLOYEE AS E  LEFT OUTER JOIN EMPLOYEE_PROJECT AS EP  ON EP.EMP_NO = E.EMP_NO  ORDER BY  E.LAST_NAME, EP.NAME   The the alias for a table is defined by specifying it following the table name in the FROM clause. SQL allows you to use the alias before it's defined.  Fields can also be given aliases. As with table aliases, they are defined directly following the column name in the field list:  SELECT  E.LAST_NAME AS SURNAME, EP.PROJ_ID AS PROJECT  FROM EMPLOYEE E  LEFT OUTER JOIN EMPLOYEE_PROJECT EP  ON EP.EMP_NO = E.EMP_NO  ORDER BY  E.LAST_NAME, EP.NAME   The "AS" operator is optional and can be omitted in Interbase. Field aliases can only be used for specifying the name to be returned in the result set, a field alias name cannot be used to reference the field elsewhere in the query (such as in an Order By clause).  Aggregate Functions  The MAX, MIN, COUNT, SUM, and AVG (average) functions do exactly what their names imply. They are called "aggregate functions" because they work on the entire result set at once instead of a single row.  COUNT deserves special mention because it works in two different ways. COUNT(*) will count the number of rows in the table, after the WHERE clause is applied, JOINs are performed, etc. COUNT(FIELD_NAME) counts the number of non-NULL values in a particular column. COUNT(DISTINCT FIELD_NAME), of course, counts the number of distinct values there are in a particular column. For example, if you had a table with four rows in it, containing the following data:  ID   SOME_VALUE  1   2   1  3   2  4   2  Then the following query:  SELECT  COUNT(*), COUNT(SOME_VALUE), COUNT(DISTINCT SOME_VALUE), MAX(ID)   Would return this result set:  COUNT   COUNT_2   COUNT_3   MAX  4   3   2   4  Grouping  Since aggregate functions operate on all rows of the table at once and produce a single row as a result set, they can't be combined with "normal" selection of fields without grouping the results somehow. In other words, you can't SELECT employee names and the count of employees in the same statement, because the employee names selection produces many rows and the count of employees produces only a single row.  You might, however, want to know how many employees have the same name. The GROUP BY clause allows you to tell the aggregate function that it should run once for each distinct value of a certain field or group of fields in the table.  SELECT  LAST_NAME, COUNT(LAST_NAME)  FROM EMPLOYEE  GROUP BY  LAST_NAME  ORDER BY  LAST_NAME   The GROUP BY clause must contain all columns mentioned in the fields list except for the aggregat functions. So in this example, LAST_NAME must be in the Group By clause.  This query tells us what we want — for each name, how many people share the name. But the value for most names will be "1" and these ones would likely be uninteresting to the user of this query. So we need a way to eliminate the rows with unique names.  HAVING  The Having clause qualifies the Group By clause. After the Group By has done its work, any conditions specified in the Having clause are applied. So we can improve our query as follows:  SELECT  LAST_NAME,  COUNT(LAST_NAME)  FROM EMPLOYEE  GROUP BY  LAST_NAME  HAVING  COUNT(LAST_NAME) &amp;gt; 1&lt;br /&gt;&lt;br /&gt;ORDER BY&lt;br /&gt;&lt;br /&gt;LAST_NAME&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now we'll only see Last Names where at least two people share that name. This is accomplished by repeating the Count aggregate funtion on Last_Name.&lt;br /&gt;&lt;br /&gt;DISTINCT&lt;br /&gt;&lt;br /&gt;Distinct allows you to select unique values, or combinations of values, when there are duplicates. For example, you may want to see all the different cities your customers are from. If you execute the following:&lt;br /&gt;&lt;br /&gt;SELECT&lt;br /&gt;&lt;br /&gt;CITY&lt;br /&gt;&lt;br /&gt;FROM CUSTOMER&lt;br /&gt;&lt;br /&gt;ORDER BY&lt;br /&gt;&lt;br /&gt;CITY&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You will indeed see all the different cities, but each city will be repeated as many times as there are customers from that city. What is really wanted is each unique city:&lt;br /&gt;&lt;br /&gt;SELECT DISTINCT&lt;br /&gt;&lt;br /&gt;CITY&lt;br /&gt;&lt;br /&gt;FROM CUSTOMER&lt;br /&gt;&lt;br /&gt;ORDER BY&lt;br /&gt;&lt;br /&gt;CITY&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Cities are not necessarily unique across different provinces or states, so if your customers are international then the above won't be good enough. Distinct works on multiple columns:&lt;br /&gt;&lt;br /&gt;SELECT DISTINCT&lt;br /&gt;&lt;br /&gt;CITY, STATE_PROVINCE, COUNTRY&lt;br /&gt;&lt;br /&gt;FROM CUSTOMER&lt;br /&gt;&lt;br /&gt;ORDER BY&lt;br /&gt;&lt;br /&gt;CITY, STATE_PROVINCE, COUNTRY&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Note the Order By is not required to include the same columns (or be present at all) but it is very common to do so.&lt;br /&gt;&lt;br /&gt;CAST, EXTRACT, and other functions&lt;br /&gt;&lt;br /&gt;Cast allows you to coerce one datatype into another. The conversion being asked for must make sense or Interbase will raise an exception. All the valid conversions can be found in the Interbase documentation. A simple example will give the idea:&lt;br /&gt;&lt;br /&gt;SELECT&lt;br /&gt;&lt;br /&gt;CAST(QTY_ORDERED AS FLOAT) / 0.35&lt;br /&gt;&lt;br /&gt;FROM SALES&lt;br /&gt;&lt;br /&gt;Cast is not needed very often as Interbase will generally perform an implicit conversion for you. The above statement would give the same results without the cast.&lt;br /&gt;&lt;br /&gt;Extract is available starting with Version 6.0. Extract allows parts if date and time fields to be extracted, for example:&lt;br /&gt;&lt;br /&gt;SELECT&lt;br /&gt;&lt;br /&gt;LAST_NAME, FIRST_NAME, EXTRACT(YEAR FROM HIRE_DATE)&lt;br /&gt;&lt;br /&gt;FROM EMPLOYEE&lt;br /&gt;&lt;br /&gt;The parts that can be extracted are: YEAR, MONTH, DAY, WEEKDAY, HOUR, MINUTE, and SECOND.&lt;br /&gt;&lt;br /&gt;ALL, ANY, SOME, EXISTS, SINGULAR&lt;br /&gt;&lt;br /&gt;These operators are used with sub-queries. Earlier you learned about the IN operator which lets you test whether a selected value exists within a set of specified or sub-selected values - it tests for equality.&lt;br /&gt;&lt;br /&gt;ALL allows you to perform comparisons other than equality. For example, if you want to find those employees with a salary greater than the salary of all employees in your department, you might try:&lt;br /&gt;&lt;br /&gt;SELECT&lt;br /&gt;&lt;br /&gt;LAST_NAME, SALARY&lt;br /&gt;&lt;br /&gt;FROM EMPLOYEE&lt;br /&gt;&lt;br /&gt;WHERE&lt;br /&gt;&lt;br /&gt;SALARY &amp;gt;ALL&lt;br /&gt;&lt;br /&gt;(SELECT&lt;br /&gt;&lt;br /&gt;SALARY&lt;br /&gt;&lt;br /&gt;FROM EMPLOYEE&lt;br /&gt;&lt;br /&gt;WHERE&lt;br /&gt;&lt;br /&gt;DEPT_NO = 623&lt;br /&gt;&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;ANY and SOME are synonyms, use whichever you like. To find employees in your department with salaries less than the lowest in any other department, you could find them with:&lt;br /&gt;&lt;br /&gt;SELECT&lt;br /&gt;&lt;br /&gt;LAST_NAME, SALARY&lt;br /&gt;&lt;br /&gt;FROM EMPLOYEE&lt;br /&gt;&lt;br /&gt;WHERE&lt;br /&gt;&lt;br /&gt;SALARY &amp;lt; ANY  (SELECT  SALARY  FROM EMPLOYEE  WHERE  DEPT_NO &amp;lt;&amp;gt;  623&lt;br /&gt;&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;EXISTS is very valuable. Use it anywhere you need to know something exists but do not need to know the count.&lt;br /&gt;&lt;br /&gt;If you want to see a list of Projects where no employees are currently assigned you could do this:&lt;br /&gt;&lt;br /&gt;SELECT&lt;br /&gt;&lt;br /&gt;PROJ_ID, PROJ_NAME&lt;br /&gt;&lt;br /&gt;FROM PROJECT P&lt;br /&gt;&lt;br /&gt;WHERE&lt;br /&gt;&lt;br /&gt;NOT EXISTS&lt;br /&gt;&lt;br /&gt;(SELECT&lt;br /&gt;&lt;br /&gt;EMP_NO&lt;br /&gt;&lt;br /&gt;FROM EMPLOYEE_PROJECT EP&lt;br /&gt;&lt;br /&gt;WHERE&lt;br /&gt;&lt;br /&gt;EP.PROJ_ID = P.PROJ_ID&lt;br /&gt;&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SINGULAR returns true if exactly one row from the sub-select matches your test. The following will return projects where there is exactly one employee assigned.&lt;br /&gt;&lt;br /&gt;SELECT&lt;br /&gt;&lt;br /&gt;PROJ_ID, PROJ_NAME&lt;br /&gt;&lt;br /&gt;FROM PROJECT P&lt;br /&gt;&lt;br /&gt;WHERE&lt;br /&gt;&lt;br /&gt;SINGULAR&lt;br /&gt;&lt;br /&gt;(SELECT&lt;br /&gt;&lt;br /&gt;EMP_NO&lt;br /&gt;&lt;br /&gt;FROM EMPLOYEE_PROJECT EP&lt;br /&gt;&lt;br /&gt;WHERE&lt;br /&gt;&lt;br /&gt;EP.PROJ_ID = P.PROJ_ID&lt;br /&gt;&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;InterBase-specific SQL&lt;br /&gt;&lt;br /&gt;STARTING WITH&lt;br /&gt;&lt;br /&gt;Use this instead of LIKE wherever possible. This is most important for parameterized queries as a parameterized LIKE cannot use an index while STARTING WITH can.&lt;br /&gt;&lt;br /&gt;CONTAINING&lt;br /&gt;&lt;br /&gt;CONTAINING is similar to using LIKE with wildcards on both sides, e.g. LIKE '%BASE%'. However CONTAINING is case-insensitive and can also be used to search within text blob columns.&lt;br /&gt;&lt;br /&gt;ROWS&lt;br /&gt;&lt;br /&gt;Rows is a new feature starting with version 6.5. Rows is very flexible and provides a great deal of power. At its simplest, it less you select the n rows from a query.&lt;br /&gt;&lt;br /&gt;SELECT&lt;br /&gt;&lt;br /&gt;LAST_NAME,&lt;br /&gt;&lt;br /&gt;FIRST_NAME, SALARY&lt;br /&gt;&lt;br /&gt;FROM EMPLOYEE&lt;br /&gt;&lt;br /&gt;ORDER BY&lt;br /&gt;&lt;br /&gt;SALARY DESC, LAST_NAME,FIRST_NAME&lt;br /&gt;&lt;br /&gt;ROWS 1 TO 10&lt;br /&gt;&lt;br /&gt;This query returns only the first 10 records of the result set (You can also specify just ROWS 10). Strictly speaking, Rows can be used without the Order By, but this woud be of little value. In this example, the 10 employees with the highest salaries will be returned. It's possible you may want all the employees with the 10 highest salaries (more than one employee may have the same salary), in this case you can use the WITH TIES option:&lt;br /&gt;&lt;br /&gt;SELECT&lt;br /&gt;&lt;br /&gt;LAST_NAME,&lt;br /&gt;&lt;br /&gt;FIRST_NAME, SALARY&lt;br /&gt;&lt;br /&gt;FROM EMPLOYEE&lt;br /&gt;&lt;br /&gt;ORDER BY&lt;br /&gt;&lt;br /&gt;SALARY DESC, LAST_NAME,FIRST_NAME&lt;br /&gt;&lt;br /&gt;ROWS 1 TO 10 WITH TIES&lt;br /&gt;&lt;br /&gt;So if there were 17 employees sharing the top 10 salaries, all 17 would be returned.&lt;br /&gt;&lt;br /&gt;Rows can also be specified as a percent:&lt;br /&gt;&lt;br /&gt;SELECT&lt;br /&gt;&lt;br /&gt;LAST_NAME,&lt;br /&gt;&lt;br /&gt;FIRST_NAME, SALARY&lt;br /&gt;&lt;br /&gt;FROM EMPLOYEE&lt;br /&gt;&lt;br /&gt;ORDER BY&lt;br /&gt;&lt;br /&gt;SALARY DESC, LAST_NAME,FIRST_NAME&lt;br /&gt;&lt;br /&gt;ROWS 10 PERCENT&lt;br /&gt;&lt;br /&gt;Finally, Rows can be used for sampling. The following example returns every 20th record from the result set up to a maximum of 100 records:&lt;br /&gt;&lt;br /&gt;SELECT&lt;br /&gt;&lt;br /&gt;LAST_NAME,&lt;br /&gt;&lt;br /&gt;FIRST_NAME, SALARY&lt;br /&gt;&lt;br /&gt;FROM EMPLOYEE&lt;br /&gt;&lt;br /&gt;ORDER BY&lt;br /&gt;&lt;br /&gt;SALARY DESC, LAST_NAME,FIRST_NAME&lt;br /&gt;&lt;br /&gt;ROWS 100 BY 20&lt;br /&gt;&lt;br /&gt;Probably one of the most sought after uses of this feature is to allow for very efficient paging of result sets as commonly seen on many web sites; some number of records, typically 10, are displayed with Next and Previous buttons. Rows allows you to return any slice of a result set&lt;br /&gt;&lt;br /&gt;The Rows feature can also be used in Update and Delete statements. Normally, the Order By clause is only valid in a Select statement. However, it becomes valid for other statements as long as it is used along with the Rows feature (otherwise using rows in these statements would be of little value). For example, the following gives a raise to the top 10 salaried employees hired before 2002:&lt;br /&gt;&lt;br /&gt;UPDATE EMPLOYEE&lt;br /&gt;&lt;br /&gt;SET&lt;br /&gt;&lt;br /&gt;SALARY = SALARY * 1.10&lt;br /&gt;&lt;br /&gt;WHERE&lt;br /&gt;&lt;br /&gt;EXTRACT(YEAR FROM HIRE_DATE) &amp;lt; 2002  ORDER BY  SALARY DESC  ROWS 10  The following deletes the 10 employees with the newest hire date:  DELETE FROM EMPLOYEE  ORDER BY  HIRE_DATE DESC  ROWS 10   RDB$DATABASE  This is a system table that is guaranteed to only have a single record in it. This makes a few special queries possible such as:  Asking Interbase to return the current date and time from the server  SELECT  CURRENT_TIMESTAMP  FROM RDB$DATABASE /* 6.0+ */  SELECT  CAST('TODAY' AS DATE)  FROM RDB$DATABASE /* 5.6- */  Asking Interbase to return the currently logged-in user  SELECT  USER  FROM RDB$DATABASE   There are other situations where such a table is needed, for example to simply test for the existence of a specific record - the EXISTS function can only be used with a sub-query:  SELECT  1  FROM RDB$DATABASE  WHERE EXISTS (  SELECT *  FROM  EMPLOYEE_PROJECT  WHERE  EP.PROJ_ID = 123  )   Generators  Generators are a way to create unique values in a multi-user database. In a single-user database it is acceptable to do things such as manually incrementing a value from a "key" table, or adding one to the highest current value in a table, but these schemes will not do in a multi-user environment. Most RDBMS products offer something similar, MS SQL has Identity fields and Oracle has Sequences. The standard way to use a generator from in a query is like this:  SELECT  GEN_ID(GEN_CUSTOMER, 1)  FROM RDB$DATABASE   Generators can also be used in insert and update statements. It is also common to see them as part of insert triggers.     Taken from : http://blogs.teamb.com/craigstuntz/dtpostname/ibsqlintro/ &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-555714317670063228?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/555714317670063228/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=555714317670063228&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/555714317670063228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/555714317670063228'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2010/03/introduction-to-interbase-sql.html' title='Introduction to InterBase SQL'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-2757638112941392296</id><published>2010-03-04T08:15:00.002+07:00</published><updated>2011-03-18T12:46:48.598+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips Dan Trick'/><title type='text'>FreeVCS Menu Disappears On Delphi 7. How to Fix It?</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Obviously Borland introduced no serious changes in the VCS interface, therefore the current FreeVCS IDE version seems to work without problems.&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Obviously Borland introduced no serious changes in the VCS interface, therefore the current FreeVCS IDE version seems to work without problems.&lt;br /&gt;&lt;br /&gt;Of course the actual setup program offers no option to set registry keys for the D6/D7 IDE but you can simply create the related entry by yourself:&lt;br /&gt;&lt;br /&gt;-&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Create a new reg key "HKCU\Software\Borland\Delphi\6.0(or 7.0)\Version Control".&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(Remember the space between 'Version' and 'Control')&lt;br /&gt;&lt;br /&gt;-&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Create a new string value named "VCSManager".&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;(No space between 'VCS' and 'Manager')&lt;br /&gt;&lt;br /&gt;-&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Enter full path and name of the FreeVCS DLL. (Example : c:&lt;br /&gt;C:\Program Files\FreeVCS\freevcs.dll)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Restart the D6/D7 IDE and the FreeVCS Menu should be there...&lt;br /&gt;&lt;br /&gt;There is only one known problem related to D6/D7 for now:&lt;br /&gt;&lt;br /&gt;On some installations you may see the error message "FreeVCS cannot save the file &lt;config\.bkp&gt;...." when starting.&lt;br /&gt;There is no further problem caused by this message, so you can simply ignore it.&lt;br /&gt;If you find this annoying, you can get rid of the message by creating a "Config" directory in your Delphi startup directory, i.e. for a default installation of Delphi 6, creating "C:\Program Files\Borland\Delphi6\Projects\Config" stops the startup error.&lt;br /&gt;&lt;br /&gt;You may also use Client beta 2.2.1.90, where this error should be fixed.&lt;br /&gt;&lt;/config\.bkp&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-2757638112941392296?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/2757638112941392296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=2757638112941392296&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/2757638112941392296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/2757638112941392296'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2010/03/freevcs-menu-disappears-on-delphi-7-how.html' title='FreeVCS Menu Disappears On Delphi 7. How to Fix It?'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-8805651532067122101</id><published>2009-03-25T06:20:00.001+07:00</published><updated>2011-03-18T12:59:46.882+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips Dan Trick'/><title type='text'>Menghitung Lama Procedure/Function Dieksekusi</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Untuk Mengetahui berapa lama waktu yang dibutuhkan untuk mengeksekusi suatu &lt;br /&gt;procedure bisa kita gunakan function GetTickCount. Apa fungsi GetTickCuunt? &lt;br /&gt;Baca sendiri helpnya ya, ini sudah saya copy-kan  :&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Untuk Mengetahui berapa lama waktu yang dibutuhkan untuk mengeksekusi suatu &lt;br /&gt;procedure bisa kita gunakan function GetTickCount. Apa fungsi GetTickCuunt? &lt;br /&gt;Baca sendiri helpnya ya, ini sudah saya copy-kan  :&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Retrieves the number of milliseconds that have elapsed since the system was started, up to 49.7 days.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Bagaimana cara menggunakannya?&lt;br /&gt;Simple saja, yang harus kita lakukan hanya mencatat return value dari function GetTickCount sesaat sebalum procedure dieksekusi dan sesudahnya. Kemudian kita selisihkan hasilnya. Oya jangan lupa, hasil selisihnya adalah dalam satuan milliseconds , jika kita mengehendaki hailnya dalam satuan detik tinggal kita bagi dengan 1000.&lt;br /&gt;&lt;br /&gt;Lebih jelasnya silahkan algoritma berikut ini&lt;br /&gt;&lt;br /&gt;iAwal  := GetTickCount;&lt;br /&gt;Eksekusi Procedure;&lt;br /&gt;iAkhir := GetTickCount;&lt;br /&gt;iSelisih := iAkhir - iAwal;&lt;br /&gt;dWaktu := iSelisih / 1000;&lt;br /&gt;&lt;br /&gt;OK, selamat mencoba !&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-8805651532067122101?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/8805651532067122101/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=8805651532067122101&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/8805651532067122101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/8805651532067122101'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2009/03/menghitung-lama-procedurefunction.html' title='Menghitung Lama Procedure/Function Dieksekusi'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-5050151149151392562</id><published>2009-03-20T16:32:00.001+07:00</published><updated>2011-03-18T13:00:15.426+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OOP'/><title type='text'>Berkenalan Dengan OOP</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;OOP Kependekan dari Object Oriented Programming merupakan paradigma pemrograman yang berorientasikan kepada objek. Semua data dan fungsi di dalam paradigma ini dibungkus dalam kelas-kelas atau objek-objek. Bandingkan dengan logika pemrograman terstruktur. Setiap objek dapat menerima pesan, memproses data, dan mengirim pesan ke objek lainnya.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;OOP Kependekan dari Object Oriented Programming merupakan paradigma pemrograman yang berorientasikan kepada objek. Semua data dan fungsi di dalam paradigma ini dibungkus dalam kelas-kelas atau objek-objek. Bandingkan dengan logika pemrograman terstruktur. Setiap objek dapat menerima pesan, memproses data, dan mengirim pesan ke objek lainnya.&lt;br /&gt;&lt;br /&gt;Sebagai langkah awal untuk mempelajari OOP,berikut istilah - istilah yang akan banyak kita jumpai dalam belajar OOP&lt;br /&gt;&lt;br /&gt;* Kelas &lt;br /&gt;Kumpulan atas definisi data dan fungsi-fungsi dalam suatu unit untuk suatu tujuan tertentu. Sebagai contoh 'class of dog' adalah suatu unit yang terdiri atas definisi-definisi data dan fungsi-fungsi yang menunjuk pada berbagai macam perilaku/turunan dari anjing. Sebuah class adalah dasar dari modularitas dan struktur dalam pemrograman berorientasi object. Sebuah class secara tipikal sebaiknya dapat dikenali oleh seorang non-programmer sekalipun terkait dengan domain permasalahan yang ada, dan kode yang terdapat dalam sebuah class sebaiknya (relatif) bersifat mandiri dan independen (sebagaimana kode tersebut digunakan jika tidak menggunakan OOP). Dengan modularitas, struktur dari sebuah program akan terkait dengan aspek-aspek dalam masalah yang akan diselesaikan melalui program tersebut. Cara seperti ini akan menyederhanakan pemetaan dari masalah ke sebuah program ataupun sebaliknya.&lt;br /&gt;&lt;br /&gt;* Objek&lt;br /&gt;Membungkus data dan fungsi bersama menjadi suatu unit dalam sebuah program komputer; objek merupakan dasar dari modularitas dan struktur dalam sebuah program komputer berorientasi objek.&lt;br /&gt;&lt;br /&gt;* Abstraksi&lt;br /&gt;Kemampuan sebuah program untuk melewati aspek informasi yang diproses olehnya, yaitu kemampuan untuk memfokus pada inti. Setiap objek dalam sistem melayani sebagai model dari "pelaku" abstrak yang dapat melakukan kerja, laporan dan perubahan keadaannya, dan berkomunikasi dengan objek lainnya dalam sistem, tanpa mengungkapkan bagaimana kelebihan ini diterapkan. Proses, fungsi atau metode dapat juga dibuat abstrak, dan beberapa teknik digunakan untuk mengembangkan sebuah pengabstrakan.&lt;br /&gt;&lt;br /&gt;* Enkapsulasi&lt;br /&gt;Memastikan pengguna sebuah objek tidak dapat mengganti keadaan dalam dari sebuah objek dengan cara yang tidak layak; hanya metode dalam objek tersebut yang diberi ijin untuk mengakses keadaannya. Setiap objek mengakses interface yang menyebutkan bagaimana objek lainnya dapat berinteraksi dengannya. Objek lainnya tidak akan mengetahui dan tergantung kepada representasi dalam objek tersebut.&lt;br /&gt;&lt;br /&gt;* Polimorfisme &lt;br /&gt;Melalui pengiriman pesan. Tidak bergantung kepada pemanggilan subrutin, bahasa orientasi objek dapat mengirim pesan; metode tertentu yang berhubungan dengan sebuah pengiriman pesan tergantung kepada objek tertentu di mana pesa tersebut dikirim. Contohnya, bila sebuah burung menerima pesan "gerak cepat", dia akan menggerakan sayapnya dan terbang. Bila seekor singa menerima pesan yang sama, dia akan menggerakkan kakinya dan berlari. Keduanya menjawab sebuah pesan yang sama, namun yang sesuai dengan kemampuan hewan tersebut. Ini disebut polimorfisme karena sebuah variabel tungal dalam program dapat memegang berbagai jenis objek yang berbeda selagi program berjalan, dan teks program yang sama dapat memanggil beberapa metode yang berbeda di saat yang berbeda dalam pemanggilan yang sama. Hal ini berlawanan dengan bahasa fungsional yang mencapai polimorfisme melalui penggunaan fungsi kelas-pertama.&lt;br /&gt;&lt;br /&gt;* Inheritas&lt;br /&gt;Mengatur polimorfisme dan enkapsulasi dengan mengijinkan objek didefinisikan dan diciptakan dengan jenis khusus dari objek yang sudah ada - objek-objek ini dapat membagi (dan memperluas) perilaku mereka tanpaa harus mengimplementasi ulang perilaku tersebut (bahasa berbasis-objek tidak selalu memiliki inheritas.)&lt;br /&gt;&lt;br /&gt;Istilah-istilah di atas adalah dasar-dasar OOP yang harus kita kuasai. Selanjutnya, simak artikel-artikel berikutnya untuk lebih mendalami OOP. Happy Reading n Studying&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-5050151149151392562?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/5050151149151392562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=5050151149151392562&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/5050151149151392562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/5050151149151392562'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2009/03/berkenalan-dengan-oop.html' title='Berkenalan Dengan OOP'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-5593428248174119481</id><published>2009-03-19T17:31:00.001+07:00</published><updated>2011-03-18T13:00:44.556+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips Dan Trick'/><title type='text'>Merubah Enter Menjadi Tab</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Kadang, user menginginkan ketika dia klik ENTER maka kursor akan berpindah ke componet berikutnya. Ada beberapa cara, antar lain memakai coponent EnterAsTab (Silahkan Googling).&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;&lt;br /&gt;Kadang, user menginginkan ketika dia klik ENTER maka kursor akan berpindah ke componet berikutnya. Ada beberapa cara, antar lain memakai coponent EnterAsTab (Silahkan Googling).&lt;br /&gt;&lt;br /&gt;Jika kita tidak bisa menemukan component tersebut, kita bisa akali sebagai berikut :&lt;br /&gt;Di method FormKeyDown tuliskan Script Berikut&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;if Key = VK_RETURN then&lt;br /&gt;begin&lt;br /&gt;SelectNext(ActiveControl,True,True);&lt;br /&gt;end; &lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Jangan lupa untuk mengeset properties KeyPreview dari form menjadi TRUE.&lt;br /&gt;Sebenarnya untuk component StringGrid ketika Enter harus pindah ke cell berkutnya, script di atas belum bisa , ada yang bisa menambahkan ? :)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Selamat Mencoba&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-5593428248174119481?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/5593428248174119481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=5593428248174119481&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/5593428248174119481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/5593428248174119481'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2009/03/merubah-enter-menjadi-tab.html' title='Merubah Enter Menjadi Tab'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-4908983685736840084</id><published>2009-03-19T17:25:00.001+07:00</published><updated>2011-03-18T13:01:19.223+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips Dan Trick'/><title type='text'>Membuat Form Yang Seragam</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Kadang, kita dituntut untuk membuat aplikasi yang semua formnya mempunya component yang sama.&lt;br /&gt;Hal ini akan sangat melelahkann jika kita harus menempatkan semua component tersebut di tiap-tiap form.&lt;br /&gt;&lt;br /&gt;&lt;span class="fullpost"&gt;&lt;br /&gt;Kadang, kita dituntut untuk membuat aplikasi yang semua formnya mempunya component yang sama.&lt;br /&gt;Hal ini akan sangat melelahkann jika kita harus menempatkan semua component tersebut di tiap-tiap form.&lt;br /&gt;&lt;br /&gt;Dengan pemahaman OOP yang dasar saja, sebenarnya kita bisa mengakali kasus di atas, caranya dengan menerapkan konsep inheritance. Yang harus kita lakukan adalah : &lt;br /&gt;1. Buat Form Default (form ini nanti yang menjadi pola bagifrom2 lain)&lt;br /&gt;2. Klik Menu File &amp;gt; New &amp;gt; Other&lt;br /&gt;3. Pilih tab project kita&lt;br /&gt;4. Cari from default tadi, klik OK&lt;br /&gt;5. Simpan dengan nama lain.&lt;br /&gt;&lt;br /&gt;Nah, kita sudah medapatkan form baru yang sama persis dengan from default. Jika ad perubahan di form default, maka otomatis form turunannya akan ikut berubah.&lt;br /&gt;&lt;br /&gt;Selamat Mencoba&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-4908983685736840084?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://delphigurus.blogspot.com/feeds/4908983685736840084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5776980471135706903&amp;postID=4908983685736840084&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/4908983685736840084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/4908983685736840084'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2009/03/membuat-form-yang-seragam.html' title='Membuat Form Yang Seragam'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5776980471135706903.post-3377977876951481815</id><published>2009-03-19T12:52:00.001+07:00</published><updated>2011-03-18T13:01:50.567+07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lain-lain'/><title type='text'>About Delphi Gurus</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Blog ini saya maksudkan untuk menuliskan uneg-uneg saya berkenaan dengan pemrograman delphi. Di sini saya akan mencoba menulis pengalaman saya selama +/- lima tahun berkutat dengan delphi.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5776980471135706903-3377977876951481815?l=delphigurus.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/3377977876951481815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5776980471135706903/posts/default/3377977876951481815'/><link rel='alternate' type='text/html' href='http://delphigurus.blogspot.com/2009/03/about-delphi-gurus.html' title='About Delphi Gurus'/><author><name>Bagus Prasojo</name><uri>http://www.blogger.com/profile/02970788883226545715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>
