Tuesday, June 06, 2006

Terbilang


unit Konversi;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

function Convert(vString : String):String;
function ReadNumber(vString : String):string;
function GetNumber(vNum : Integer):String;

var
FValue : String;
FResult : String;
FCurrency : String;

implementation

function GetNumber(vNum : Integer):String;
begin
case vNum of
1 : Result := 'satu ';
2 : Result := 'dua ';
3 : Result := 'tiga ';
4 : Result := 'empat ';
5 : Result := 'lima ';
6 : Result := 'enam ';
7 : Result := 'tujuh ';
8 : Result := 'delapan ';
9 : Result := 'sembilan ';
0 : Result := '';
end;
end;

function ReadNumber(vString : String):string;
var level,len,j,i,vawal,awal,akhir,dgt : Integer;
str,bil,digit,lvl,temp2 : String;
begin
len := length(vString);
str := vString;
//cari level
level := len div 3;
if len mod 3 <> 0 then
level := level + 1;
//baca per 3 digit
for i := 1 to level do
begin
vawal := 0;
akhir := len - ((i-1)*3);
awal := akhir - 3 + 1;
if awal <= 0 then
awal := 1;
vString := copy(str,awal,akhir-awal+1);
if length(vString) < 3 then
akhir := length(vString)
else
akhir := 3;
awal := 1;
while akhir >= awal do
begin
dgt := akhir - awal + 1;
bil := GetNumber(StrToInt(vString[awal]));
case dgt of
1 : digit := '';
2 : digit := 'puluh ';
3 : digit := 'ratus ';
end;
//pengujian angka 10 dan 11
if dgt in [1,2] then
begin
if (StrToInt(vString[awal]+vString[awal+1]) >= 10) and
(StrToInt(vString[awal]+vString[awal+1]) < 20) then
begin
if (akhir - awal + 1 > 1) then
begin
if (StrToInt(vString[awal]) = 1) and
(StrToInt(vString[awal+1]) in [0,1]) then
bil := 'se'
else if (StrToInt(vString[awal]) = 1) and
(StrToInt(vString[awal+1]) > 1) then
bil := GetNumber(StrToInt(vString[awal+1]));
end;

if StrToInt(vString[akhir]) <> 0 then
begin
bil := bil + 'belas ';
digit := '';
vawal := awal + 1;
end
else
begin
vawal := awal + 1;
end;
end;
end;
if (((i = 2) and (awal=1) and (akhir = 1)) or
((akhir > 1) and (StrToInt(vString[1]) = 1) and
(dgt = 3))) and (StrToInt(vString[awal]) = 1) then
bil := 'se';

if (StrToInt(vString[awal]) = 0) then
digit := '';

Temp2 := Temp2 + bil + digit;
awal := awal + 1 + vawal;
vawal := 0;
end;
case i of
1 : lvl := '';
2 : lvl := 'ribu ';
3 : lvl := 'juta ';
4 : lvl := 'milliar ';
5 : lvl := 'trilliun ';
6 : lvl := 'billiun ';
end;

if StrToInt(vString) <> 0 then
begin
if (StrToInt(vString) = 1) and (i = 2) then
Temp2 := 'seribu '
else
Temp2 := Temp2 + lvl;
end;
Result := Temp2 + Result;
Temp2 := '';
end;
if (length(vString) = 1) and (vString = '0') then
Result := 'nol ';
end;

function Convert(vString : String):String;
var i,koma : Integer;
temp : string;
begin
koma := pos('.',vString);
if koma <> 0 then
begin
for i := 1 to 2 do
begin
if i = 1 then
begin
temp := copy(vString,1,koma-1);
Result := ReadNumber(temp);
Result := FResult + 'koma ';
end
else
begin
temp := copy(vString,koma+1,length(vString));
FResult := FResult + ReadNumber(temp);
end;
end;
end
else
Result := ReadNumber(vString);
Result := Result + 'rupiah';
end;

end.

Calling Control Panel Applets


function RunControlPanelApplet(sAppletFileName : string): integer;
begin
Result := WinExec(PChar('rundll32.exe shell32.dll,'+
'Control_RunDLL '+sAppletFileName),SW_SHOWNORMAL);
end;

access.cpl: Accessibility Properties
appwiz.cpl: Add/Remove Programs Properties
desk.cpl: Display Properties
intl.cpl: Regional Settings Properties
joy.cpl: Joystick Properties
main.cpl: Mouse Properties
mmsys.cpl: Multimedia Properties
modem.cpl: Modems Properties
sysdm.cpl: System Properties
timedate.cpl: Time/Date Properties