<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-7234833807225482669</atom:id><lastBuildDate>Thu, 01 Jan 2026 03:31:51 +0000</lastBuildDate><title>Dunia IT, Pemrograman, Tips dan Trik, Komputer, Database</title><description>Blog ini berisi tentang pengalaman ku sebagai seorang programmer yang berkelana di dunia pemrograman yang penuh dengan liku-liku kehidupan. Tidak hanya berisi tentang pemrograman tetapi juga seputar IT.</description><link>http://rudycs.blogspot.com/</link><managingEditor>noreply@blogger.com (rudycs)</managingEditor><generator>Blogger</generator><openSearch:totalResults>102</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7234833807225482669.post-736180563828581782</guid><pubDate>Fri, 10 Jul 2009 02:34:00 +0000</pubDate><atom:updated>2009-07-10T09:36:14.124+07:00</atom:updated><title>Mau Beli Laptop Tanpa Garansi Resmi?</title><description>Indonesia mempunyai pasar yang cukup besar untuk urusan laptop. Banyak produk berbagai macam merk yang di impor masuk ke Indonesia. Karena ada saudara yang minta saran tentang membeli laptop yang cocok, oleh sebab itu aku mulai mencari referensi sebanyak mungkin tentang laptop dan sebagainya. Bukan soal merk atau spesifikasi laptop yang menjadi alasan dari saudara yang meminta bantuan padaku, tapi masalah banyaknya laptop tanpa garansi resmi yang cukup banyak beredar di pasaran.&lt;span class=&quot;fullpost&quot;&gt;&lt;br /&gt;Ada istilah laptop BM (&lt;span style=&quot;font-style: italic;&quot;&gt;Black Market&lt;/span&gt;) yang berarti laptop tersebut di impor tanpa mengikuti aturan impor yang semestinya, seperti aturan perpajakan, bea masuk, dan lain-lain. Dengan demikian laptop BM bisa lebih murah daripada laptop yang memiliki garansi resmi. Ada lagi istilah PI (&lt;span style=&quot;font-style: italic;&quot;&gt;Parallel Import&lt;/span&gt;) yang berarti laptop tidak di impor oleh badan/toko/perorangan yang tidak ditunjuk sebagai agen atau distributor resmi untuk produk yang bersangkutan.&lt;br /&gt;Dengan demikian berarti laptop BM/PI pasti lebih murah dibanding laptop yang mempunyai garansi resmi. Dengan alasan ini pula yang membuat banyak pembeli tertarik untuk membeli laptop yang tanpa garansi resmi. Menguntungkan bagi pembeli dan juga penjual. Mengapa laptop BM.PI bisa lebih murah? Jelas karena tidak membayar pajak bea cukai. Selain itu pengimpor barang juga tidak perlu mendirikan jaringan service center yang luas, karena anggapan mereka kalau ada kerusakan, mereka perbaiki sendiri, atau kalau sulit diperbaiki, dikembalikan ke negara asalnya. Konsumen menunggu lama? Itulah resikonya kalau membeli barang tanpa garansi resmi.&lt;br /&gt;Ada lagi istilah laptop &lt;span style=&quot;font-style: italic;&quot;&gt;refurbished&lt;/span&gt;, artinya adalah produk yang tidak memenuhi standar kualitas pabrik atau cacat produksi yang terlanjur keluar dipasaran, kemudian dikembalikan ke pabrik. Oleh pabrik tersebut diperbaiki dan bahkan di bentuk ulang bila ada cacat fisiknya. Kemudian laptop tersebut dijual lagi di pasaran dengan harga murah. Di luar negeri, produk semacam ini akan dibeli label “Refurbished” dan dijual dengan harga diskon besar, bahkan bisa mencapai 30%. Di Amerika produk refurbished dibeli label jelas dan tidak boleh dijual sebagai barang yang baru, sekalipun kelihatan baru dan ada segel dari pabrik, karena laptop refurbished bisa ada goresan, kotoran, dan bentuk kerusakan fisik lain yang tidak mempengaruhi performa.&lt;br /&gt;Bagaimana membedakan laptop PI/BM/refurbished dan yang bergaransi resmi? Mudah saja, cek kartu garansinya. Tanyakan kartu garansinya ke penjual. Cek kartu garansinya, apakah dikeluarkan oleh distributor resmi atau tidak. Nomor telepon service centernya pasti tercantum disana, hubungi bila perlu. Beberapa produsen saat ini juga menyediakan registrasi serial number, registrasikan bila memang produsen menyediakan fasilitas tersebut.&lt;br /&gt;Laptop dengan garansi resmi akan diterima di service center di semua kota, bahkan di seluruh dunia. Ada pengalaman teman saya yang membeli laptop Toshiba di luar negeri, ternyata baterainya rusak, kemudian dibawa ke service center di Surabaya dan baterai diganti baru dengan hanya membayar biaya administrasi. Ada pengalaman orang lain yang membeli laptop Toshiba yang tanpa garansi resmi, ketika dia pindah ke kota lain, dan dibawa ke service center, disana dikatakan bahwa barang itu barang bekas! Dengan kenyataan ini dipikirkan dulu apa kita mau membeli laptop yang tanpa garansi resmi, atau kalau tetap mau nekat juga Anda sudah tahu resikonya.&lt;/span&gt;</description><link>http://rudycs.blogspot.com/2009/07/mau-beli-laptop-tanpa-garansi-resmi.html</link><author>noreply@blogger.com (rudycs)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7234833807225482669.post-7008722363290526834</guid><pubDate>Tue, 07 Jul 2009 02:40:00 +0000</pubDate><atom:updated>2009-07-07T09:44:00.632+07:00</atom:updated><title>Menjalankan File dan Menunggu Sampai Ditutup</title><description>Menggunakan fungsi ShellExecuteEx mempunyai keuntungan dibanding dengan fungsi ShellExecute. Jika kita menjalankan aplikasi eksternal dari aplikasi kita dan ingin menunggu sampai aplikasi yang dijalankan ditutup baru bisa kembali ke aplikasi kita, bisa dengan menggunakan fungsi ShellExecuteEx. Kuncinya terletak pada parameter fMask. Jika flag SEE_MASK_NOCLOSEPROCESS aktif, maka saat file dijalankan parameter hProcess akan berisi handle pada file tersebut.&lt;span class=&quot;fullpost&quot;&gt; Handle tersebut bisa digunakan untuk mengetahui apakah file yang dijalankan tersebut sudah ditutup. Supaya lebih jelas diberikan contoh program seperti dibawah ini.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;var&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp SEInfo: TShellExecuteInfo;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp ExitCode: DWORD;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp FillChar(SEInfo, SizeOf(SEInfo), 0);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp with SEInfo do&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp begin&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp cbSize := SizeOf(TShellExecuteInfo);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp fMask := SEE_MASK_NOCLOSEPROCESS;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp lpVerb := PChar(&#39;open&#39;);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp lpFile := PChar(&#39;notepad.exe&#39;);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp nShow := SW_SHOWNORMAL;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp end;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp if ShellExecuteEx(@SEInfo) then&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp begin&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp repeat&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp &amp;nbsp GetExitCodeProcess(SEInfo.hProcess, ExitCode);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp until ExitCode &lt;&gt; STILL_ACTIVE;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp end;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;end.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;</description><link>http://rudycs.blogspot.com/2009/07/menjalankan-file-dan-menunggu-sampai.html</link><author>noreply@blogger.com (rudycs)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7234833807225482669.post-6376160481189739809</guid><pubDate>Mon, 06 Jul 2009 05:52:00 +0000</pubDate><atom:updated>2009-07-06T13:10:28.606+07:00</atom:updated><title>Fungsi Windows API: ShellExecuteEx</title><description>Fungsi ShellExecuteEx mempunyai kegunaan yang mirip dengan fungsi ShellExecute yang disediakan Windows. Untuk menggunakan fungsi ini, tambahkan unit ShellAPI pada form yang bersangkutan. Fungsi ShellExecuteEx hanya mempunyai satu parameter yang berupa pointer ke suatu record dan mengembalikan nilai dengan tipe boolean, True jika sukses atau False jika gagal. Sintaknya bisa kita lihat dibawah ini.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;function ShellExecuteEx(lpExecInfo: PShellExecuteInfo): BOOL;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;fullpost&quot;&gt;&lt;br /&gt;Parameter pada fungsi diatas di deklarasikan sebagai berikut.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;type&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp PShellExecuteInfo = ^TShellExecuteInfo;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp TShellExecuteInfo = record&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp cbSize: DWORD;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp fMask: ULONG;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp Wnd: HWND;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp lpVerb: PWideChar;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp lpFile: PWideChar;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp lpParameters: PWideChar;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp lpDirectory: PWideChar;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp nShow: Integer;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp hInstApp: HINST;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp lpIDList: Pointer;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp lpClass: PWideChar;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp hkeyClass: HKEY;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp dwHotKey: DWORD;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp hIcon: THandle;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp hProcess: THandle;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp end;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Deskripsi dari parameter diatas adalah sebagai berikut.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;cbSize. Merupakan ukuran struktur dalam byte.&lt;/li&gt;&lt;li&gt;fMask. Flag yang menunjukkan isi dan validitas dari anggota struktur yang lain. Bisa merupakan kombinasi dari konstanta berikut.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;SEE_MASK_CLASSNAME&lt;/li&gt;&lt;li&gt;SEE_MASK_CLASSKEY&lt;/li&gt;&lt;li&gt;SEE_MASK_IDLIST&lt;/li&gt;&lt;li&gt;SEE_MASK_INVOKEIDLIST&lt;/li&gt;&lt;li&gt;SEE_MASK_ICON&lt;/li&gt;&lt;li&gt;SEE_MASK_HMONITOR.&lt;/li&gt;&lt;li&gt;SEE_MASK_HOTKEY&lt;/li&gt;&lt;li&gt;SEE_MASK_NOCLOSEPROCESS&lt;/li&gt;&lt;li&gt;SEE_MASK_CONNECTNETDRV&lt;/li&gt;&lt;li&gt;SEE_MASK_NOASYNC&lt;/li&gt;&lt;li&gt;SEE_MASK_FLAG_DDEWAIT&lt;/li&gt;&lt;li&gt;SEE_MASK_DOENVSUBST&lt;/li&gt;&lt;li&gt;SEE_MASK_FLAG_NO_UI&lt;/li&gt;&lt;li&gt;SEE_MASK_UNICODE&lt;/li&gt;&lt;li&gt;SEE_MASK_NO_CONSOLE&lt;/li&gt;&lt;li&gt;SEE_MASK_ASYNCOK&lt;/li&gt;&lt;li&gt;SEE_MASK_NOQUERYCLASSSTORE&lt;/li&gt;&lt;li&gt;SEE_MASK_HMONITOR&lt;/li&gt;&lt;li&gt;SEE_MASK_NOZONECHECKS&lt;/li&gt;&lt;li&gt;SEE_MASK_WAITFORINPUTIDLE&lt;/li&gt;&lt;li&gt;SEE_MASK_FLAG_LOG_USAGE&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Wnd. Sama dengan parameter hWnd para fungsi ShellExecute.&lt;/li&gt;&lt;li&gt;lpVerb. Sama dengan parameter Operation para fungsi ShellExecute.&lt;/li&gt;&lt;li&gt;lpFile. Sama dengan parameter FileName para fungsi ShellExecute.&lt;/li&gt;&lt;li&gt;lpParameters. Sama dengan parameter Parameters para fungsi ShellExecute.&lt;/li&gt;&lt;li&gt;lpDirectory. Sama dengan parameter Directory para fungsi ShellExecute.&lt;/li&gt;&lt;li&gt;nShow. Sama dengan parameter ShowCmd para fungsi ShellExecute.&lt;/li&gt;&lt;li&gt;hInstApp. Jika flag SEE_MASK_NOCLOSEPROCESS aktif dan fungsi sukses dijalankan, akan berisi nilai lebih dari 32. Jika gagal akan mengembalikan kode kesalahan.&lt;/li&gt;&lt;li&gt;lpIDList. Optional. Alamat absolut dari struktur ITEMIDLIST yang berisi daftar identifier yang unik bagi file yang di eksekusi. Parameter ini diabaikan jika flag SEE_MASK_IDLIST atau SEE_MASK_INVOKEIDLIST pada parameter fMask tidak aktif.&lt;/li&gt;&lt;li&gt;lpClass. Optional. Nama class dari file atau GUID. Parameter ini diabaikan jika flag SEE_MASK_CLASSNAME pada parameter fMask tidak aktif.&lt;/li&gt;&lt;li&gt;hkeyClass. Optional. Registry key untuk class file. Parameter ini diabaikan jika flag SEE_MASK_CLASSKEY pada parameter fMask tidak aktif.&lt;/li&gt;&lt;li&gt;dwHotKey. Optional. Shortcut pada keyboard yang di asosiasikan dengan aplikasi yang bersangkutan. Parameter ini diabaikan jika flag SEE_MASK_HOTKEY pada parameter fMask tidak aktif.&lt;/li&gt;&lt;li&gt;hIcon. Optional. Handle ke suatu icon untuk class file. Hanya digunakan untuk Windows XP dan sebelumnya, diabaikan untuk Windows Vista dan sesudahnya. Parameter ini diabaikan jika flag SEE_MASK_ICON pada parameter fMask tidak aktif.&lt;/li&gt;&lt;li&gt;hProcess. Berisi nilai kembali berupa handle untuk aplikasi yang dijalankan, jika flag SEE_MASK_NOCLOSEPROCESS pada parameter fMask aktif.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Contoh penggunaannya adalah sebagai berikut.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;var&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp SEInfo: TShellExecuteInfo;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp FillChar(SEInfo, SizeOf(SEInfo), 0);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp with SEInfo do&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp begin&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp cbSize := SizeOf(TShellExecuteInfo);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp lpVerb := PChar(&#39;open&#39;);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp lpFile := PChar(&#39;C:\Windows&#39;);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp nShow := SW_SHOWNORMAL;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp end;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp ShellExecuteEx(@SEInfo);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;end.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;</description><link>http://rudycs.blogspot.com/2009/07/fungsi-windows-api-shellexecuteex.html</link><author>noreply@blogger.com (rudycs)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7234833807225482669.post-5198085459757313327</guid><pubDate>Fri, 03 Jul 2009 02:42:00 +0000</pubDate><atom:updated>2009-07-03T09:56:50.709+07:00</atom:updated><title>Fungsi Windows API: ShellExecute</title><description>ShellExecute merupakan fungsi yang disediakan oleh Windows melalui file pustaka “shell32.dll”, dan sudah ada sejak Windows 9x. Kegunaan dari fungsi ini adalah untuk melakukan operasi terhadap suatu file atau direktori. Operasi yang dimaksud bisa bermacam-macam yang nanti akan dijelaskan. Dalam pengembangan aplikasi dengan Delphi fungsi ini juga bisa dipakai dengan menambahkan unit “ShellAPI” pada form yang mengakses fungsi tersebut. Sintaknya adalah sebagai berikut.&lt;span class=&quot;fullpost&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;function ShellExecute(hWnd: HWND; Operation, FileName, Parameters, Directory: PChar; ShowCmd: Integer): HINST;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Deskripsi dari parameter diatas adalah sebagai berikut.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;hWnd. Merupakan &lt;span style=&quot;font-style: italic;&quot;&gt;handle&lt;/span&gt; terhadap window yang untuk menampilkan &lt;span style=&quot;font-style: italic;&quot;&gt;user interface&lt;/span&gt; (UI) atau pesan kesalahan. Nilai bisa 0 yang berarti tidak berhubungan dengan suatu window.&lt;/li&gt;&lt;li&gt;Operation. Merupakan string yang menggambarkan operasi yang digunakan terhadap suatu file atau direktori. Operasi yang dimaksud bisa berupa:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;open. Membuka item yang ditentukan oleh parameter FileName. Bisa berupa file atau direktori. Item akan dibuka menggunakan aplikasi sesuai dengan ekstensi file yang di registrasikan.&lt;/li&gt;&lt;li&gt;edit. Menampilkan editor yang digunakan untuk membuka dan meng-edit file dokumen dari parameter FileName. Jika parameter yang diberikan bukan merupakan file dokumen, fungsi akan gagal dipanggil.&lt;/li&gt;&lt;li&gt;explore. Membuka direktori/folder yang diberikan oleh parameter FileName.&lt;/li&gt;&lt;li&gt;find. Membuka dialog pencarian pada direktori aktif atau pada direktori yang ditentukan oleh parameter FileName.&lt;/li&gt;&lt;li&gt;print. Mencetak file yang ditentukan oleh parameter FileName. Jika parameter yang diberikan bukan merupakan file dokumen, fungsi akan gagal dipanggil.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;FileName. Merupakan suatu obyek, bisa berupa file atau direktori, yang di eksekusi oleh operasi yang ditentukan oleh parameter Operation.&lt;/li&gt;&lt;li&gt;Parameters. Jika file yang ditentukan merupakan file aplikasi yang bisa dijalankan, isi dari parameter ini digunakan sebagai parameter untuk file aplikasi yang bersangkutan.&lt;/li&gt;&lt;li&gt;Directory. Merupakan direktori kerja default, jika tidak diisi merupakan direktori aktif.&lt;/li&gt;&lt;li&gt;ShowCmd. Flag yang menentukan bagaimana aplikasi ditampilkan waktu dibuka. Konstanta yang bisa dipakai:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;SW_HIDE&lt;/li&gt;&lt;li&gt;SW_MAXIMIZE&lt;/li&gt;&lt;li&gt;SW_MINIMIZE&lt;/li&gt;&lt;li&gt;SW_RESTORE&lt;/li&gt;&lt;li&gt;SW_SHOW&lt;/li&gt;&lt;li&gt;SW_SHOWDEFAULT&lt;/li&gt;&lt;li&gt;SW_SHOWMAXIMIZED&lt;/li&gt;&lt;li&gt;SW_SHOWMINIMIZED&lt;/li&gt;&lt;li&gt;SW_SHOWMINNOACTIVE&lt;/li&gt;&lt;li&gt;SW_SHOWNA&lt;/li&gt;&lt;li&gt;SW_SHOWNOACTIVATE&lt;/li&gt;&lt;li&gt;SW_SHOWNORMAL&lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;br /&gt;Jika fungsi berhasil dijalankan, akan mengembalikan nilai integer lebih besar dari 32. Jika gagal, akan mengembalikan kode kesalahan sebagai berikut:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;0&lt;/li&gt;&lt;li&gt;ERROR_FILE_NOT_FOUND&lt;/li&gt;&lt;li&gt;ERROR_PATH_NOT_FOUND&lt;/li&gt;&lt;li&gt;ERROR_BAD_FORMAT&lt;/li&gt;&lt;li&gt;SE_ERR_ACCESSDENIED&lt;/li&gt;&lt;li&gt;SE_ERR_ASSOCINCOMPLETE&lt;/li&gt;&lt;li&gt;SE_ERR_DDEBUSY&lt;/li&gt;&lt;li&gt;SE_ERR_DDEFAIL&lt;/li&gt;&lt;li&gt;SE_ERR_DDETIMEOUT&lt;/li&gt;&lt;li&gt;SE_ERR_DLLNOTFOUND&lt;/li&gt;&lt;li&gt;SE_ERR_FNF&lt;/li&gt;&lt;li&gt;SE_ERR_NOASSOC&lt;/li&gt;&lt;li&gt;SE_ERR_OOM&lt;/li&gt;&lt;li&gt;SE_ERR_PNF&lt;/li&gt;&lt;li&gt;SE_ERR_SHARE&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Contoh penggunaannya:&lt;br /&gt;Membuka aplikasi tertentu.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;ShellExecute(0, ‘open’, ‘notepad.exe’, nil, nil, SW_SHOWNORMAL);&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;Explore&lt;/span&gt; direktori/folder tertentu.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;ShellExecute(0, ‘explore’, ‘C:\Windows’, nil, nil, SW_SHOWNORMAL);&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;Edit file dokumen.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;ShellExecute(0, ‘edit’, ‘C:\textfile.txt’, nil, nil, SW_SHOWNORMAL);&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;Menampilkan dialog pencarian pada direktori tertentu.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;ShellExecute(0, ‘find’, ‘C:\Windows\system’, nil, nil, SW_SHOWNORMAL);&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;Mencetak file dokumen.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;ShellExecute(0, ‘print’, ‘C:\textfile.txt’, nil, nil, SW_SHOWNORMAL);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;</description><link>http://rudycs.blogspot.com/2009/07/fungsi-windows-api-shellexecute.html</link><author>noreply@blogger.com (rudycs)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7234833807225482669.post-3461580819868020506</guid><pubDate>Wed, 01 Jul 2009 03:04:00 +0000</pubDate><atom:updated>2009-07-01T10:07:17.787+07:00</atom:updated><title>Akses Internet Unlimited dengan Mobi</title><description>Operator telepon seluler berbasis CDMA Mobile-8 tampaknya tidak mau ketinggalan dengan operator lain dalam rangka akses internet unlimited, walaupun sebenarnya ketinggalan juga nih. Ini ditandai dengan diluncurkan produk Mobi. Berbeda dengan paket Mobi sebelumnya yang di &lt;span style=&quot;font-style: italic;&quot;&gt;bundling&lt;/span&gt; dengan modem, yang ini cuma kartu perdana saja. Dengan begini semakin banyak juga pilihan untuk akses internet yang terjangkau untuk semua rakyat, termasuk yang di pinggiran kota seperti saya ini.&lt;span class=&quot;fullpost&quot;&gt;&lt;br /&gt;Paket yang disediakan ada 4:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Rp. 50.000 (up to 125 Kbps) quota 500 MB setelah itu 64 Kbps&lt;/li&gt;&lt;li&gt;Rp. 100.000 (up to 1024 Kbps) quota 1.5 GB setelah itu 64 Kbps&lt;/li&gt;&lt;li&gt;Rp. 150.000 (up to 3.1 Mbps) quota 2.5 GB setelah itu 128 Kbps&lt;/li&gt;&lt;li&gt;Rp. 250.000 (up to top speed) quota 3.5 GB setelah itu 256 Kbps&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Tapi sayangnya dari 4 paket tersebut hanya 1 saja yang bisa dinikmati diluar area Jakarta dan sekitarnya saja. Tapi lumayan buat internetan dengan biaya murah, cuma Rp. 50.000 jadi. Selain itu hanya bisa dinikmati di area Jakarta dan sekitarnya karena jaringan EVDO yang bisa mencapai kecepatan maksimal sampai 3.1 Mbps. Bagi yang pernah coba bisa sharing pengalamannya.&lt;br /&gt;Pertama kali kita mesti beli kartu perdana Mobi dulu di counter Mobile-8, bisa ditebus dengan harga Rp. 75.000 (termasuk untuk akses internet unlimited bulan pertama), selanjutnya dengan melakukan isi ulang senilai Rp. 50.000 tiap bulan, katanya sih bisa akses internet unlimited. Selanjutnya adalah mendaftarkan kartu perdana tersebut seperti layaknya kartu perdana lain, ini bisa dibantu oleh operator yang melayani kita di counter Mobile-8. Langkah terakhir adalah dengan mengirimkan SMS ke 777, yang kemudian akan kita dapatkan kiriman balasan berupa username dan password yang digunakan untuk akses internet.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;REG&amp;lt;spasi&amp;gt;UNL50 (untuk paket Rp. 50.000)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;REG&amp;lt;spasi&amp;gt;UNL100 (untuk paket Rp. 100.000)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;REG&amp;lt;spasi&amp;gt;UNL150 (untuk paket Rp. 150.000)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;REG&amp;lt;spasi&amp;gt;UNL250 (untuk paket Rp. 250.000)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Informasi ini sudah sejak pertengahan Juni 2009 aku dapat, tapi baru bisa direalisasikan akhir Juni. Di website Mobile-8 sendiri belum terdapat informasi tentang akses unlimited ini, jadi cukup menyesatkan. Diluar itu akses internet cukup baik, jika dibanding dengan yang aku pakai sebelumnya dari Starone. Tidak bisa membandingkan dengan yang lain, karena pilihan yang sangat terbatas di tempatku. Selamat mencoba mumpung belum terlalu banyak yang tahu…&lt;/span&gt;</description><link>http://rudycs.blogspot.com/2009/07/akses-internet-unlimited-dengan-mobi.html</link><author>noreply@blogger.com (rudycs)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7234833807225482669.post-5794556726382934340</guid><pubDate>Tue, 30 Jun 2009 03:52:00 +0000</pubDate><atom:updated>2009-06-30T10:58:19.244+07:00</atom:updated><title>Mendapatkan Informasi File Aplikasi</title><description>File aplikasi yang mempunyai ekstensi seperti .exe atau .dll bisa memiliki informasi yang berkaitan dengan file tersebut. Misalnya versi dari file, perusahaan, keterangan, atau apa pun yang kita mau. Informasi tersebut akan menyatu dengan file aplikasi yang bersangkutan. Informasi ini bisa kita dapatkan dengan menampilkan properties dari file aplikasi itu. Jika file aplikasi tersebut memiliki informasi, maka bisa kita lihat pada tab Version dari &lt;span style=&quot;font-style: italic;&quot;&gt;properties&lt;/span&gt; file tersebut.&lt;span class=&quot;fullpost&quot;&gt;&lt;br /&gt;Menambahkan informasi pada file aplikasi bisa memiliki keuntungan. Misalnya bila kita mengembangkan sebuah aplikasi dan ada update dari file aplikasi untuk keperluan penambahan fitur atau perbaikan terhadap kesalahan/bug. Aplikasi yang dibuat bisa melakukan update otomatis ke suatu lokasi tertentu jika ditemukan file aplikasi yang sama dengan versi yang lebih baru.&lt;br /&gt;Delphi juga menyediakan sarana untuk menambahkan informasi pada aplikasi yang kita buat. Pada menu Project-&amp;gt;Options, terdapat pilihan “Include version information in project” yang harus kita aktifkan (default tidak aktif). Versi file di Windows dibagi menjadi 4 bagian, Major, Minor, Release dan Build. Pilihan “Auto-increment build number” jika di aktifkan, maka angka pada bagian Build akan otomatis ditambah satu jika dilakukan proses build (menu Project-&amp;gt;Build &amp;lt;nama_project&amp;gt;/Build All Projects) dan compile.&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg79T47V-fiqXj3eIsFDrh6rucA4aUSaGiFJlx-KoQ__s00eEdnZLvOwGZOSgkPtD5_w38hi4WsbOXUn3zZ8Kxc5n4AlR7rSip83qa2RS7MNkD2IPAkUuG5Wxd_dGxVybKVRKbRdxe-4Rw/s1600-h/versi%601.JPG&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 127px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg79T47V-fiqXj3eIsFDrh6rucA4aUSaGiFJlx-KoQ__s00eEdnZLvOwGZOSgkPtD5_w38hi4WsbOXUn3zZ8Kxc5n4AlR7rSip83qa2RS7MNkD2IPAkUuG5Wxd_dGxVybKVRKbRdxe-4Rw/s320/versi%601.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5352963899340573026&quot; border=&quot;0&quot; /&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;Pada bagian Project Options tersebut terdapat sejumlah &lt;span style=&quot;font-style: italic;&quot;&gt;key&lt;/span&gt; yang bisa kita beri nilai, seperti CompanyName, FileDescription, FileVersion, dan seterusnya. Untuk mendapatkan informasi dari suatu file aplikasi gunakan cara ini.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;uses SysUtils, Windows;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;function GetFileVersionInformation(const aFileName, aName: string): string;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;const&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp LocaleID = &#39;0421&#39;;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;var&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp VerInfoSize, VerValueSize, Dummy: DWORD;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp VerInfo, VerValue: PChar;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp Result := &#39;&#39;;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp VerInfoSize := GetFileVersionInfoSize(PChar(aFileName), Dummy);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp if VerInfoSize &amp;gt; 0 then&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp begin&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp VerInfo := AllocMem(VerInfoSize);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp GetFileVersionInfo(PChar(aFileName), 0, VerInfoSize, VerInfo);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp if VerQueryValue(VerInfo, PChar(&#39;StringFileInfo\&#39; + LocaleID + &#39;04E4\&#39; + aName), Pointer(VerValue), VerValueSize) then&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp &amp;nbsp Result := VerValue;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp FreeMem(VerInfo, VerInfoSize);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp end;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;end;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Contoh cara menggunakannya:&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;ShowMessage(GetFileVersionInformation(Application.ExeName, ‘FileVersion’));&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;ShowMessage(GetFileVersionInformation(Application.ExeName, ‘CompanyName’));&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Pada skrip diatas terdapat konstanta LocaleID, karakter tersebut tergantung dari pengaturan lokalisasi/bahasa yang kita pakai. Pada contoh diatas digunakan pengaturan lokalisasi/bahasa Indonesian. Pengaturan tersebut bisa kita lihat pada Project Options.&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMxBBuhoZM38i8US0nha_Wmi8vzSNjTlj9gSRRdHRsqjAoo7Q4DsYvD6nOUyOWoNW9UokixCdkDOjcy2MOu47j-OwkuGhEjZd76qEEcvBv6vqwrTuSAjtUY4bio9P4hID8f7klyIJP6vg/s1600-h/versi%602.JPG&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 182px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMxBBuhoZM38i8US0nha_Wmi8vzSNjTlj9gSRRdHRsqjAoo7Q4DsYvD6nOUyOWoNW9UokixCdkDOjcy2MOu47j-OwkuGhEjZd76qEEcvBv6vqwrTuSAjtUY4bio9P4hID8f7klyIJP6vg/s320/versi%602.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5352964055337742466&quot; border=&quot;0&quot; /&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;Bisa juga kita menambahkan informasi tambahan selain yang telah ada. Arahkan cursor sampai pada key paling bawah, kemudian tekan tombol panah bawah. Masukkan nama key dan isi nilai dari key tersebut.&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEib190KmgJwaTB2hDEr_FKNqv1CAbwcnbdpCPGzjVM2v4dahXaWAMUt9DCOsGITFPLQX4uOYSimYNjgsozcjSoX5p1GKOVjufj5uhJcNvQqXwr99TGBL3Y4ArS9y0qySD34SW7TYiETQ3M/s1600-h/versi%603.JPG&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 83px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEib190KmgJwaTB2hDEr_FKNqv1CAbwcnbdpCPGzjVM2v4dahXaWAMUt9DCOsGITFPLQX4uOYSimYNjgsozcjSoX5p1GKOVjufj5uhJcNvQqXwr99TGBL3Y4ArS9y0qySD34SW7TYiETQ3M/s320/versi%603.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5352964199700758914&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;/span&gt;</description><link>http://rudycs.blogspot.com/2009/06/mendapatkan-informasi-file-aplikasi.html</link><author>noreply@blogger.com (rudycs)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg79T47V-fiqXj3eIsFDrh6rucA4aUSaGiFJlx-KoQ__s00eEdnZLvOwGZOSgkPtD5_w38hi4WsbOXUn3zZ8Kxc5n4AlR7rSip83qa2RS7MNkD2IPAkUuG5Wxd_dGxVybKVRKbRdxe-4Rw/s72-c/versi%601.JPG" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7234833807225482669.post-4809415768587690606</guid><pubDate>Fri, 26 Jun 2009 05:24:00 +0000</pubDate><atom:updated>2009-06-26T12:34:07.450+07:00</atom:updated><title>Query Dinamis SQL Server</title><description>Perintah EXECUTE pada SQL Server digunakan untuk menjalankan procedure, function dan bisa juga string yang berisi perintah SQL. Tanda kurung buka dan kurung tutup mutlak digunakan sebelum dan sesudah string perintah SQL. Misalnya untuk menjalankan procedure bisa seperti ini:&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;EXECUTE (‘sp_databases’);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;EXECUTE (‘SELECT * FROM sysdatabases’);&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class=&quot;fullpost&quot;&gt;&lt;br /&gt;Jika kita memerlukan query yang menghasilkan jumlah field yang bisa berbeda, cara ini bisa menjadi solusi. Misalnya menampilkan hasil penjualan per tahun dari perusahaan. Tidak menjadi masalah jika tahun ditampilkan secara vertikal, tapi jika ditampilkan secara horisontal tentu tidak semudah itu. Disini diberikan contoh kasus dengan 3 tabel, periode, cabang dan penjualan. Tabel periode berisi tahun penjualan, tabel cabang berisi cabang perusahaan, dan tabel penjualan adalah data penjualan berdasarkan tanggal pada suatu cabang. Tabel-tabel tersebut di desain seperti ini.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;CREATE TABLE periode(tahun int);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;INSERT INTO periode VALUES (2007);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;INSERT INTO periode VALUES (2008);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;INSERT INTO periode VALUES (2009);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;CREATE TABLE cabang(kode char(2));&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;INSERT INTO cabang VALUES (&#39;01&#39;);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;INSERT INTO cabang VALUES (&#39;02&#39;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;CREATE TABLE penjualan(kode char(5), tanggal datetime, total money, kodecabang char(2));&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;INSERT INTO penjualan VALUES (&#39;00001&#39;, &#39;2007-02-21&#39;, 80000, &#39;01&#39;);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;INSERT INTO penjualan VALUES (&#39;00002&#39;, &#39;2007-07-09&#39;, 35000, &#39;02&#39;);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;INSERT INTO penjualan VALUES (&#39;00003&#39;, &#39;2008-01-11&#39;, 20000, &#39;01&#39;);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;INSERT INTO penjualan VALUES (&#39;00004&#39;, &#39;2008-04-15&#39;, 63000, &#39;01&#39;);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;INSERT INTO penjualan VALUES (&#39;00005&#39;, &#39;2008-12-30&#39;, 48000, &#39;02&#39;);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;INSERT INTO penjualan VALUES (&#39;00006&#39;, &#39;2009-03-03&#39;, 50000, &#39;01&#39;);&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Yang kita inginkan adalah menampilkan total penjualan per tahun per cabang dengan tahun ditampilkan secara horisontal. Dengan bantuan cursor hasil yang diinginkan bisa kita dapatkan.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;DECLARE @tahun char(4);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;DECLARE @query varchar(1000);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;SET @query = &#39;SELECT c.kode AS cabang, &#39;;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;DECLARE crs CURSOR LOCAL FOR SELECT tahun FROM periode;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;OPEN crs;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;FETCH NEXT FROM crs INTO @tahun&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;WHILE @@FETCH_STATUS = 0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;BEGIN&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp SET @query = @query + &#39;SUM(CASE WHEN YEAR(p.tanggal) = &#39; + @tahun + &#39; THEN p.total ELSE 0 END)&#39; + &#39; AS tahun&#39; + @tahun;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp FETCH NEXT FROM crs INTO @tahun;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp IF @@FETCH_STATUS = 0 SET @query = @query + &#39;, &#39;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;END&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;CLOSE crs&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;DEALLOCATE crs&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;SET @query = @query + &#39; FROM cabang AS c LEFT JOIN penjualan AS p ON p.kodecabang = c.kode GROUP BY c.kode&#39;;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;EXECUTE (@query);&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Hasilnya dari skrip diatas adalah sebagai berikut.&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGLqVxrGcdHg_5fHmWASA-gZ0-UrHgDrhjHXE9a9c2ZkNDEJl5xvwND4G4WPWfvC6j1SDR9jXLQmQoYzlkFnliKUSM9PwI4-FfpTbzRtBXTSMqT46DM9Cqh7Wzf3gKcFWx2Mjx8RihD8M/s1600-h/execute.JPG&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 58px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGLqVxrGcdHg_5fHmWASA-gZ0-UrHgDrhjHXE9a9c2ZkNDEJl5xvwND4G4WPWfvC6j1SDR9jXLQmQoYzlkFnliKUSM9PwI4-FfpTbzRtBXTSMqT46DM9Cqh7Wzf3gKcFWx2Mjx8RihD8M/s320/execute.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5351504169501293394&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Untuk mendapatkan hasil dari perintah SQL seperti diatas tidak bisa didapatkan seperti mengakses tabel biasa. Jadi perintah berikut akan menghasilkan pesan kesalahan.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;SELECT * FROM EXECUTE (‘SELECT * FROM sysdatabases’);&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Caranya adalah menyimpan hasil dari perintah SQL tersebut ke suatu tabel atau tabel sementara. Contoh berikut akan menyimpan hasil dari beberapa perintah SQL ke tabel sementara dan menampilkan hasilnya.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;INSERT INTO #tmp EXECUTE (&#39;prosedur1&#39;);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;INSERT INTO #tmp EXECUTE (&#39;prosedur2&#39;);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;INSERT INTO #tmp EXECUTE (&#39;prosedur3&#39;);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;SELECT * FROM #tmp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;</description><link>http://rudycs.blogspot.com/2009/06/query-dinamis-sql-server.html</link><author>noreply@blogger.com (rudycs)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGLqVxrGcdHg_5fHmWASA-gZ0-UrHgDrhjHXE9a9c2ZkNDEJl5xvwND4G4WPWfvC6j1SDR9jXLQmQoYzlkFnliKUSM9PwI4-FfpTbzRtBXTSMqT46DM9Cqh7Wzf3gKcFWx2Mjx8RihD8M/s72-c/execute.JPG" height="72" width="72"/><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7234833807225482669.post-2853986352088338962</guid><pubDate>Tue, 23 Jun 2009 06:14:00 +0000</pubDate><atom:updated>2009-06-23T13:18:15.645+07:00</atom:updated><title>Perintah GO pada SQL Server</title><description>Perintah GO hanya dikenali pada DBMS SQL Server, digunakan untuk mengakhiri perintah-perintah T-SQL (Transact SQL) pada SQL Server. Perintah GO ini bukan merupakan perintah T-SQL. Pada SQL Server kumpulan perintah dikirim ke instance SQL Server yang dinamakan “batch”. Dengan perintah GO, tool yang digunakan pada SQL Server, seperti Query Analyzer pada SQL Server 2000 atau SQL Server Management Studio pada SQL Server 2005/2008&lt;span class=&quot;fullpost&quot;&gt;, akan mengirim sinyal ke instance SQL Server untuk mengakhiri batch yang bersangkutan. Suatu batch terdiri atas semua perintah setelah perintah GO terakhir, atau sejak awal skrip jika tidak ada perintah GO sebelumnya.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;USE master;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;GO&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;DECLARE @i int;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;SET @i = 10;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;SELECT @i;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;GO&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Contoh skrip diatas terdiri dari 2 batch, karena terdapat 2 perintah GO. Dengan skrip tersebut sebuah variabel dengan tipe integer di deklarasikan dan diisi dengan nilai 10 yang kemudian ditampilkan hasilnya. Variabel yang di deklarasikan tersebut hanya berlaku pada batch tempat variabel tersebut di deklarasikan dan tidak berlaku setelah perintah GO dijalankan.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;USE master;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;GO&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;DECLARE @i int;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;SET @i = 10;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;SELECT @i;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;GO&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;SELECT @i; -- akan menampilkan pesan kesalahan&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Jika kita membuat procedure, function atau trigger, maka perintah untuk membuat obyek tersebut harus merupakan perintah pertama pada suatu batch. Contoh berikut akan menampilkan pesan kesalahan.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;USE master;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;CREATE PROCEDURE proc1 AS SELECT 1;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Supaya skrip tersebut bisa berjalan tanpa adanya pesan kesalahan, kita harus menambahkan perintah GO sebelum perintah untuk membuat procedure.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;USE master;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;GO&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;CREATE PROCEDURE proc1 AS SELECT 1;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Pada SQL Server 2008 terdapat fitur baru dimana pada perintah GO terdapat parameter dengan tipe integer (optional) yang dapat diisi dengan nilai integer positif. Parameter ini jika diisi dengan nilai tertentu akan menjalankan batch yang bersangkutan sebanyak nilai dari parameter tersebut ditentukan. Contoh berikut akan membuat tabel “tbl” dan diisi dengan tanggal dan waktu sekarang sebanyak 10 kali.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;CREATE TABLE tbl (tgl datetime)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;GO&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;INSERT INTO tbl VALUES (GETDATE())&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;GO 10&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;SELECT * FROM tbl&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Catatan: Perintah lain tidak bisa menempati baris yang sama dengan perintah GO. Perintah GO juga tidak memerlukan tanda ; sebagai akhir perintah. Tapi baris komentar dapat menyertai perintah GO. Contoh:&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;GO [ok]&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;GO; [error]&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;GO -- akhir dari batch [ok]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;</description><link>http://rudycs.blogspot.com/2009/06/perintah-go-pada-sql-server.html</link><author>noreply@blogger.com (rudycs)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7234833807225482669.post-8900481222998947137</guid><pubDate>Mon, 22 Jun 2009 03:28:00 +0000</pubDate><atom:updated>2009-06-22T10:57:30.616+07:00</atom:updated><title>Alman, Virus yang Bisa Membuat File Aplikasi Mekar</title><description>Virus ini mungkin sudah lama ada, yang aku sendiri juga tidak tahu kapan mulai ada. Tapi belum lama ini benar-benar membuat aku repot. Aku akui pembuat virus ini hebat juga, bisa mengubah/menambahkan ukuran file aplikasi tapi file tersebut masih bisa dijalankan, alias tidak merusak file yang terinfeksi. Ada-ada saja orang yang buat virus ini, kurang kerjaan, ingin pamer, atau mungkin terlalu kreatif. Buat orang yang buat virus yang mungkin baca dan mengerti, ada satu kata, TOBATLAH!&lt;span class=&quot;fullpost&quot;&gt;&lt;br /&gt;Awalnya aku tidak menyadari bahwa terdapat virus di komputer yang aku gunakan. Tidak ada antivirus aktif yang melindungi komputer, ini aku lakukan untuk meringankan dan mempercepat proses, maklum komputer yang aku gunakan sudah uzur. Aku baru curiga setelah ada yang tidak beres dengan komputerku, dan ternyata setelah melakukan scan dengan antivirus terdeteksi virus Alman pada beberapa file aplikasi. Karena antivirus yang aku gunakan tidak bisa menyembuhkan file yang terinfeksi, dan hanya menganjurkan di karantina atau dihapus, maka tidak ada jalan lain selain menghapus file yang terinfeksi dengan berharap virus tersebut tidak akan mampir lagi.&lt;br /&gt;Ternyata harapan tidak sesuai dengan kenyataan. Virus tersebut tetap tinggal di komputerku dan sering menginfeksi file-file aplikasi yang ada di komputer. Tentu saja ini sangat merepotkan, apalagi sebagian file yang di infeksi adalah file penting. Tiap kali ada file yang terdeteksi selalu dihapus, setidaknya itu langkah yang aku tempuh, karena antivirus juga tidak membantu membasmi virus secara tuntas. Selain itu aku juga malas install ulang Windows, lama dan repot.&lt;br /&gt;Setelah mencari dan mencari, akhirnya ketemu sebuah tool dari AVG yang khusus untuk membasmi virus Alman. Tool ini terdiri dari dua file rmalman.exe dan rmalman.nt yang bisa di download &lt;a href=&quot;http://www.ziddu.com/download.php?uid=bayempSuaq2inJyttayZlJyiZ66WlZqn7&quot;&gt;disini&lt;/a&gt;. Cara menjalankan tool ini dengan menjalankan rmalman.exe yang otomatis akan memeriksa seluruh file pada disk. Atau jika ingin memeriksa sebagian partisi atau direktori bisa dengan memberikan parameter saat menjalankan file rmalman.exe. Misalnya (jalankan pada command prompt):&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;rmalman (scans and cleans all available drives)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;rmalman C: (scans and cleans the C: drive)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;rmalman C: D: (scans and cleans the C: and D: drives)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;rmalman C:\Windows (scans and cleans all files in the C:\Windows folder)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;rmalman C:\Windows\explorer.exe (Scans and eventually cleans this file)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Setelah proses pembersihan juga dianjurkan untuk scan komputer dengan antivirus, misalnya AVG untuk lebih meyakinkan komputer bebas virus.&lt;br /&gt;&lt;br /&gt;Catatan: Waktu pertama kali mencoba tool ini pada komputerku, proses tidak dapat dilanjutkan karena terdapat virus yang “gentayangan” di memory dan menampilkan pesan bahwa pada proses booting Windows selanjutnya tool ini otomatis dijalankan. Tapi kenyataannya tidak begitu, tetap saja tool tidak dijalankan saat proses booting selesai, mungkin ada yang salah atau ada file lain yang dibutuhkan. Yang jelas untuk mengatasi masalah ini, aku mengakali dengan cara menambahkan entry pada registry pada HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce, buat entry dengan nama sembarang, dengan tipe string, yang isinya direktori dan nama file dimana file rmalman.exe berada. Tool rmalman.exe otomatis dijalankan saat booting hanya sekali saja, setelah itu entry pada registry akan dihapus. Cara ini cukup berhasil meski tidak semua file bisa dibuka.&lt;/span&gt;</description><link>http://rudycs.blogspot.com/2009/06/alman-virus-yang-bisa-membuat-file.html</link><author>noreply@blogger.com (rudycs)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7234833807225482669.post-8051570450378955205</guid><pubDate>Wed, 17 Jun 2009 02:27:00 +0000</pubDate><atom:updated>2009-06-17T09:36:49.640+07:00</atom:updated><title>Hal yang Aneh pada CreateParams dan WS_EX_APP_WINDOWS (Lanjutan)</title><description>Beberapa langkah ditempuh untuk menyelesaikan masalah seperti yang dijelaskan pada posting sebelumnya. Seletah beberapa lama mencari penyelesaian atas masalah ini akhirnya dapat terselesaikan juga.&lt;br /&gt;Langkah pertama adalah menambahkan kode pada method CreateParams pada form utama seperti pada form lain (sebelumnya form utama tidak melakukan override method CreateParams).&lt;span class=&quot;fullpost&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;procedure TForm1.CreateParams(var Params: TCreateParams);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp inherited CreateParams(Params);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp Params.WndParent := GetDesktopWindow;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;end;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Dengan cara diatas memberikan efek yang tidak diinginkan. Saat aplikasi dijalankan pertama kali terdapat dua button pada taskbar, padahal hanya ada form utama yang ditampilkan. Pada kenyataannya memang Delphi membuat satu form lagi yang di sembunyikan tiap kita menjalankan aplikasi yang dibuat menggunakan Delphi, yang secara default tidak menampilkan button pada taskbar. Tapi dengan kode diatas berpengaruh pada &lt;span style=&quot;font-style: italic;&quot;&gt;behaviour&lt;/span&gt; program. Tidak itu saja, masalah timbul lagi karena form utama tidak bisa di &lt;span style=&quot;font-style: italic;&quot;&gt;minimize&lt;/span&gt;. Berarti kita harus menyelesaikan dua masalah, menghilangkan button yang tidak diinginkan pada taskbar dan membuat form utama bisa di &lt;span style=&quot;font-style: italic;&quot;&gt;minimize&lt;/span&gt;.&lt;br /&gt;Masalah pertama bisa diselesaikan dengan kode dibawah ini.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;ShowWindow(Application.Handle, SW_HIDE);&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Dengan kode diatas saat aplikasi pertama kali dijalankan hanya ada satu button pada taskbar, yang merupakan button untuk form utama.&lt;br /&gt;Untuk menyelesaikan masalah kedua kita memerlukan satu trik khusus yang melibatkan &lt;span style=&quot;font-style: italic;&quot;&gt;windows message&lt;/span&gt;, WM_SYSCOMMAND. Windows message ini dihasilkan saat kita melakukan &lt;span style=&quot;font-style: italic;&quot;&gt;minimize&lt;/span&gt;, &lt;span style=&quot;font-style: italic;&quot;&gt;maximize &lt;/span&gt;atau menutup form. Untuk itu pertama kita harus menambahkan deklarasi procedure yang menangkap &lt;span style=&quot;font-style: italic;&quot;&gt;windows message&lt;/span&gt; yang dimaksud.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;procedure WMSysCommand(var aMsg: TWMSysCommand); message WM_SYSCOMMAND;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Procedure diatas bisa di deklarasikan sebagai private atau public method. Nama procedure dan nama parameter tidak harus seperti diatas, bebas tapi memiliki &lt;span style=&quot;font-style: italic;&quot;&gt;signature&lt;/span&gt; seperti diatas. Kemudian pada bagian implementasi, tambahkan kode berikut.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;if (aMsg.CmdType and $FFF0 = SC_MINIMIZE) then&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp Self.WindowState := wsMinimized&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;else&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp inherited;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Setelah semua hal diatas dilakukan, selesai sudah, bisa dicoba dan sepertinya sesuai seperti yang diharapkan, setidaknya bagiku.&lt;/span&gt;</description><link>http://rudycs.blogspot.com/2009/06/hal-yang-aneh-pada-createparams-dan_17.html</link><author>noreply@blogger.com (rudycs)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7234833807225482669.post-7310180049606389764</guid><pubDate>Tue, 16 Jun 2009 04:59:00 +0000</pubDate><atom:updated>2009-06-16T12:05:30.230+07:00</atom:updated><title>Hal yang Aneh pada CreateParams dan WS_EX_APP_WINDOWS</title><description>Seperti yang dijelaskan sebelumnya konstanta WS_EX_APPWINDOW yang diset pada method CreateParams pada form akan membuat form tersebut pada suatu aplikasi mempunyai button tersendiri pada taskbar. Hal ini berjalan lancar pada Delphi 7, tapi tidak pada Delphi 2007!&lt;br /&gt;Karena alasan tertentu aku mengembangkan aplikasi pada dua versi Delphi yang berbeda tersebut.&lt;span class=&quot;fullpost&quot;&gt; Dengan menggunakan Delphi 7 semuanya sesuai dengan rencana, tapi ketika mencoba pada Delphi 2007 tidaklah seperti yang diharapkan. Sebagai informasi pada tiap form yang ada dibuat button tersendiri pada taskbar, jadi pada tiap form akan melakukan &lt;span style=&quot;font-style: italic;&quot;&gt;override&lt;/span&gt; pada method CreateParams yang akan mengaktifkan flag WS_EX_APPWINDOW.&lt;br /&gt;Masalah pertama adalah semua form selain form utama yang selalu berada diatas form utama meski fokus berada pada form utama. Masalahnya ada pada program utama (.dpr) pada kode berikut:&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;Application.MainFormOnTaskbar := True;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Dengan menghapus bagian kode tersebut, masalah diatas bisa diatasi. Kurang jelas kegunaan kode tersebut, tapi ada sumber yang menyatakan kode tersebut digunakan untuk fitur baru pada Windows Vista yang berhubungan dengan User Interface. Yang jelas hal itu tidak dibahas disini.&lt;br /&gt;Langkah tersebut adalah langkah awal, selanjutnya masih ada beberapa masalah yang lebih menantang lagi. Masalah berikutnya jika ada form lain dan kita klik pada button form utama pada taskbar, fokus tidak juga berganti pada form utama. Solusi masalah ini ada pada parameter WndParent sebagai bagian dari parameter dengan tipe TCreateParams pada method CreateParams.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;type&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp TCreateParams = record&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp Caption: PChar;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp Style: DWORD;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp ExStyle: DWORD;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp X, Y: Integer;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp Width, Height: Integer;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;    &lt;span style=&quot;font-weight: bold;&quot;&gt;&amp;nbsp &amp;nbsp WndParent: HWnd;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp Param: Pointer;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp WindowClass: TWndClass;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp WinClassName: array[0..63] of Char;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp end;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Pada method CreateParams kita perlu menambahkan kode yang mengisi nilai dari parameter WndParent, pada tiap form selain form utama, seperti yang ditunjukkan kode berikut yang dicetak tebal.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;procedure TForm1.CreateParams(var Params: TCreateParams);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp inherited CreateParams(Params);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;  &lt;span style=&quot;font-weight: bold;&quot;&gt;&amp;nbsp Params.WndParent := GetDesktopWindow;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;end;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Dengan kode yang dicetak tebal, berarti form yang bersangkutan mengarahkan parent ke Desktop dibanding sebelumnya ke form utama. Dengan cara ini sepertinya masalah terselesaikan. Tapi setelah beberapa lama timbul masalah lagi yang cukup mengganggu. Tiap kali form selain form utama menjalankan fungsi yang menampilkan window/form modal, seperti ShowMessage() atau MessageDlg(), form utama akan berpindah menjadi form paling atas. Jadi sepertinya fungsi tersebut dipanggil dari form utama.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Bersambung…&lt;/span&gt;&lt;/span&gt;</description><link>http://rudycs.blogspot.com/2009/06/hal-yang-aneh-pada-createparams-dan.html</link><author>noreply@blogger.com (rudycs)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7234833807225482669.post-5161369814312486080</guid><pubDate>Mon, 15 Jun 2009 02:36:00 +0000</pubDate><atom:updated>2009-06-15T10:06:45.624+07:00</atom:updated><title>Mengungkap Kegunaan Method CreateParams (Bagian 4)</title><description>Selain parameter Style, ada satu lagi parameter yang juga berguna, ExStyle. Kegunaan parameter ini dapat kita lihat pada form yang kita buat.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Membuat Button Tersendiri pada Taskbar Untuk Tiap Form&lt;/span&gt;&lt;br /&gt;Jika kita pernah membuat aplikasi pada lingkungan .NET Framework, tiap form yang dibuat pada satu aplikasi akan menambahkan satu button ke taskbar.&lt;span class=&quot;fullpost&quot;&gt; Ini merupakan default behaviour pada aplikasi .NET. Jika pada Delphi hanya terdapat satu button tidak peduli berapa form yang ada. Kita bisa melakukan ini dengan mengubah flag WS_EX_APPWINDOW pada parameter ExStyle.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;procedure TForm1.CreateParams(var Params: TCreateParams);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&amp;nbsp inherited CreateParams(Params);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&amp;nbsp Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;end;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Form Transparan&lt;/span&gt;&lt;br /&gt;Untuk mengubah form menjadi transaparan, gunakan flag WS_EX_TRANSPARENT, seperti pada contoh ini.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;procedure TForm1.CreateParams(var Params: TCreateParams);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&amp;nbsp inherited CreateParams(Params);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&amp;nbsp Params.ExStyle := Params.ExStyle or WX_EX_TRANSPARENT;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;end;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2lyUExt9WfR4psxSBp3c2lg4YQDQfMq513jbSYDFBih91z6cRwbWGztyVnpO4fujwQrx_p63MdRhVAk_2Yn4fen9yWJlskAcrAravud1j6jxMClidbtZ-oYieVxv_5ivIsxgeNHXhryI/s1600-h/form1.JPG&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 58px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2lyUExt9WfR4psxSBp3c2lg4YQDQfMq513jbSYDFBih91z6cRwbWGztyVnpO4fujwQrx_p63MdRhVAk_2Yn4fen9yWJlskAcrAravud1j6jxMClidbtZ-oYieVxv_5ivIsxgeNHXhryI/s320/form1.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5347379023047715122&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Form Model MDI&lt;/span&gt;&lt;br /&gt;Pada form yang properti FormStyle diset fsMDIForm, border form tersebut akan terlihat menonjol. Pada form yang biasa dapat juga dibuat seperti itu dengan set flag WS_EX_OVERLAPPEDWINDOW.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;procedure TForm1.CreateParams(var Params: TCreateParams);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&amp;nbsp inherited CreateParams(Params);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&amp;nbsp Params.ExStyle := Params.ExStyle or WS_EX_OVERLAPPEDWINDOW;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;end;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFxd8JpAD7U5QljgHefxvitfmgpxBism0oVABgZN_RsjhSckV_pUn9mf4Ylzg79DVoYz-qG1aMYssRcLAemXiZGn_qlDnqH0x6SwCLU9L8_vdef7CyTCTd3r-qBxr8y7Wn8Lrpq9iJeZA/s1600-h/form2.JPG&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 210px; height: 137px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFxd8JpAD7U5QljgHefxvitfmgpxBism0oVABgZN_RsjhSckV_pUn9mf4Ylzg79DVoYz-qG1aMYssRcLAemXiZGn_qlDnqH0x6SwCLU9L8_vdef7CyTCTd3r-qBxr8y7Wn8Lrpq9iJeZA/s320/form2.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5347379321481196690&quot; border=&quot;0&quot; /&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;span style=&quot;font-weight: bold;&quot;&gt;ScrollBar di Sebelah Kiri Form&lt;/span&gt;&lt;br /&gt;Biasanya kita menggunakan scrollbar pada sebelah kanan form. Tapi pada kasus tertentu mungkin beberapa orang lebih memilih scrollbar pada sebelah kiri seperti bahasa Arab yang dibaca dari kanan ke kiri. Untuk keperluan ini flag yang dipakai adalah WS_EX_LEFTSCROLLBAR.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;procedure TForm1.CreateParams(var Params: TCreateParams);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&amp;nbsp inherited CreateParams(Params);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&amp;nbsp Params.ExStyle := Params.ExStyle or &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;;font-family:courier new;font-size:85%;&quot; class=&quot;fullpost&quot;  &gt;WS_EX_LEFTSCROLLBAR&lt;/span&gt;&lt;span class=&quot;fullpost&quot;&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;end;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieqYLC3fS20yyhExSg4g3foTB6dr-aY8C1iBKhxXbU4BjXtMNVnx6CYg7-fERuANrQx68dazeUWbkyAfiUWT68bMhl0r2T6FBwK_TlRb-RbAoDItvQOeM-6NPm6g6TiTLTSxZ0D7sjbZQ/s1600-h/form3.JPG&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 302px; height: 150px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieqYLC3fS20yyhExSg4g3foTB6dr-aY8C1iBKhxXbU4BjXtMNVnx6CYg7-fERuANrQx68dazeUWbkyAfiUWT68bMhl0r2T6FBwK_TlRb-RbAoDItvQOeM-6NPm6g6TiTLTSxZ0D7sjbZQ/s320/form3.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5347379570936626802&quot; border=&quot;0&quot; /&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;span style=&quot;font-weight: bold;&quot;&gt;Form Stay On Top&lt;/span&gt;&lt;br /&gt;Pada sebuah form ada properti FormStyle, dimana jika dengan nilai fsStayOnTop maka form tersebut akan selalu diatas form lain, meski fokus tidak pada form tersebut. Tapi jika kita fokus ke aplikasi lain, form tersebut tidak lagi &lt;span style=&quot;font-style: italic;&quot;&gt;stay on top&lt;/span&gt;. Supaya form tersebut dapat diatas form lain pada aplikasi lain kita set flag WS_EX_TOPMOST.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;procedure TForm1.CreateParams(var Params: TCreateParams);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&amp;nbsp inherited CreateParams(Params);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&amp;nbsp Params.ExStyle := Params.ExStyle or WS_EX_TOPMOST;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;end;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Kesimpulan&lt;/span&gt;&lt;br /&gt;Dengan memainkan parameter Style dan ExStyle pada method CreateParams, banyak macam kegunaan yang dapat kita dapat yang dapat membentuk form dengan berbagai gaya yang kita inginkan. Selain parameter diatas, masih banyak lagi konstanta yang ada untuk bermacam kegunaan yang lain.&lt;/span&gt;</description><link>http://rudycs.blogspot.com/2009/06/mengungkap-kegunaan-method-createparams_15.html</link><author>noreply@blogger.com (rudycs)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2lyUExt9WfR4psxSBp3c2lg4YQDQfMq513jbSYDFBih91z6cRwbWGztyVnpO4fujwQrx_p63MdRhVAk_2Yn4fen9yWJlskAcrAravud1j6jxMClidbtZ-oYieVxv_5ivIsxgeNHXhryI/s72-c/form1.JPG" height="72" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7234833807225482669.post-7783350244552765828</guid><pubDate>Sun, 14 Jun 2009 13:58:00 +0000</pubDate><atom:updated>2009-06-14T21:02:31.018+07:00</atom:updated><title>Mengungkap Kegunaan Method CreateParams (Bagian 3)</title><description>Method CreateParams yang dijalankan sebelum membuat kontrol yang berbasis window, dapat kita manfaatkan untuk mengatur parameter-parameter yang dikirim ke fungsi CreateWindowEx. Sebagai contoh pada TForm terdapat properti WindowState yang bisa memiliki nilai wsMaximized, wsMinimized atau wsNormal. Selain mengubah properti dari TForm, kita dapat melakukannya dengan mengaktifkan flag WS_MAXIMIZE dari method CreateParams.&lt;span class=&quot;fullpost&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;procedure TForm1.CreateParams(var Params: TCreateParams);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp; inherited CreateParams(Params);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp; Params.Style := Params.Style or WS_MAXIMIZE;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;end;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Contoh diatas tidaklah terlalu bermanfaat, tapi banyak hal yang bisa dilakukan dengan cara ini yang tidak bisa didapat dengan mengatur properti dari suatu komponen. Misalnya pada komponen standar Delphi TEdit. Komponen ini tidak bisa menampilkan teks rata kanan. Dengan CreateParams, itu bisa diatur. Sebelumnya perlu kita tahu bahwa kita harus melakukan perubahan tersebut dengan set parameter dari method CreateParams. Langkah pertama adalah dengan membuat class/komponen baru yang diturunkan dari class TEdit. Ini diperlukan supaya kita dapat override method CreateParams.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;type&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp; TMyEdit = class(TEdit)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp; protected&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp; &amp;nbsp; procedure CreateParams(var Params: TCreateParams); override;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp; end;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Langkah kedua pada bagian implementasi kita atur parameter Style dengan konstanta ES_RIGHT.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;procedure TMyEdit.CreateParams(var Params: TCreateParams);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp; inherited CreateParams(Params);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp; Params.Style := Params.Style or ES_RIGHT;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;end;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Terakhir adalah menampilkan komponen baru yang kita buat tadi. Misalnya pada event Form.OnCreate:&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;with TMyEdit.Create(Self) do&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp; Parent := Self;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp; Left := 10;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp; Top := 80;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp; Text := &#39;Tes 123&#39;;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;end;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Supaya lebih mudah kita bisa membuat komponen baru yang di register ke component pallete dengan salah satu properti yang bisa mengubah teks rata kiri, rata kanan atau ditengah. Ini merupakan satu contoh saja. Ada banyak konstanta yang bisa dipakai untuk mengubah parameter Style. Untuk mengingatkan lagi semua konstanta yang ada terdapat pada unit Windows.pas, jadi mungkin dengan melihat dan mengamati unit tersebut merupakan hal yang berguna. Atau bisa dengan melihat dokumentasi tentang Windows API untuk informasi yang lebih detail tentang konstanta yang ada dan kegunaannya.&lt;/span&gt;</description><link>http://rudycs.blogspot.com/2009/06/mengungkap-kegunaan-method-createparams_14.html</link><author>noreply@blogger.com (rudycs)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7234833807225482669.post-1992250634246592149</guid><pubDate>Sat, 13 Jun 2009 08:10:00 +0000</pubDate><atom:updated>2009-06-13T15:14:22.632+07:00</atom:updated><title>Mengungkap Kegunaan Method CreateParams (Bagian 2)</title><description>Method CreateParams di definisikan pada class TWinControl pada unit Controls.pas, yang mempunyai sintaks sebagai berikut.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;procedure CreateParams(var Params: TCreateParams); virtual;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Method tersebut di definisikan sebagai method protected, yang berarti hanya bisa diakses dari class yang bersangkutan atau class turunannya. Parameter dari method tersebut&lt;span class=&quot;fullpost&quot;&gt; bertipe TCreateParams yang mempunyai struktur:&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;type&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp TCreateParams = record&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp Caption: PChar;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp Style: DWORD;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp ExStyle: DWORD;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp X, Y: Integer;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp Width, Height: Integer;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp WndParent: HWnd;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp Param: Pointer;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp WindowClass: TWndClass;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp WinClassName: array[0..63] of Char;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp end;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Tidak asing dengan tipe tersebut? Mirip dengan parameter-parameter yang terdapat pada fungsi CreateWindowEx, karena memang pada fungsi ini terdapat parameter yang nantinya akan dilemparkan ke fungsi CreateWindowEx sebagai parameter untuk membuat obyek yang bersangkutan.&lt;br /&gt;Telah dijelaskan bahwa method CreateParams merupakan method protected, berarti kita bisa override method tersebut dari class turunannya. Dengan begitu kita bisa melakukan hal seperti ini pada aplikasi yang kita buat.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;type&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp TForm1 = class(TForm)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp private&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp { Private declarations }&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp protected&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp procedure CreateParams(var Params: TCreateParams); override;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp public&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp { Public declarations }&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp end;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Kemudian pada bagian implementasinya:&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;procedure TForm1.CreateParams(var Params: TCreateParams);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp inherited CreateParams(Params);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp //…&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;end;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Perhatikan pada procedure diatas pernyataan pada baris pertama setelah begin harus dibuat seperti itu untuk memanggil method CreateParams untuk class parent dan mengisi parameter dengan nilai default.&lt;/span&gt;</description><link>http://rudycs.blogspot.com/2009/06/mengungkap-kegunaan-method-createparams_13.html</link><author>noreply@blogger.com (rudycs)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7234833807225482669.post-6899765285186323482</guid><pubDate>Fri, 12 Jun 2009 02:33:00 +0000</pubDate><atom:updated>2009-06-12T09:43:21.800+07:00</atom:updated><title>Mengungkap Kegunaan Method CreateParams (Bagian 1)</title><description>Delphi menyediakan banyak komponen visual yang bisa dipakai untuk pengembangan aplikasi berbasis GUI. Sering komponen-komponen standar yang disediakan Delphi tidak cukup untuk memenuhi kebutuhan kita. Misalnya komponen TEdit standar yang tidak bisa mengatur alignment teks selain rata kiri, atau membuat button tersendiri tiap kali kita membuka form baru. Keterbatasan tersebut bisa diatasi dengan adanya method CreateParams.&lt;span class=&quot;fullpost&quot;&gt;&lt;br /&gt;Semuanya berawal dari fungsi Windows API CreateWindowEx. Tiap komponen visual standar Delphi yang berbasis Window seperti TEdit, TButton, TComboBox dan sejenisnya diturunkan dari class TWinControl. Dari class TWinControl inilah fungsi CreateParams berasal. Fungsi CreateWindowEx merupakan fungsi yang diambil dari user32.dll. Fungsi CreateWindowEx ini tidak berarti bahwa selalu berhubungan dengan suatu Form, tetapi kenyataannya juga dipanggil oleh komponen-komponen yang diturunkan dari TWinControl saat komponen tersebut dibuat. Cara pemakaian fungsi ini, seperti diambil dari unit Windows.pas:&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;function CreateWindowEx(&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&amp;nbsp; dwExStyle: DWORD;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&amp;nbsp; lpClassName: PChar;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&amp;nbsp; lpWindowName: PChar;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&amp;nbsp; dwStyle: DWORD;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&amp;nbsp; X, Y, nWidth, nHeight: Integer;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&amp;nbsp; hWndParent: HWND;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&amp;nbsp; hMenu: HMENU;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&amp;nbsp; hInstance: HINST;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&amp;nbsp; lpParam: Pointer): HWND;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Ada beberapa parameter yang menarik dari fungsi diatas:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;lpClassName. Merupakan class dari obyek yang dibuat, yang bisa berupa:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;BUTTON&lt;/li&gt;&lt;li&gt;COMBOBOX&lt;/li&gt;&lt;li&gt;EDIT&lt;/li&gt;&lt;li&gt;LISTBOX&lt;/li&gt;&lt;li&gt;MDICLIENT&lt;/li&gt;&lt;li&gt;RICHEDIT&lt;/li&gt;&lt;li&gt;SCROLLBAR&lt;/li&gt;&lt;li&gt;STATIC&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;dsStyle. Menentukan style dari obyek yang dibuat. Terdapat banyak sekali konstanta yang telah di definisikan di unit Windows.pas untuk kebutuhan ini, diantaranya:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;WS_MAXIMIZE&lt;/li&gt;&lt;li&gt;WS_MINIMIZEBOX&lt;/li&gt;&lt;li&gt;WS_MAXIMIZEBOX&lt;/li&gt;&lt;li&gt;ES_LEFT&lt;/li&gt;&lt;li&gt;ES_RIGHT&lt;/li&gt;&lt;li&gt;BS_LEFT&lt;/li&gt;&lt;li&gt;BS_RIGHT&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;dsExStyle. Menentukan extended style dari obyek yang dibuat, beberapa yang menarik diantaranya:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;WS_EX_APPWINDOW&lt;/li&gt;&lt;li&gt;WS_EX_MDICHILD&lt;/li&gt;&lt;li&gt;WS_EX_TOOLWINDOW&lt;/li&gt;&lt;li&gt;WS_EX_TOPMOST&lt;/li&gt;&lt;li&gt;WS_EX_TRANSPARENT&lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;br /&gt;Hubungan antara fungsi CreateWindowEx dan CreateParams adalah CreateParams dipanggil sebelum fungsi CreateWindowEx dijalakan. Didalam CreateParams dapat diatur parameter &lt;span style=&quot;font-style: italic;&quot;&gt;style&lt;/span&gt; dan &lt;span style=&quot;font-style: italic;&quot;&gt;extended style&lt;/span&gt; sesuai yang kita inginkan, seperti membuat teks pada TEdit rata kanan dan sebagainya.&lt;/span&gt;</description><link>http://rudycs.blogspot.com/2009/06/mengungkap-kegunaan-method-createparams.html</link><author>noreply@blogger.com (rudycs)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7234833807225482669.post-522624927667179587</guid><pubDate>Thu, 11 Jun 2009 08:44:00 +0000</pubDate><atom:updated>2009-06-11T18:48:15.383+07:00</atom:updated><title>Deteksi Memory Leak</title><description>Delphi sebagai Integrated Development Environment (IDE) pada tiap rilis versi menawarkan fitur-fitur baru yang tentunya lebih baik dibanding versi sebelumnya. Ini berlaku juga untuk versi 2007. Salah satu fitur menarik yang ditawarkan berhubungan dengan masalah yang menjadi momok bagi sebagian pengembang aplikasi menggunakan Delphi khususnya, yaitu Memory Leak, yang kadang sulit ditemukan dan menghabiskan banyak waktu untuk proses debug.&lt;span class=&quot;fullpost&quot;&gt;&lt;br /&gt;Fitur yang dapat membantu kita dalam menemukan Memory Leak atau kebocoran memory ini terdapat pada variabel global yang terdapat pada unit System.pas, &lt;span style=&quot;font-weight: bold;&quot;&gt;ReportMemoryLeaksOnShutdown&lt;/span&gt;. Variabel ini mempunyai tipe Boolean, yang jika bernilai True (default = False), akan memberikan pesan kesalahan yang intinya melaporkan adanya Memory Leak pada saat aplikasi ditutup, jika memang terjadi. Variabel ini bisa ditentukan di bagian manapun pada kode program, tapi mungkin yang terbaik adalah pada bagian utama program (.dpr).&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&amp;nbsp; ReportMemoryLeaksOnShutdown := True;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&amp;nbsp; Application.Initialize;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&amp;nbsp; Application.MainFormOnTaskbar := True;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&amp;nbsp; Application.CreateForm(TForm1, Form1);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&amp;nbsp; Application.Run;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;end.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Sebenarnya fitur ini aku temukan secara “tidak sengaja” dan mungkin sebagian orang juga sudah tahu. Sejak kapan fitur ini diberikan juga tidak jelas bagiku, tapi dari sebuah sumber di internet fitur ini sudah ada sejak Delphi 2006 diluncurkan, yang berarti bukan hal baru pada versi 2007 dan yang pasti tidak didukung pada Delphi 7. Meskipun begitu tetap saja bisa menjadi sangat membantu. Kekurangannya adalah pada saat terjadinya event yang menampilkan pesan Memory Leak tidak bisa ditangkap, artinya fitur ini hanyalah menampilkan informasi saja. Kita tidak bisa melakukan, misalnya menampilkan pesan kesalahan sesuai dengan yang kita inginkan atau menyimpan event tersebut kedalam log. Oleh karena itu mungkin fitur ini lebih cocok digunakan pada saat debug program.&lt;br /&gt;Potongan kode program ini akan menampilkan terjadinya pesan Memory Leak saat program ditutup.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;uses Registry;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&amp;nbsp; //…&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&amp;nbsp; with TRegistry.Create do&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&amp;nbsp; begin&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;&amp;nbsp; end;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;end.&lt;/span&gt;&lt;/span&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGJ2EFBNvAPmEoYBj-N8oVwPSNgjb7qmHlNQk2BqGdHmy8NfY2QhtHHKXGkucsZSghPPOrJ3YONE-t9rqKqW3LqTkpBZzw8VbDwOlGxybt6DSsVfl41lVmYj_TDylJT3DZMVwTHc8gFks/s1600-h/memoryleak.JPG&quot;&gt;&lt;img style=&quot;float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 86px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGJ2EFBNvAPmEoYBj-N8oVwPSNgjb7qmHlNQk2BqGdHmy8NfY2QhtHHKXGkucsZSghPPOrJ3YONE-t9rqKqW3LqTkpBZzw8VbDwOlGxybt6DSsVfl41lVmYj_TDylJT3DZMVwTHc8gFks/s320/memoryleak.JPG&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5346035331379380482&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;</description><link>http://rudycs.blogspot.com/2009/06/deteksi-memory-leak.html</link><author>noreply@blogger.com (rudycs)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGJ2EFBNvAPmEoYBj-N8oVwPSNgjb7qmHlNQk2BqGdHmy8NfY2QhtHHKXGkucsZSghPPOrJ3YONE-t9rqKqW3LqTkpBZzw8VbDwOlGxybt6DSsVfl41lVmYj_TDylJT3DZMVwTHc8gFks/s72-c/memoryleak.JPG" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7234833807225482669.post-5214230150665893768</guid><pubDate>Mon, 08 Jun 2009 04:48:00 +0000</pubDate><atom:updated>2009-06-08T11:53:01.451+07:00</atom:updated><title>Tip dan Trik Delphi (8 Juni 2009)</title><description>&lt;span style=&quot;font-weight: bold;&quot;&gt;Disable salah satu Radio Button pada TRadioGroup&lt;/span&gt;&lt;br /&gt;Pada komponen TRadioGroup terdapat satu atau lebih item yang berupa Radio Button. Skrip berikut men-disable Radio Button kedua (indeks pertama adalah 0).&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;TRadioButton(RadioGroup1.Controls[1]).Enabled := False;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Pindah ke kontrol berikutnya dengan tombol Enter&lt;/span&gt;&lt;span class=&quot;fullpost&quot;&gt;&lt;br /&gt;Didalam suatu form terdapat banyak kontrol/komponen visual. Tiap user menekan tombol Enter pindah ke kontrol berikutnya. Ada cara mudah tanpa harus melakukan pengecekan per kontrol. Pertama set properti Form.KeyPreview ke True. Kedua pada event Form.OnKeyPress tambahkan skrip ini.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;if Key = #13 then SelectNext(ActiveControl, True, True);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Mendapatkan direktori Windows&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;uses System, SysUtils, Windows;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;function GetWindowsDir: string;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;var&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp dir: array [0..MAX_PATH] of Char;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp GetWindowsDirectory(dir, MAX_PATH);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp Result := string(dir);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;end;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Mendapatkan direktori sistem Windows&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;uses System, SysUtils, Windows;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;function GetWindowsSystemDir: string;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;var&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp dir: array [0..MAX_PATH] of Char;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp GetSystemDirectory(dir, MAX_PATH);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp Result := string(dir);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;end;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Mendapatkan direktori Windows Temp&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;uses System, SysUtils, Windows;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;function GetWindowsTempDir: string;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;var&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp dir: array [0..MAX_PATH] of Char;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp GetTempPath(SizeOf(dir) - 1, dir);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp Result := string(dir);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;end;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Mendapatkan direktori Application Data user&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;uses System, Windows, SHFolder;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;function GetApplicationDataDir: string;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;var&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp dir: array [0..MAX_PATH] of Char;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp SHGetFolderPath(0, CSIDL_LOCAL_APPDATA, 0, 0, dir);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp Result := string(dir);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;end;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Memainkan file suara&lt;/span&gt;&lt;br /&gt;Untuk memainkan file suara gunakan unit MMSystem.&lt;br /&gt;Memainkan file suara:&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;PlaySound(&#39;C:\ sound.wav&#39;, 0, SND_NODEFAULT);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Untuk menghentikan sebelum selesai:&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;PlaySound(nil, 0, SND_NODEFAULT);&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Memainkan file suara secara asynchronous:&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;PlaySound(&#39;C:\ sound.wav&#39;, 0, SND_ASYNC or SND_NODEFAULT);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;</description><link>http://rudycs.blogspot.com/2009/06/tip-dan-trik-delphi-8-juni-2009.html</link><author>noreply@blogger.com (rudycs)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7234833807225482669.post-8247919049883224285</guid><pubDate>Fri, 05 Jun 2009 02:37:00 +0000</pubDate><atom:updated>2009-06-05T09:46:59.049+07:00</atom:updated><title>Exception, try except, try finally</title><description>&lt;span style=&quot;font-weight: bold;&quot;&gt;Exception&lt;/span&gt;&lt;br /&gt;Exception merupakan kesalahan yang terjadi pada saat runtime. Kesalahan yang terjadi bisa berbagai macam, misalnya saat melakukan konversi nilai yang tidak valid dari string ke integer, atau saat melakukan pembagian dengan pembagi 0. Exception tidak hanya dibangkitkan untuk kejadian seperti diatas. Kita bisa juga membangkitkan kesalahan saat suatu kondisi yang diinginkan tidak terpenuhi. Misalnya saat kita meminta input berupa nilai integer yang lebih besar dari 1.&lt;span class=&quot;fullpost&quot;&gt; Jika kurang dari 1, maka tampilkan pesan kesalahan.&lt;br /&gt;Exception pada Delphi berupa class yang mempunyai properti dan method, seperti EConvertError, EDivByZero dan lain-lain. Jadi memanggil exception berarti memanggil obyek yang dihasilkan dari class.&lt;br /&gt;Menampilkan pesan bisa dengan rutin yang disediakan seperti ShowMessage() atau MessageDlg(). Kelemahan dari rutin tersebut adalah tidak menjamin baris kode yang dibawahnya tidak akan dijalankan. Meskipun bisa dengan melakukan pengecekan kondisi dengan if then else, tapi tidak efektif. Dengan perintah &lt;span style=&quot;font-weight: bold;&quot;&gt;raise&lt;/span&gt;, dijamin baris kode yang terdapat dibawahnya tidak akan dijalankan. Pada contoh ini, Proc3() dan Proc4() tidak akan dijalankan dan akan menampilkan pesan kesalahan jika isi variabel Nilai lebih kecil dari 1.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;var&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp Nilai: Integer;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp Proc1();&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp Proc2();&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp if Nilai &amp;lt; 1 then&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp raise Exception.Create(&#39;Nilai harus lebih besar dari 0&#39;);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp Proc3();&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp Proc4();&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;end;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Try except&lt;/span&gt;&lt;br /&gt;Blok try except digunakan untuk penanganan kesalahan pada Delphi dan dapat digunakan pada baris kode yang mempunyai potensi terjadi kesalahan saat dijalankan. Saat terjadi kesalahan pada saat runtime, Delphi akan membuat obyek, yaitu exception, kemudian akan mengembalikan stack ke posisi awal yang ditemukan dimana terdapat baris kode untuk penanganan kesalahan. Tanpa adanya blok try except, exception dapat menyebabkan keluar dari rutin atau pada jika terdapat pada main program dapat menyebabkan keluar dari program, yang berarti baris perintah/kode yang terdapat dibawahnya tidak dijalankan. Dengan adanya blok try except, kita bisa melakukan penanganan terhadap exception, misalnya dengan menampilkan pesan sesuai dengan yang kita inginkan.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;try&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp ShowMessage(IntToStr(StrToInt(Edit1.Text) div StrToInt(Edit2.Text)));&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;except&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp on EConvertError do&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp raise Exception.Create(&#39;Masukkan input berupa nilai integer&#39;);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp on EDivByZero do&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp raise Exception.Create(&#39;Pembagi tidak boleh 0&#39;);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp on E: Exception do&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp begin&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp //...&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp raise Exception.Create(E.Message);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp end;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;end;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Try finally&lt;/span&gt;&lt;br /&gt;Kadang kita ingin memastikan suatu perintah dijalankan, meski terdapat suatu exception. Blok try finally dapat memastikan suatu perintah dijalankan meskipun terdapat exception. Contoh dibawah terdapat fungsi yang membaca file teks pada baris pertama dan mengembalikan nilai dengan tipe integer. Jika terjadi exception pada blok try finally, misal kesalahan saat konversi, dipastikan perintah setelah kata kunci finally akan dijalankan.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;function BacaFile: Integer;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;var&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp txtfile: TextFile;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp buf: string;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;begin&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp AssignFile(txtfile, &#39;C:\fileteks.txt&#39;);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp try&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp Reset(txtfile);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp Readln(txtfile, buf);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp Result := StrToInt(buf);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp finally&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp CloseFile(txtfile);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp end;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;end;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Kita bisa juga menggabungkan blok try except dan try finally atau membuatnya bersarang.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;try&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp AssignFile(txtfile, &#39;C:\fileteks.txt&#39;);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp try&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp Reset(txtfile);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp Readln(txtfile, buf);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp Result := StrToInt(buf);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp finally&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp CloseFile(txtfile);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp end;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;except&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp on E: Exception do&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;&amp;nbsp &amp;nbsp raise Exception.Create(E.Message);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;end;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Catatan: Delphi mempunyai procedure Abort() yang membangkitkan exception EAbort, yang berfungsi seperti exception, tapi tanpa menampilkan pesan kesalahan pada user.&lt;/span&gt;</description><link>http://rudycs.blogspot.com/2009/06/exception-try-except-try-finally.html</link><author>noreply@blogger.com (rudycs)</author><thr:total>4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7234833807225482669.post-8900852927052439361</guid><pubDate>Thu, 04 Jun 2009 06:00:00 +0000</pubDate><atom:updated>2009-06-11T16:22:44.329+07:00</atom:updated><title>Tip, Trik dan Shortcut IDE Delphi</title><description>&lt;span style=&quot;font-weight: bold;&quot;&gt;Esc (pada form)&lt;/span&gt;&lt;br /&gt;Fokus ke kontrol/komponen parent, jika ada.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;F1 (pada unit)&lt;/span&gt;&lt;br /&gt;Mencari bantuan Delphi dengan topik sesuai dengan kata pada cursor, jika ada.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;F3 (pada unit)&lt;/span&gt;&lt;br /&gt;Search again.&lt;span class=&quot;fullpost&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;F5 (pada unit)&lt;/span&gt;&lt;br /&gt;Toggle breakpoint.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;F7 (pada unit saat aplikasi dijalankan)&lt;/span&gt;&lt;br /&gt;Berpindah ke baris kode progran selanjutnya, jika baris yang bersangkutan merupakan procedure/function yang kita buat, akan loncat ke baris kode program dari procedure/function tersebut.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;F8 (pada unit saat aplikasi dijalankan)&lt;/span&gt;&lt;br /&gt;Sama seperti F7 tapi tidak loncat ke procedure/function jika ditemukan.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;F9&lt;/span&gt;&lt;br /&gt;Menjalankan aplikasi.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;F10&lt;/span&gt;&lt;br /&gt;Fokus ke menu Delphi.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;F11&lt;/span&gt;&lt;br /&gt;Fokus ke Object Inspector.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;F12&lt;/span&gt;&lt;br /&gt;Berganti tampilan ke form/unit (Toggle).&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Alt+F7 / Alt+F8 (pada unit)&lt;/span&gt;&lt;br /&gt;Cari error/warning sebelumnya/berikutnya, jika ada.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Alt+F11&lt;/span&gt;&lt;br /&gt;Menambahkan unit ke dalam klausa uses.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Alt+F12 (pada form)&lt;/span&gt;&lt;br /&gt;Menampilkan form sebagai teks.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Alt+0&lt;/span&gt;&lt;br /&gt;Daftar window.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Alt+&amp;lt;Drag Mouse&amp;gt; / Alt+Shift+&amp;lt;Panah Atas/Bawah/Kanan/Kiri&amp;gt; (pada unit)&lt;/span&gt;&lt;br /&gt;Blok area tertentu. Kolom yang diblok hanya yang dilewati cursor saja.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Alt+&amp;lt;Drag Mouse&amp;gt; (komponen pada form)&lt;/span&gt;&lt;br /&gt;Memindahkan posisi komponen per pixel.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Ctrl+F2&lt;/span&gt;&lt;br /&gt;Keluar dari aplikasi.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Ctrl+F4 (pada unit)&lt;/span&gt;&lt;br /&gt;Tutup unit.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Ctrl+F9&lt;/span&gt;&lt;br /&gt;Compile project.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Ctrl+F11&lt;/span&gt;&lt;br /&gt;Membuka project.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Ctrl+F12&lt;/span&gt;&lt;br /&gt;Memilih unit.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Ctrl+E (pada unit)&lt;/span&gt;&lt;br /&gt;Incremental Search.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Ctrl+F (pada unit)&lt;/span&gt;&lt;br /&gt;Mencari teks.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Ctrl+K+C (pada unit)&lt;/span&gt;&lt;br /&gt;Sama seperti Copy + Paste.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Ctrl+K+I / Ctrl+K+U (pada unit)&lt;/span&gt;&lt;br /&gt;Menambah/mengurangi margin ke kanan/kiri sebanyak &amp;lt;Block indent&amp;gt; spasi pada baris yang di blok. &amp;lt;Block indent&amp;gt; bisa ditentukan dari Tools-&amp;gt;Editor Options, tab Source Options.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Ctrl+K+N (pada unit)&lt;/span&gt;&lt;br /&gt;Huruf besar semua pada baris yang di blok.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Ctrl+K+O (pada unit)&lt;/span&gt;&lt;br /&gt;Huruf kecil semua pada baris yang di blok.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Ctrl+K+R (pada unit)&lt;/span&gt;&lt;br /&gt;Menambahkan kode program dari file teks.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Ctrl+K+W (pada unit)&lt;/span&gt;&lt;br /&gt;Menyimpan kode program yang di blok ke file teks.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Ctrl+M (pada unit)&lt;/span&gt;&lt;br /&gt;Tambahkan baris kosong diatas cursor.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Ctrl+N (pada unit)&lt;/span&gt;&lt;br /&gt;Tambahkan baris kosong dibawah cursor.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Ctrl+R (pada unit)&lt;/span&gt;&lt;br /&gt;Mengganti teks.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Ctrl+S&lt;/span&gt;&lt;br /&gt;Save As.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Ctrl+Y (pada unit)&lt;/span&gt;&lt;br /&gt;Hapus 1 baris pada cursor.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Ctrl+&amp;lt;Angka 0-9&amp;gt; (pada unit)&lt;/span&gt;&lt;br /&gt;Memindahkan cursor ke bookmark.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Ctrl+&amp;lt;Enter&amp;gt; (pada unit)&lt;/span&gt;&lt;br /&gt;Jika cursor berada pada nama unit, akan membuka unit tersebut.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Ctrl+&amp;lt;Spasi&amp;gt; (pada unit)&lt;/span&gt;&lt;br /&gt;Menampilkan daftar identifier, procedure, function, method, event.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Ctrl+&amp;lt;Drag Mouse&amp;gt; (pada form)&lt;/span&gt;&lt;br /&gt;Memilih komponen-komponen pada komponen parent, misal memilih beberapa komponen pada panel (panel merupakan komponen parent).&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Ctrl+&amp;lt;Klik mouse pada identifier&amp;gt; (pada unit)&lt;/span&gt;&lt;br /&gt;Berpindah ke deklarasi pada item tersebut.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Ctrl+&amp;lt;Tab&amp;gt; / Ctrl+Shift+&amp;lt;Tab&amp;gt; (pada unit)&lt;/span&gt;&lt;br /&gt;Pindah antar unit.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Ctrl+&amp;lt;Panah Atas&amp;gt; / Ctrl+&amp;lt;Panah Bawah&amp;gt; (pada unit)&lt;/span&gt;&lt;br /&gt;Gulung (scroll) ke atas/bawah.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Ctrl+&amp;lt;Panah Kanan&amp;gt; / Ctrl+&amp;lt;Panah Kiri&amp;gt; (pada unit)&lt;/span&gt;&lt;br /&gt;Pindah antar kata.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Ctrl+Shift+F11&lt;/span&gt;&lt;br /&gt;Project Options.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Ctrl+Shift+S&lt;/span&gt;&lt;br /&gt;Save All.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Ctrl+Shift+&amp;lt;Angka 0-9&amp;gt; (pada unit)&lt;/span&gt;&lt;br /&gt;Toggle bookmark.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Ctrl+Shift+&amp;lt;Spasi&amp;gt; (pada unit)&lt;/span&gt;&lt;br /&gt;Jika cursor berada diantara deklarasi parameter procedure/function, akan menampilkan informasi parameter procedure/function.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Shift+F12&lt;/span&gt;&lt;br /&gt;Memilih Form.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Shift+&amp;lt;Klik&amp;gt; (komponen pada form)&lt;/span&gt;&lt;br /&gt;Memilih/tidak memilih komponen.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Shift+&amp;lt;Panah Atas&amp;gt; / Shift+&amp;lt;Panah Bawah&amp;gt; (komponen pada form)&lt;/span&gt;&lt;br /&gt;Mengurangi/menambah tinggi komponen.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Shift+&amp;lt;Panah Kanan&amp;gt; / Shift+&amp;lt;Panah Kiri&amp;gt; (komponen pada form)&lt;/span&gt;&lt;br /&gt;Menambah/mengurangi lebar komponen.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Shift+Ctrl+C (pada unit)&lt;/span&gt;&lt;br /&gt;Jika cursor berada pada baris deklarasi procedure/function pada suatu class, akan membuat definisi procedure/function jika belum ada.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Shift+Ctrl+&amp;lt;Panah Atas&amp;gt; / Shift+Ctrl+&amp;lt;Panah Bawah&amp;gt; (pada unit)&lt;/span&gt;&lt;br /&gt;Berpindah antara deklarasi dan definisi procedure/function.&lt;br /&gt;&lt;br /&gt;Catatan: Semua fungsi diatas sudah dicoba dan berjalan pada lingkungan IDE Delphi 7 Enterprise, dan semestinya juga pada versi yang lebih baru.&lt;/span&gt;</description><link>http://rudycs.blogspot.com/2009/06/tip-trik-dan-shortcut-ide-delphi.html</link><author>noreply@blogger.com (rudycs)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7234833807225482669.post-7910189606896998568</guid><pubDate>Wed, 03 Jun 2009 04:52:00 +0000</pubDate><atom:updated>2009-06-03T12:03:56.590+07:00</atom:updated><title>Binary Log MySQL (Bagian 3)</title><description>File Binary Log berisi data yang dinamakan “event”, merupakan deskripsi modifikasi database. Untuk menampilkan file log yang berupa file biner dalam bentuk teks, disediakan sebuah tool “mysqlbinlog.exe”. File ini terdapat pada direktori &lt;mysql install=&quot;&quot; dir=&quot;&quot;&gt;\bin. Cara pemakaian dari tool mysqlbinlog adalah sebagai berikut (jalankan dari command prompt).&lt;span class=&quot;fullpost&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;mysqlbinlog [options] log_file ...&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Contohnya perintah berikut ini akan menampilkan event pada file log “binlog.000001”.&lt;br /&gt;mysqlbinlog binlog.0000001&lt;br /&gt;&lt;br /&gt;Perintah diatas akan menampilkan event-event pada file log yang bersangkutan. Informasi yang terdapat pada event meliputi identitas server dimana perintah SQL dijalankan, waktu eksekusi perintah SQL, waktu yang dibutuhkan untuk eksekusi, dan lain-lain.&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYG8ODgPDQ9GFoYdG8N0bL38UvU2B1Ts2_YI1B5FUksvP2gRfkOiX_7zka_XfZSy-lARmB0rQ1BN84hFfJX02rASxVVb3moE6C7OB1gFXAI0AIajJWKN4PT1r7pysY_Aw8g3HEnCe1V1Y/s1600-h/mysqlbinlog0.JPG&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 305px; height: 320px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYG8ODgPDQ9GFoYdG8N0bL38UvU2B1Ts2_YI1B5FUksvP2gRfkOiX_7zka_XfZSy-lARmB0rQ1BN84hFfJX02rASxVVb3moE6C7OB1gFXAI0AIajJWKN4PT1r7pysY_Aw8g3HEnCe1V1Y/s320/mysqlbinlog0.JPG&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5342960664626652018&quot; border=&quot;0&quot; /&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;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Dari gambar diatas diperoleh informasi tentang perintah-perintah SQL yang terdapat pada file log:&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;CREATE DATABASE tesdb;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;CREATE TABLE tbl (a INTEGER PRIMARY KEY, b CHAR(10) NOT NULL, c DATETIME NULL);&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;INSERT INTO tbl (a, b) VALUES (1, &#39;aaaaa&#39;);&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Dengan file log tersebut kita bisa menjalankan perintah-perintah yang ada didalamnya. Bisa langsung dijalankan dengan menggunakan pipe yang diteruskan ke mysql.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;mysqlbinlog binlog.0000001 | mysql –u root&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Jika kita mempunyai lebih dari satu file log bisa menggunakan cara ini:&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;mysqlbinlog binlog.0000001 binlog.0000002 | mysql –u root&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Bisa juga menyimpan perintah-perintah pada file log tersebut pada suatu file teks dan menjalankan skrip yang terdapat didalamnya.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;mysqlbinlog binlog.000001 &gt; C:\binlog.sql&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;mysqlbinlog binlog.000002 &gt;&gt; C:\binlog.sql&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family:courier new;&quot;&gt;mysql -e &quot;source C:\binlog.sql&quot;&lt;/span&gt;&lt;/span&gt;&lt;/mysql&gt;&lt;/span&gt;</description><link>http://rudycs.blogspot.com/2009/06/binary-log-mysql-bagian-3.html</link><author>noreply@blogger.com (rudycs)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYG8ODgPDQ9GFoYdG8N0bL38UvU2B1Ts2_YI1B5FUksvP2gRfkOiX_7zka_XfZSy-lARmB0rQ1BN84hFfJX02rASxVVb3moE6C7OB1gFXAI0AIajJWKN4PT1r7pysY_Aw8g3HEnCe1V1Y/s72-c/mysqlbinlog0.JPG" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7234833807225482669.post-8537988423460687745</guid><pubDate>Tue, 02 Jun 2009 02:19:00 +0000</pubDate><atom:updated>2009-06-02T09:22:06.657+07:00</atom:updated><title>Binary Log MySQL (Bagian 2)</title><description>Terdapat beberapa format log pada Binary Log MySQL.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;STATEMENT. File log menyimpan perintah-perintah SQL.&lt;/li&gt;&lt;li&gt;ROW. File log menyimpan “event” yang menandakan bagaimana pengaruh terhadap baris data pada suatu tabel.&lt;/li&gt;&lt;li&gt;MIXED. Menggunakan format STATEMENT sebagai default, tapi akan berganti ke format ROW pada beberapa kondisi.&lt;/li&gt;&lt;/ul&gt;&lt;span class=&quot;fullpost&quot;&gt;Pengaturan format Binary Log diatur oleh parameter --binlog-format=type Misalnya untuk memilih format MIXED, parameternya menjadi --binlog-format=MIXED. Format log ini dapat diubah saat runtime. Terdapat variabel global binlog_format yang dapat digunakan untuk mengatur format log.&lt;br /&gt;Untuk mengganti format log ke STATEMENT gunakan salah satu dari perintah ini:&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;SET GLOBAL binlog_format = ‘STATEMENT’;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;SET GLOBAL binlog_format = 1;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Untuk mengganti format log ke ROW gunakan salah satu dari perintah ini:&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;SET GLOBAL binlog_format = ‘ROW’;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;SET GLOBAL binlog_format = 2;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Untuk mengganti format log ke MIXED gunakan salah satu dari perintah ini:&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;SET GLOBAL binlog_format = ‘MIXED’;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;SET GLOBAL binlog_format = 3;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Bisa juga tiap client yang terhubung mengganti format log dengan melakukan pengaturan terhadap nilai session dari binlog_format. Contohnya:&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;SET SESSION binlog_format = ‘STATEMENT’;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;SET SESSION binlog_format = ‘ROW’;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;SET SESSION binlog_format = ‘MIXED’;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;</description><link>http://rudycs.blogspot.com/2009/06/binary-log-mysql-bagian-2.html</link><author>noreply@blogger.com (rudycs)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7234833807225482669.post-7400449630848087074</guid><pubDate>Mon, 01 Jun 2009 05:25:00 +0000</pubDate><atom:updated>2009-06-01T12:31:50.508+07:00</atom:updated><title>Binary Log MySQL (Bagian 1)</title><description>Binary Log MySQL berisi semua pernyataan yang mengubah data. Tiap operasi INSERT, UPDATE, DELETE akan disimpan pada file log. Tidak hanya terbatas pada operasi tersebut saja, perintah yang melakukan perubahan terhadap struktur data seperti CREATE TABLE, ALTER TABLE dan lain-lain, juga disimpan pada file log. Sesuai dengan namanya, file log ini disimpan dalam bentuk biner, bukan dalam bentuk teks. Perintah yang tidak melakukan perubahan terhadap data&lt;span class=&quot;fullpost&quot;&gt; seperti operasi SELECT tidak disimpan.&lt;br /&gt;Supaya dapat menulis ke file log, berikan parameter --log-bin[=base-name] saat menjalankan server MySQL (mysqld). Jika pengaturan dilakukan dengan file konfigurasi MySQL (my.ini), tambahkan baris log-bin[=base-name] pada file konfigurasi MySQL.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;[mysqld]&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;log-bin=&quot;C:/Program Files/MySQL/MySQL 5.1/binlog&quot;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;File yang dihasilkan mempunyai nama sesuai dengan paramater yang telah diberikan (dalam contoh diatas: binlog) ditambah dengan ektensi berupa angka. Angka ini dimulai dengan angka 1, 2, 3 dan seterusnya yang membentuk urutan angka. Tiap kali server MySQL dijalankan atau pada saat melakukan “flush” terhadap log, file log baru akan dihasilkan. Contohnya:&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;binlog.000001&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;binlog.000002&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;binlog.000003&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;…&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Jika kita menambahkan ektensi pada parameter tersebut, ektensi tersebut otomatis akan diabaikan. Misalnya binlog.dat sama dengan binlog. Ada satu file lagi yang digunakan untuk mengatur file-file log yang ada. Nama file sama dengan base-name yang di -definisikan pada parameter dengan ekstensi .index. File ini berisi nama-nama file log yang pernah digunakan. Kita dapat mengubah nama file ini dengan menambahkan parameter --log-bin-index[=file-name]. Disarankan untuk tidak mengubah file ini supaya tidak terjadi masalah nantinya. Untuk menghapus semua file log yang ada, gunakan perintah RESET MASTER.&lt;/span&gt;</description><link>http://rudycs.blogspot.com/2009/06/binary-log-mysql-bagian-1.html</link><author>noreply@blogger.com (rudycs)</author><thr:total>11</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7234833807225482669.post-3363640674131288602</guid><pubDate>Mon, 25 May 2009 03:53:00 +0000</pubDate><atom:updated>2009-05-25T11:00:18.088+07:00</atom:updated><title>General Query Log MySQL</title><description>General Query Log pada MySQL berisi semua aktivitas pada saat client melakukan koneksi ke server atau pada waktu koneksi terputus dan query dari client yang dikirim ke server. Fasilitas ini sangat berguna untuk merekam segala aktivitas tiap client yang terhubung ke server. Bisa juga untuk mengetahui kesalahan yang mungkin terjadi dari perintah atau query yang dikirim client.&lt;br /&gt;Sama seperti Slow Query Log, sebelum MySQL 5.1.6 tujuan penulisan log&lt;span class=&quot;fullpost&quot;&gt; selalu ke file. Mulai MySQL 5.1.6 terdapat pilihan untuk menulis log ke file atau tabel atau keduanya.&lt;br /&gt;Tujuan penulisan log ditentukan dengan pilihan --log-output yang bisa berisi nilai &lt;span style=&quot;font-weight: bold;&quot;&gt;TABLE&lt;/span&gt;, &lt;span style=&quot;font-weight: bold;&quot;&gt;FILE&lt;/span&gt; atau &lt;span style=&quot;font-weight: bold;&quot;&gt;NONE&lt;/span&gt; (tidak menulis log). Jika tujuan penulisan ke tabel, maka tabel tujuan adalah mysql.general_log. Misalnya:&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;--log-output=TABLE&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;--log-output=FILE&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;--log-output=TABLE,FILE&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Sebelum MySQL 5.1.6, untuk mengaktifkan General Query Log dengan menggunakan pilihan --log[=file_name]. Mulai MySQL 5.1.6 gunakan pilihan --general_log yang bisa memiliki nilai 0 (tidak aktif) atau 1 (aktif). Sedangkan pilihan --general_log_file[=file_name] digunakan untuk menentukan direktori tempat file log, jika tujuan penyimpanan log pada file.&lt;br /&gt;Mulai MySQL 5.1.12 kita dapat mengaktifkan atau non aktifkan General Query Log pada saat MySQL sedang berjalan. Cara ini bisa digunakan misalnya untuk backup file log. Setelah General Query Log non aktif, ganti nama file log dan buat file log baru, kemudian aktifkan lagi General Query Log. Set ‘ON’ untuk mengaktifkan atau ‘OFF’ untuk non aktif.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;SET GLOBAL general_log = &#39;OFF&#39;;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;SET GLOBAL general_log = &#39;ON&#39;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Bisa juga mengaktifkan General Query Log dengan melakukan pengaturan file konfigurasi MySQL (my.ini).&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;[mysqld]&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;general-log=1&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;log-output=FILE&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;general-log-file=&quot;C:/Program Files/MySQL/MySQL 5.1/log.log&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;</description><link>http://rudycs.blogspot.com/2009/05/general-query-log-mysql.html</link><author>noreply@blogger.com (rudycs)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7234833807225482669.post-9126421111170017146</guid><pubDate>Fri, 22 May 2009 02:44:00 +0000</pubDate><atom:updated>2009-05-22T09:47:49.421+07:00</atom:updated><title>Slow Query Log MySQL</title><description>Slow Query Log pada MySQL berisi semua query SQL yang dijalankan (waktu eksekusi) melebihi selang waktu tertentu. Selang waktu yang dimaksud ditentukan pada variabel sistem server MySQL (mysqld). Saat menjalankan instance MySQL (mysqld.exe), terdapat pilihan &lt;span style=&quot;font-weight: bold;&quot;&gt;long_query_time&lt;/span&gt;, yang digunakan untuk pengecekan apakah akan menulis ke log atau tidak. Isi dari pilihan tersebut merupakan nilai dalam detik, jika suatu query yang dikirim dari client&lt;span class=&quot;fullpost&quot;&gt; dijalankan selama selang waktu lebih dari yang ditentukan dari pilihan long_query_time, maka query yang bersangkutan akan ditulis ke file log. Sebelum MySQL 5.1.21 nilai minimum dari pilihan long_query_time adalah 1 dan harus tipe integer, mulai MySQL 5.1.21 nilai minimum adalah 0 dan dimungkinkan mengisi nilai mikro detik, tapi hanya nilai integer yang diambil dan ditulis ke tabel jika tujuan penulisan log adalah ke tabel.&lt;br /&gt;Sebelum MySQL 5.1.6 log selalu ditulis ke sebuah file. Mulai MySQL 5.1.6 dimungkinkan untuk menulis ke file, tabel atau keduanya. Untuk mengaktifkan Slow Query Log, gunakan parameter --log-slow-queries[=file_name]. Pilihan ini digunakan sebelum MySQL 5.1.29, mulai MySQL 5.1.29 gunakan pilihan --slow-query-log. Nilai dari pilihan ini bisa 0 (tidak aktif) atau 1 (aktif). Jika tujuan penulisan file log adalah ke file, gunakan pilihan --slow-query-log-file[=file_name]. Tujuan penulisan log bisa ditentukan dengan pilihan --log-output yang bisa berisi nilai &lt;span style=&quot;font-weight: bold;&quot;&gt;TABLE&lt;/span&gt;, &lt;span style=&quot;font-weight: bold;&quot;&gt;FILE &lt;/span&gt;atau &lt;span style=&quot;font-weight: bold;&quot;&gt;NONE &lt;/span&gt;(tidak menulis log). Jika tujuan penulisan ke tabel, maka tabel tujuan adalah mysql.slow_log. Misalnya:&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;--log-output=TABLE&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;--log-output=FILE&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;--log-output=TABLE,FILE&lt;/span&gt;&lt;br /&gt;Bisa juga dengan melakukan pengaturan file konfigurasi MySQL (my.ini).&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;[mysqld]&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;slow-query-log=1&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;log-output=FILE&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;slow-query-log-file=&quot;C:/Program Files/MySQL/MySQL 5.1/slowlog.log&quot;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Catatan: Penulisan tanda - atau _ pada yang digunakan sebagai penghubung tiap kata (pada parameter maupun file konfigurasi MySQL) dapat digunakan untuk hasil yang sama. Parameter-parameter berikut memiliki arti dan hasil yang sama.&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;--log-output=TABLE&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;--log_output=TABLE&lt;/span&gt;&lt;/span&gt;</description><link>http://rudycs.blogspot.com/2009/05/slow-query-log-mysql.html</link><author>noreply@blogger.com (rudycs)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7234833807225482669.post-6503091180998923040</guid><pubDate>Thu, 21 May 2009 03:44:00 +0000</pubDate><atom:updated>2009-05-21T10:47:40.460+07:00</atom:updated><title>Error Log MySQL</title><description>Error log pada MySQL berisi kesalahan yang terjadi pada saat MySQL dijalankan atau dihentikan. Log ini juga berisi kesalahan yang terjadi saat MySQL sedang berjalan. Kesalahan yang dimaksud adalah kesalahan yang sifatnya kritis, misalnya jika terjadi masalah pada tabel yang memerlukan tindakan perbaikan pada tabel tersebut, MySQL akan menulis pesan ke log. MySQL tidak akan menulis pesan ke log untuk kesalahan seperti duplikasi data pada suatu tabel karena primary key, dan lain-lain.&lt;span class=&quot;fullpost&quot;&gt;&lt;br /&gt;Menentukan file log ini dapat dilakukan dengan menambahkan entry log-error pada file konfigurasi MySQL (file “my.ini”) pada bagian mysqld. Dari sini dapat kita tentukan nama file log dan direktori tempat penyimpanan file log. Default disimpan pada direktori data MySQL.&lt;br /&gt;&lt;span style=&quot;font-size:85%;&quot;&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;[mysqld]&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: courier new;&quot;&gt;log-error=&quot;C:/Program Files/MySQL/MySQL 5.1/errlog.err&quot;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Bisa juga dengan menambahkan parameter --log-error[=file_name] pada saat menjalankan MySQL.&lt;br /&gt;&lt;/span&gt;</description><link>http://rudycs.blogspot.com/2009/05/error-log-mysql.html</link><author>noreply@blogger.com (rudycs)</author><thr:total>0</thr:total></item></channel></rss>