Jaket delphi v. 1 telah tiba

Jaket Delphi Indonesia akan segera diproduksi :

newdesignasli

Posted in Delphi. 5 Comments »

Burning Disk from Application

Pernah membuat aplikasi CD Burner?

Beberapa bulan yang lalu, saya mendapat tugas dari kantor untuk membuat sebuah aplikasi yang akan disebarkan ke seluruh kantor cabang di Indonesia. Dan aplikasi ini harus bisa menggandakan diri sendiri (Burning) tanpa menggunakan aplikasi lain (Seperti Nero). Sebelumnya saya blom pernah membuat aplikasi yang seperti ini. 😦

Akhirnya saya bergoogling ria untuk mencari informasi atau komponen yang copotable dengan delphi. Dalam hati, wah klo gak ada komponennya, bisa2 bikin wrapper sendiri, dan pasti butuh waktu lagi. Namun ternyata ada komponen tersebut dan bagusnya lagi it’s free. 😀 Namun sayang, saya lupa link original untuk mendownloadnya. 🙂

The TCDBurner component allows your code to burn files to CDR/W discs on your Windows XP®/2003 system.  This component will NOT work on systems other than Windows XP/2003 systems (although it gives a nice error message back to your program).

This was actually quite a pain. I started off by realizing that MS has probably exposed the functionality in XP. So, I searched on Google for “CD Burn site:msdn.microsoft.com” where I found the info about ICDBurn.

I saw that it lived in Shell32.DLL, so I tried simply importing that from Delphi. Unfortunately, the type library for it doesn’t export (I’m kinda fudging the technical details here) the interface, so Delphi doesn’t pick it up. I was banging my head against the wall, so I went back to MSDN’s ICDBurn article.

From there, I learned which header file / .idl file contained the reference (it shipped with Visual Studio.NET and also is in the IE SDK). From there, I found the information on the object that implements this interface. I got the CLSID of the object, and instantiated it from Delphi. Success. Now, the only problem is that I only had the interface in IDL, which had to be converted to Delphi (since it couldn’t be imported, as I mentioned above). This was a real pain, and entailed lots of access violations and internet research, as I figured out how each IDL parameter mapped to a Delphi parameter.

Later, I wrapped the Delphi6 code into an ActiveX object for VB6.  I also figured out a much simpler way to do this using .IDL for C#.

See which the component and sample code

Show Application Version

Kadang kita dalam membangun aplikasi, kita tidak begitu memperhatikan versi aplikasi. Sebenarnya versi ini sangat membantu dalam pengembangannya. Untuk membuat versi pada aplikasi yang kita buat, Klik Project > Option > Version Info. Klik Include version information in project. Untuk informasi pada aplikasi, silahkan isi tabel di bawahnya.

version1

Untuk membuat versi pada aplikasi agar bisa ditampilkan pada aplikasi kita, gunakan fungsi dibawah ini.

the Code

Creating ShortCut to Desktop

List Program berikut adalah code untuk mengkopi folder aplikasi dan isinya serta membuatkan shortcut executable pada desktop. 🙂 usesnya apa rada lupa.. Yang penting di coba dulu dech.. 😀


uses ShlObj, ShellApi..

procedure CreateShortCut(Source : String);
var
   IObject : IUnknown;
   ISLink : IShellLink;
   IPFile : IPersistFile;
   PIDL : PItemIDList;
   InFolder : array[0..MAX_PATH] of Char;
   TargetName : String;
   LinkName : WideString;
begin
   TargetName := Source;

   IObject := CreateComObject(CLSID_ShellLink) ;
   ISLink := IObject as IShellLink;
   IPFile := IObject as IPersistFile;

   with ISLink do
   begin
     SetPath(pChar(TargetName)) ;
     SetWorkingDirectory(pChar(ExtractFilePath(TargetName))) ;
   end;

   SHGetSpecialFolderLocation(0, CSIDL_DESKTOPDIRECTORY, PIDL) ;
   SHGetPathFromIDList(PIDL, InFolder) ;

   LinkName := InFolder + '\App ShortCut.lnk';
   IPFile.Save(PWChar(LinkName), false) ;
end;

Next code click here

Fungsi Mengakses Database

Beberapa dari kita tentunya pernah mengalami saat menuliskan kode untuk mengakses database akan tetapi kita sendiri belum tentu tahu database apa yang nantinya akan dipakai pada akhir develop. Untuk itu, gw mencoba untuk membuat fungsi sederhana untuk mengakses database pada aplikasi dengan delphi dan memakai database seperti Dbase, Paradox atau Access. Dan setelah aplikasi gw selesai, ternyata aplikasi yg barusan gw bangun akan menggunakan database yang berbeda dengan yang gw pakai. Lalu gw nanya pada diri gw sendiri : ‘bagaimana dengan kode yang gw bikin ?’ Seperti ini seringkali terjadi pada aplikasiku. Dengan kondisi ini, maka gw mencoba untuk membuat 2 buah fungsi untuk mengakses database dari database apapun. Seperti ini code yang gw bikin :

Mengeksekusi perintah SQL :


procedure RunSQL(sSQL : String);
var
          qrySQL : TADOQuery;
begin
       try
          qrySQL := TADOQuery.Create(Application);
          qrySQL.Connection := adoConnection;
          qrySQL.SQL.Clear;
          qrySQL.SQL.Text := sSQL;
          qrySQL.ExecSQL;
      finally
          qrySQL.Free;
      end;
end;

fungsi kedua