Spiga

Showing posts with label Delphi. Show all posts
Showing posts with label Delphi. Show all posts

Hijri Date Conversion Unit - Delphi Source Code

Here’s a little Hijri calendar conversion unit that I wrote a few years ago. I converted this from a JavaScript that I found on a website.
Hope this would be useful to you.
// Created by Irwan A. 
// irwan.a@gmail.com 
// 
// adapted from a Javascript source code that 

// i found somewhere on the net. 
// but i lost the URL. hope the author doesn't mind :) 
// Month & day names are taken from 
// http://en.wikipedia.org/wiki/Islamic_calendar 
// thanks to @bu @hs@n  
// for pointing this out 

unit Hijri; 

interface 

uses 
Windows, Messages, SysUtils, Classes, Graphics, 
Controls, Math; 

type 
THijriDate = record 
HijriDate: integer; 
HijriMonth: integer; 
HijriYear: integer; 
JulianDate: integer; 
HijriDay: string; 
end; 

function IntPart(Num : real) : integer; 
function WeekDay(Wdn : integer) : string; 
function Gre2Hijri(var D, M, Y : word): THijriDate; 
function HijriMonths(Mth : integer) : string; 

implementation 

function IntPart(Num : real) : integer; 
begin 
if Num < -0.0000001 then 
Result := Ceil(Num - 0.0000001) 
else 
Result := Floor(Num + 0.0000001); 
end; 

function WeekDay(Wdn : integer) : string; 
begin 
case Wdn of 
0: Result := 'Al-Ithnayn'; 
1: Result := 'Ath-Thalatha'; 
2: Result := 'Al-Arba`a'; 
3: Result := 'Al-Khamis'; 
4: Result := 'Al-Jum`a'; 
5: Result := 'As-Sabt'; 
6: Result := 'Al-Ahad'; 
end; 
end; 

function Gre2Hijri(var D, M, Y : word): THijriDate; 
var 
jd, l, n, j : integer; 
begin 
if ((Y > 1582) or ((Y = 582) and (M > 10)) 
or ((Y = 1582) and (M = 10) and (D>14))) then 
begin 
jd := IntPart((1461 * (Y + 4800 + 
IntPart((M - 14)/12)))/4) + 
IntPart((367 * (M - 2 - 12 * 
(IntPart((M - 14)/12))))/12) - 
IntPart((3 * (IntPart((Y + 4900 + 
IntPart((M - 14)/12))/100)))/4) + D - 32075; 
end 
else 
begin 
jd := 367 * Y - IntPart((7 * (Y + 5001 + 
IntPart((M - 9)/7)))/4) + IntPart((275 * M)/9) 
+ D + 1729777; 
end; 

l := jd -1948440 + 10632; 
n := IntPart((l - 1)/10631); 
l := l - 10631 * n + 354; 

j := (IntPart((10985 - l)/5316)) * 
(IntPart((50 * l)/17719)) + (IntPart(l/5670)) * 
(IntPart((43 * l)/15238)); 

l := l - (IntPart((30 - j)/15)) * 
(IntPart((17719 * j)/50)) - (IntPart(j/16)) * 
(IntPart((15238 * j)/43)) + 29; 

m := IntPart((24 * l)/709); 
d := l - IntPart((709 * m)/24); 
y := 30 * n + j - 30; 

Result.HijriDate := d; 
Result.HijriMonth := m; 
Result.HijriYear := y; 
Result.JulianDate := jd; 
Result.HijriDay := WeekDay(jd mod 7); 

end; 

function HijriMonths(Mth : integer) : string; 
begin 
case Mth of 
1: Result := 'Muharram'; 
2: Result := 'Safar'; 
3: Result := 'Rabi'' al-awwal'; 
4: Result := 'Rabi'' al-thani'; 
5: Result := 'Jumada al-awwal'; 
6: Result := 'Jumada al-thani'; 
7: Result := 'Rajab'; 
8: Result := 'Sha''ban'; 
9: Result := 'Ramadan'; 
10: Result := 'Shawwal'; 
11: Result := 'Dhu al-Qi''dah'; 
12: Result := 'Dhu al-Hijjah'; 
end; 
end; 

end. 

Note:
As the hijri calendar is based on the lunar movement, the dates calculated using this code may be off +1/-1 day from the actual date. When determining the beginning of the Ramadan or Shawwal (or other important dates), please consult the local authorities for such matter.

Tag Property in Delphi

Tag is a small property that I rarely use. Until recently, that small property plays a really big role in my application.

As you know, Tag is an integer type property that you can use to… well… tag! If you’re not a big fan of array, tag can be used as an index (although not as powerful as index, but surely easier to code). As this is only a small app, so performance is not an issue.

In my app I have a table that contains 16 date fields, named Date1, Date2, …, Date16. I also have 16 labels that shows whether a certain date field is filled or not, by changing its FontStyle property.

Each labels corresponds to the each Date fields. So Label with tag 1 is used to show the Date1 field data.

Here’s the function I used to change the FontStyle of each labels:

procedure TfrmMain.SetLabels; 
var
i, j : Integer;
begin
// Iterate through 16 labels & 16 images

for i := 1 to 16 do
begin
// Find non empty date fields
if dtmMain.tblInvTracking.FieldByName('Date' +
IntToStr(i)).Value <> null then
begin
// Iterate through all components on the form

for j := 0 to ComponentCount-1 do
begin
// Sets the label's font style
if (Components[j] is TLabel) and
((Components[j] as TLabel).Tag = i) then
TLabel(Components[j]).Font.Style :=
TLabel(Components[j]).Font.Style + [fsBold];
end;
end
else
begin
for j := 0 to ComponentCount-1 do
begin
if (Components[j] is TLabel) and
((Components[j] as TLabel).Tag = i) then
TLabel(Components[j]).Font.Style :=
TLabel(Components[j]).Font.Style - [fsBold];
end;
end;
end;
end;


Prior to using the Tag, I have to find the correct object type with using the “is” reserved word

Components[j] is TLabel

And using the “as” reserved word

Components[j] as TLabel

With these two reserved words, I can be sure that only the Tag property of TLabel that I processed.

Tips Explorer 2008


Kabar baik, nih...

TE2007 udah di-update menjadi TE2008. Secara isi sih masih sama, cuman programnya yang di-update.

Pada versi baru ini, kita sudah bisa menambah dan melakukan edit pada tips. Jadi bila anda memiliki code snippet yang bakal digunakan di kemudian hari, masukkan saja ke dalam TE2008, maka database TE akan semakin lengkap.
Selain itu beberapa bugs kecil telah diperbaiki.

mau coba?

download aja di

http://rapidshare.com/files/131637712/Tips_Explorer_2008_Setup.exe

Tips Explorer 2007

Tips Explorer 2007 adalah sebuah aplikasi yang akan sangat memudahkan pemrograman anda. Bila anda menggunakan Delphi, tentunya :)

TE2007 merupakan database yang berisi ribuan (3000+) tips yang diambil dari berbagai sumber di internet. Tips terbagi atas berbagai kategori yang akan memudahkan pencarian. Dibuat dengan pendekaan interface Windows Explorer akan memudahkan para penggunanya. Terdapat fitur pencarian sederhana, namun cukup memadai. Terdapat pula fitur pencetakkan dan penyimpanan tips dalam berbagai format, seprti text (txt), html dan rich text file (RTF). Fitur ini dapat pula dilakukan satu per satu maupun secara batch.

Sangat disarankan bagi pemrogram Delphi.

http://rapidshare.com/files/89485052/Tips_Explorer_2007_Setup.exe

CopyToSayIt!

Pernahkah anda diharuskan untuk menulis "terbilang" dari sebuah bilangan? Misalnya 1500 bila dituliskan terbilangnya adalah "seribu lima ratus". Dan anda diharuskan untuk menuliskan terbilang dari bilangan-bilangan lain berulang dan berulang terus. Bahkan, pernahkah anda diharuskan untuk menuliskan terbilang dalam bahasa Inggris?

Karena ingin membantu teman-teman di departemen Finance & Accounting yang sering bergelut dengan "terbilang", maka saya buat program Copy To Say It! ini.

Copy To Say It! adalah program yang dapat membuat terbilang dari sebuah bilangan dengan cara melakukan copy text bilangan tersebut, lalu saat dilakukan paste hasil yang muncul adalah terbilang dari bilangan tersebut. Sederhana, bukan? Karena sederhananya, maka hampir semua aplikasi Windows yang mendukung operasi copy & paste dapat menggunakan Copy To Say It!.

Copy To Say It! mendukung pembuatan terbilang dalam bahasa Indonesia dan bahasa Inggris. Ada fasilitas untuk menambahkan nama mata uang pada hasil terbilang. Jenis mata uang bisa ditambahkan maupun diedit.

Kalo mau coba, silakan download di:
CopyToSayIt
Kecil, hanya 550 KB

Delphi 2006 udah keluar

Sebenernya ini berita udah agak 'basi' :)
Soalnya Delphi 2006 udah diluncurkan Borland sejak 10 Oktober 2005 lalu.

Tapi apa yang baru, sih, dari D2006 ini? Yah, yang jelas sih diintegrasikannya C++ Builder ke dalam Borland Developer Studio (BDS), yang sebelumnya sudah ada Delphi (Win32 dan .NET) dan C# Builder.

Jadi, sekarang pemrograman dengan menggunakan D2006 semakin lengkap. Mau bikin aplikasi untuk Win32? Ada! Pake aja Delphi for Win32. Nggak mau pake Delphi? Pake aja C++. Mau bikin aplikasi untuk .NET? OK! pake aja Delphi for .NET. Nggak ngerti class2 .NET framework? pake aja Delphi for .NET with VCL.NET. Males pake Delphi? Boleh pake C#.

Pokoknya lengkap dah!

Selain itu Borland semakin ngikutin perkembangan di dunia software development dengan menambahkan dan memperbaiki fasilitas2 untuk Modelling, Refactoring, Team Development, Unit Testing, dll. Pokoknya hal2 yang nggak saya ngerti semuanya ada :)

maen aja ke sini utk press release-nya:
http://bdn.borland.com/article/0,1410,33363,00.html

ini situs resmi D2006:
http://www.borland.com/us/products/delphi/index.html

TurboPower VCL

Setelah TurboPower mengumumkan akan melepaskan koleksi VCL mereka ke seluruh komunitas Delphi dengan lisensi open-source, saya langsung 'nyemplung' ke sourceforge untuk mendapatkannya. Kini, setelah beberapa waktu setelah saat itu, saya baru punya kesempatan untuk menginstal VCL mereka di Delphi 7. Semalam, 12 Maret 2005, saya menginstal semua koleksi VCL TurboPower, sambil menonton The Predator di salah satu televisi swasta :)
Semua VCL bisa terinstall dengan mudah. Hanya Orpheus yang agak susah untuk diinstal. Bolak balik saya pencet tombol 'Install', selalu saja muncul error yg menyatakan 'cannot create xxxx.dcu'. Saya sudah mematikan property 'read only' pada file dan direktorinya, tetap saja tidak ada pengaruhnya. Setelah saya lihat pada project browser, baru saya mengerti. Package mencari file2 source pada direktori yg sama dengan dirinya! Setelah saya memindahkan seluruh file source ke direktori yang sama dengan package, instalasi komponen berjalan dengan lancar.
Inilah akibatnya bila disambil dengan menonton film yang seru. Tidak konsentrasi! :)
Semoga ini membantu mereka yang hendak melakukan instalasi TurboPower Orpheus.