Archive

Archive for March, 2007

Enhancements Since Delphi7

March 30, 2007 Leave a comment

Pagi tadi, pas blogwalking di CDN, ada artikel baru seputar berbagai perbaikan atau fitur baru yang ada di Delphi setelah Delphi 7, artinya fitur baru yang ada di Delphi2005, Delphi2006 dan Delphi2007.

Selengkapnya baca:
New Delphi Language Features Since Delphi7
New IDE Features Since Delphi7
New VCL Features Since Delphi7

Well.. sudahkah Anda mencobanya..?

Categories: News

Convert.exe Like ?

March 22, 2007 Leave a comment

Pada artikel sebelumnya, dibahas tentang bagaimana memanfaatkan tool convert.exe untuk mengubah format file DFM, baik dari text ke binary maupun sebaliknya. Nah pada artikel ini akan dibahas bagaimana melakukan konversi tersebut dengan menggunakan Delphi, tentu saja masih dengan fasilitas yang sederhana dan minim.

Deteksi Jenis Format

Nah karena format file DFM ada 2 (dua), yaitu text dan binary, maka tool harus mampu melakukan pendeteksian jenis format file yang diberikan dan kemudian melakukan konversi ke format yang sesuai, apakah text->binary atau binary-text.

Format binary ditandai dengan 3 byte $FF $0A $00 pada awal file, sedangkan format text ditandai dengan 6 karakter ‘object’ pada awal file.

Fungsi Konversi

Untuk melakukan konversi text->binary, Delphi sudah menyediakan fungsi ObjectTextToBinary dan ObjectTextToResource, dan fungsi ObjectBinaryToText dan ObjectResourceToText untuk konversi binary->text.

Selengkapnya dapat disimak pada kode berikut:

program MyConvert;

{$APPTYPE CONSOLE}

uses
  SysUtils, Classes;

var
  FileName : string;
  ObjDFM  : TMemoryStream;
  ObjOut  : TMemoryStream;

  IsBinary : Boolean;
  Header: array[0..2] of Byte;

begin
  FileName := ParamStr(1);

  ObjDFM := TMemoryStream.Create;
  ObjDFM.LoadFromFile(FileName);
  ObjDFM.Position := 0;
  ObjDFM.Read(Header, SizeOf(Header));
  IsBinary := (Header[0] = $FF) and (Header[1] = $0A) and (Header[2] = $00);

  ObjDFM.Seek(0, soFromBeginning);
  ObjOut := TMemoryStream.Create;
  if IsBinary then
    ObjectResourceToText(ObjDFM, ObjOut)
  else
    ObjectTextToResource(ObjDFM, ObjOut);

  ObjOut.Position := 0;
  ObjOut.SaveToFile(FileName);

  ObjOut.Free;
  ObjDFM.Free;
end.

Catatan: kode diatas masih sederhana, bersifat ‘proof of concept’ aja, belum ada error / exception handling. Hal ini untuk mempermudah pemahaman dan mempersingkat kode. 🙂

Convert.exe Like ?

Nah, tool yang sudah kita buat ini apakah secara ‘fungsi’ sama dengan Convert.exe atau bukan, Anda sendiri lah yang memutuskan. Yang jelas saya hanya ingin menunjukkan saja bahwa pembuatan tool tersebut relatif cukup mudah.

Salam.

Categories: Delphi, Did You Know

DFM Converter

March 15, 2007 1 comment

Seputar DFM

DFM adalah ekstensi khas dari Delphi yang berisi informasi object / komponen di dalam suatu form atau datamodule. Terdapat 2 (dua) versi format file DFM, yaitu binary dan text. Format file binary berupa stream object sedangkan format text berupa file teks biasa yang dapat dibaca.

DFM Binary format
Gambar DFM format binary

DFM text format
Gambar DFM format text

Walaupun kedua format tersebut dapat ditangani dengan baik oleh Delphi, namun bagi saya, akan lebih mudah membaca dalam format text. Dengan membaca file text tersebut, sedikit banyak saya dapat menggambarkan bagaimana bentuk form dan kondisi object – object yang ada di dalamnya.

Umumnya, ketika kita ingin membaca file DFM dalam format binary, kita akan menemui kesulitan, mau tidak mau kita harus membukanya melalui Delphi. Dan tahukah Anda, bahwa Delphi sudah menyediakan tool untuk melakukan konversi file DFM dari format binary ke format text, atau sebaliknya. Tool tersebut adalah convert.exe yang terletak di folder bin Delphi, dimana file yang akan dikonversi disertakan pada parameter 1 (satu).

DFM conversion
Gambar Tool Convert dari Delphi

Penggunaan convert.exe

Untuk melakukan konversi dari format binary ke format text, maka parameter pertama adalah nama file DFM dalam format binary, ekstensi dari nama file tersebut tidak harus .dfm, namun bisa sembarang. Sebagai output adalah file dengan ekstensi txt.

Untuk melakukan konversi dari format text ke format binary, maka parameter pertama adalah nama file DFM dalam format binary. Walaupun ekstensi dari nama file bisa sembarang, namun sebaiknya hindari ekstensi dfm karena akan terjadi konflik ketika output file dihasilkan. Hal ini disebabkan karena eksetensi output adalah dfm sehingga akan terjadi kegagalan karena file tersebut sudah ada sebelumnya.

Nah berdasarkan penjelasan di atas, ketika kita ingin mengkonversi file DFM secara permanen, misalnya mengubah format binary ke text, maka kita harus melakukannya dalam 2 (dua) langkah, yaitu:

  • jalankan convert.exe dengan parameter file DFM yang ingin di konversi, misalnya test.dfm
  • rename file output hasil konversi, test.txt menjadi test.dfm

Otomatisasi convert.exe

Apabila penggunaan convert.exe dirasa merepotkan, kita dapat memudahkannya melalui file batch. Contoh berikut merupakan otomatisasi konversi format binary ke text. Untuk konversi sebaliknya, silahkan dimodifikasi.


@echo off
"C:\Program Files\Borland\BDS\4.0\bin\convert.exe" %1
move /y %~dpn1.txt %1

Integrasi ke IDE
Proses konversi pun dapat kita ‘tempel’ pada Menu IDE Delphi dengan pertimbangan bahwa kita tidak perlu keluar dari Delphi, membuka shell command dan menjalankan proses konversi.
Tools-DFM

Tools-DFM

Cukup klik menu konversi dan isikan parameter file yang akan dikonversi. Nah caranya adalah sebagai berikut:

  • Pilih menu Tools -> Configure Tools;
  • Pada jendela Tools Option, pilih tombol Add;
  • Pada jendela Tool Properties, isikan caption menu pada field Title, nama file batch pada field Program, dan macro parameter pada field Parameters. Sebagai contoh gambar berikut:
  • Tools-Properties

  • Klik OK -> Close.

Selamat menikmati 🙂

Secret Tips:
Beberapa penggunaan dan otomatisasi yang sudah dipaparkan sebelumya dapat dioptimalkan lagi dengan petunjuk berikut:
—————————————————————-
Delphi Form Conversion Utility Version 7.0
Copyright (c) 1995,2002 Borland Software Corporation
Usage: convert.exe [-i] [-s] [-t | -b]
-i Convert files in-place (output overwrites input)
-s Recurse subdirectories
-t Convert to text
-b Convert to binary
—————————————————————-

Categories: Delphi, Did You Know

IDE Shortcut Keys

March 13, 2007 Leave a comment

Penggunaan shortcut key banyak diminati karena aksesnya yang cukup cepat dan praktis. Umumnya akses suatu fasilitas dapat dijangkau dengan maksimal 3 (tiga) kombinasi penekanan tombol keyboard saja.

IDE Delphi dibekali dengan banyak shortcut untuk mengakses fasilitas yang ada, namun sayang sekali baru sedikit yang kita gunakan, bahkan mungkin dari sedikit yang kita gunakan tersebut, adalah shortcut yang standar dan banyak dikenal, shortcut lain yang merupakan shortcut khas IDE Delphi malah belum kita kenal.

Nah, untuk lebih memperkenalkan shortcut default yang disediakan IDE Delphi, berikut beberapa diantaranya:

Shortcut untuk Code Insight
Code Parameters CTRL+SHIFT+SPACE
Code Completion CTRL+SPACE
Code Templates CTRL+J

Shortcut untuk Class Completion
Class Completion CTRL+SHIFT+C
Class Nav Up CTRL+SHIFT+?
Class Nav Down CTRL+SHIFT+?

Shortcut untuk Jendela Message
Previous Message ALT+F7
Next Message ALT+F8

Shortcut untuk Jendela IDE
Code Explorer CTRL+SHIFT+E
Project Manager CTRL+ALT+F11
Window List ALT+0
Object Inspector F11
Code Browsing ALT+?
Pallete Filtering CTRL+ALT+P

Shortcut untuk Jendela debugger
Event Logs CTRL+ALT+V
Breakpoints CTRL+ALT+B
Watches CTRL+ALT+W
Threads CTRL+ALT+T

Shortcut untuk Jendela To-Do List
Add Item CTRL+SHIFT+T

Shortcut untuk Operasi Editing
Comment / Uncomment CTRL+/
Blocking Mode Line CTRL+O+L
Blocking Mode Column CTRL+O+C

Shortcut untuk Operasi Debugging
Trace Into F7
Step Over F8
Trace to Next Source Line SHIFT+F7
Run to Cursor F4
Run until Return SHIFT+F8
Program Reset CTRL+F2
Evaluate / Modify CTRL+F7
Add Watch CTRL+F5
Toggle Breakpoint F5

Shortcut untuk Operasi Kompilasi
Project Commands CTRL+F9
Syntax Check F4
Options CTRL+SHIFT+F11

Categories: Delphi, Did You Know

Show Compiler Progress

March 8, 2007 Leave a comment

Dahulu kala, saya terkejut ketika melihat sesuatu yang lain pada IDE rekan saya, yaitu tampilnya jendela proses kompilasi ketika suatu project atau package di kompilasi / link. Informasi yang ditampilkan meliputi nama project, nama unit yang sedang di kompilasi, nomor baris, jumlah keseluruhan baris kode yang telah di kompilasi, jumlah hint, jumlah warning dan jumlah error yang terjadi.

Compiler Progress Window

Ternyata jendela tersebut adalah salah satu fitur IDE Delphi. Dan sejak saat itulah saya aktifkan fasilitas tersebut mengingat betapa informatifnya fasilitas tersebut bagi saya.

Kemudian beberapa waktu yang lalu kejadian di atas terulang kembali, namun dengan pelaku yang berbeda. Yaitu rekan saya yang kebingungan dengan tampilnya jendela proses kompilasi yang ada pada IDE Delphi saya. Ah.. saya jadi teringat masa lalu dan berpikir bahwa ternyata bukan saya saja yang belum mengetahui fasilitas ini. Kemudian saya jelaskan bahwa hal tersebut adalah fasilitas standar pada IDE Delphi, dan berikut cara aktivasinya pada Turbo Delphi, untuk Delphi7 tidak jauh berbeda.

  • Klik menu Tools -> Options untuk menampilkan jendela Options;
  • Pilih Environment Options;
  • Pada kotak Compiling and Running, aktifkan pilihan Show compiler progress;
  • Pilih tombol OK untuk mengaktifkan fasilitas.

Turn on Compiler Progress Window

Dan fasilitas tersebut akan langsung aktif tanpa perlu restart Delphi.

Categories: Delphi, Did You Know

Built-in Conversion Utils

March 6, 2007 2 comments

Topik kali ini adalah mengenai berbagai macam fungsi konversi yang telah disediakan oleh Delphi namun sering kali tidak kita ketahui karena keterbatasan dalam menggali source code dan Help yang disediakan oleh Delphi.

Sering kali kita membuat fungsi sendiri bagaimana melakukan konversi / perhitungan temperatur udara dari satuan Celcius ke Fahrenheit, atau bagaimana perhitungan konversi jarak dari satuan Kilometer ke satuan Mil, atau bagaimana perhitungan konversi berat dari satuan Kilogram ke satuan Pons dan sebagainya.

Namun, tahukah Anda bahwa sesungguhnya Delphi sudah menyediakan beberapa fungsi konversi yang siap kita gunakan? Ah, mungkin Anda terkejut karena tidak menyangka. Ya Delphi sudah menyediakan fungsi konversi yang siap kita gunakan, mulai dari konversi Luas Bidang, Jarak, Berat, Temperatur, Waktu, Volume bahkan Mata Uang EURO.

Tidak percaya? Coba buka dokumentasi Delphi dan berikan keyword Convert. Dan berikut hasilnya:

Convert Routine

Converts a measurement from one set of units to another.

Unit
ConvUtils

Syntax
[Delphi] function Convert(const AValue: Double; const AFrom: TConvType; const ATo: TConvType): Double; overload;

[Delphi] function Convert(const AValue: Double; const AFrom1: TConvType; const AFrom2: TConvType; const ATo1: TConvType; const ATo2: TConvType): Double; overload;

Description
Call Convert to convert the value AValue from one set of measurement units to another.

Using the first syntax, the AFrom parameter specifies the current units of the measurement AValue. Convert returns the corresponding measurement in the units specified by ATo. For example, the following line converts a temperature measurement from degrees Fahrenheit to degrees Kelvin:

Note:
TempInKelvin := Convert(StrToFloat(Edit1.Text), tuFahrenheit, tuKelvin);

Note:
TempInKelvin = Convert(StrToFloat(Edit1->Text), tuFahrenheit, tuKelvin);

Using the second syntax, the AFrom1 parameter and AFrom2 parameter specify the current units of AValue, where the units for AValue are AFrom1 per AFrom2. Convert returns the corresponding measurement in the units ATo1 per ATo2. For example, the following call converts miles per gallon to kilometers per liter:
Note:
nKPL := Convert(StrToFloat(Edit1.Text), duMiles, vuGallons, duKilometers, vuLiter);

Note:
double nKPL = Convert(StrToFloat(Edit1.Text), duMiles, vuGallons, duKilometers, vuLiter);

The units specified by AFrom and ATo, AFrom1 and ATo1, and AFrom2 and ATo2 must be in the same conversion family (they must measure the same thing). You can check whether two TConvType values are in the same conversion family by calling CompatibleConversionTypes . If the units are not compatible, Convert raises an EConversionError exception.

Note:
The StdConvs unit defines several families of TConvType values. See conversion family variables for a list of the predefined families of measurement units and the measurement units in each family. In addition, you can register your own conversion families and units using the RegisterConversionType and RegisterConversionFamily functions.

Note:
Convert performs its conversion by converting AValue from the AFrom units to the base units of its conversion family, and then from the base units to the ATo units. If the AFrom units and the ATo units differ greatly from the base units of the conversion family, this can lead to problems such as overflow. You can ameliorate these problems by registering your own conversion families that are narrower subsets of a broad conversion family.

Jika Anda kurang puas dengan contoh penggunaannya, ada contoh penggunaan fungsi Convert pada folder ConvertIt. Dan sekiranya Anda kurang puas dengan konversi yang disediakan, Anda dapat membuat sendiri rutin konversi Anda. Menarik bukan? 🙂

Categories: Delphi, Did You Know