Tag-Archive for » object pascal «

Tuesday, February 17th, 2009 | Author: Riza

Static method didefinisikan sebagai method (procedure/function) yang beroperasi pada level class, bukan pada level object. Dengan kata lain, sebuah method yang dideklarasikan sebagai static method bisa dipanggil tanpa terlebih dahulu membuat instan dari class tempat method tersebut dideklarasikan. Karena bisa dipanggil tanpa proses inisiasi object, sebuah static method hanya akan disimpan pada satu lokasi memory saja untuk satu aplikasi. Maka dengan sendirinya, walaupun merujuk pada suatu class, static method tidak bisa diakses melalui variabel seperti Self pada object pascal serta this pada C++.

Pada object pascal, static method disebut juga dengan class method (class function atau class procedure). Implementasi adalah dengan menambahkan reserved word class pada awal pendeklarasian sebuah procedure dan function. Perhatikan contoh cara mendeklarasikan static method pada object pascal berikut ini.

Continue reading

Tuesday, February 19th, 2008 | Author: Riza

Ada beberapa cara yang bisa digunakan untuk membuat single instance application. Saya hanya mau membagi sedikit trik lama yang sering saya gunakan yaitu dengan memanfaatkan API dari windows. Fungsi yang saya gunakan adalah CreateFileMapping dengan sedikit memodifikasi isi dari file project. Cara menggunakannya adalah sebagai berikut:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
...
 
uses Windows, … ;
 
const
  MAX_SIZE_HIGH = 0;
  MAX_SIZE_LOW = 32;
  { Bisa diganti dengan string apa saja yang akan menjadi Id
  dari aplikasi.}
  APP_IDENTIFIER = ‘th3-4ppl1c4t10nk3y’;
 
var
  hMap: THandle;
 
begin
  Application.Initialize;
 
  hMap := CreateFileMapping(0, nil, PAGE_READONLY, MAX_SIZE_HIGH,
  MAX_SIZE_LOW, APP_IDENTIFIER);
  if (hMap <> 0) and (GetLastError = ERROR_ALREADY_EXIST) then
 
  begin
    CloseHandle(hMap);
    Application.Terminate;
  end;
 
  …
 
  Application.Run;
end.

Semoga bermanfaat.

Monday, November 19th, 2007 | Author: Riza

Beberapa hari yang lalu aku bikin fungsi untuk mengambil MAC Address dari ethernet card. Fungsinya aku beri nama GetMacAddress(AEthNumber: Byte). Kembalian dari fungsi ini adalah string dari MAC address ethernet card ber-index AEthNumber. Kalau PC hanya mempunyai sebuah ethernet card, AEthNumber bisa diisi dengan 0 (nol). Fungsi GetMacAddress memanfaatkan unit NB30 bawaan delphi yang berisi beberapa record serta fungsi untuk mengambil informasi network device melalui NetBios.

Mumpung inget, tak dokumentasikan di sini. Sekalian share kali aja ada yang perlu. Code-nya seperti di bawah ini.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
uses NB30;
 
function GetMacAddress(AEthNumber: Byte): string;
var
  ncb: PNCB;
  errorCode: Char;
  adapter: PAdapterStatus;
begin
 
  New(ncb);
  { Inisiasi isi memory pada pointer ncb dengan char 0 };
  FillChar(ncb^, SizeOf(TNCB), 0);
  ncb^.ncb_command := Char(NCBRESET);
  ncb^.ncb_lana_num := Char(AEthNumber);
  errorCode := NetBios(ncb);
 
  { Reset kembali isi memory pointer nbc dengan char 0 };
  FillChar(ncb^, SizeOf(TNCB), 0);
  ncb^.ncb_command := Char(NCBASTAT);
  ncb^.ncb_lana_num := Char(AEthNumber);
  { Harus berisi 16 karakter }
 
  StrPCopy(ncb^.ncb_callname, '*         ');
 
  New(adapter);
  FillChar(adapter^, SizeOf(TAdapterStatus), 0);
  ncb^.ncb_buffer := Pointer(adapter);
  ncb^.ncb_length := SizeOf(TAdapterStatus);
 
  errorCode := NetBios(ncb);
  if (errorCode = Char(NRC_GOODRET)) or
  (errorCode = Char(NRC_INCOMP)) then
    Result := IntToHex(Ord(adapter^.adapter_address[0]), 2) + '-' +
          IntToHex(Ord(adapter^.adapter_address[1]), 2) + '-' +
          IntToHex(Ord(adapter^.adapter_address[2]), 2) + '-' +
          IntToHex(Ord(adapter^.adapter_address[3]), 2) + '-' +
          IntToHex(Ord(adapter^.adapter_address[4]), 2) + '-' +
          IntToHex(Ord(adapter^.adapter_address[5]), 2)
  else
    Result := '00-00-00-00-00-00';
 
  Dispose(ncb);
  Dispose(adapter);
end;

Begitu saja semoga bermanfaat. Kali aja ada yang mau ikutan nambahin.

Tuesday, October 23rd, 2007 | Author: Riza

Bagaimana cara membuat sebuah selector grayscale-bitmap?

Kita tahu, bitmap adalah citra yang dihasilkan dari kumpulan pixel berwarna. Warna dari pixel ini berupakan perpaduan dari warna merah (R), hijau (G), dan biru (B). Intensitas yang berbeda untuk masing-masing komponen warna, ketika dicampur akan menghasilkan warna baru yang berbeda juga.

Masing-masing komponen warna memiliki intensitas dari 0 (nol) sampai 255. Sehingga jumlah warna yang berbeda yang bisa dibuat dengan mencampur komponen warna (R, G, dan B) adalah 24bit, atau setara dengan:

Continue reading

Thursday, October 11th, 2007 | Author: Riza

Beberapa hari yang lalu ada yang tanya di salah satu forum delphi, bagaimana cara membuat sebuah class yang bisa mengelola sekumpulan object baik itu object bertipe data sama maupun berbeda. Aku rasa ngga ada salahnya kalau di-share juga di sini. Pada contoh berikut, akan dibuat sebuah class TTableManager. Class ini akan mengelola sekumpulan object bertipe data TTable. Source code-nya terdiri dari 2 file, yaitu file unit berekstensi .pas, serta file project delphi berekstensi .dpr.

Continue reading

Category: Delphi  | Tags: , ,  | 2 Comments