Ketika membangun program aplikasi dengan bahasa pemrogaman Delphi, kadang-kadang klta perlu membatasi nilai yang dapat diterima oleh komponen TEdit. Pembatasan itu, misalnya, homponen TEdit hanya menerima nilai integer atau hanya menerima nilai masukan dari batas minimum atau maksimum tertentu. Bagaimana rnenghindari hal ini? Salah satu cara dapat ditempuh, yaitu dengan rnerancang komponen TCusfomEdit yang mampu membatasi input nilai dari user pada batas-batas tertentu.
1 of 3
More Related Content
Merancang Komponen TCustomEdtt Yang Memiliki Properti Nilai Terbatas
1. rtrrrrlatrrtllltlttrlltrtltlllrtttalraltlltlllltatllllltl
merancang l{ompon€n
TCustomEdtt Yang Flemiliki
Properti Nitai Tbrbatas
Oleh: Carwoto dan lpin
E A.*
Ketika membangun prugram aplikosi dengon bahasa pemrogtaman Delphi, hadangkadang klta perlu membatasi nilai yang dapat diterimo oleh komponen TEdiL Pembattsan
itu, misalnyu, homponen TEdit hanya menerima nilai integer atau hanya mencrima nilai
masukan dart batus mlnimum atau maksimum tertentu
Untuk rnenangani masalah
pesan
dengan rnerancang komponen
Untuk membuat komponen ini,
ikuti largkah perarcangan komponen
baru sebagaimana lazimnya, yaitu
(Mess age&ox atau dialog pesan
fCusfomEdit yang mampu mem-
dengan memilih menu Com-
(MessageDlgl ketika pemakai pro-
batasi input nilai dari userpada batm-
ponentfNewComponent. Setelah itu
gram (user) memasukkan nilai di luar
batas tertentu, Pada kesempatan ini
batas yang ditentukan, Cara penanganan seperti di atas kadang-
akan diberikan contoh rancangan
tentukan Ancestar Typ*Rya. Dalam
rancangan ini, ancesfor typ*nya dalah 'TCu$tomEdit'. Tentukan iuga
narna konponen tensebut, misalnya
*TEditof, Kemudian lengkapi unit
yang menangani komponen tersebut
dengan kde program di bavah ini,
tersebut, biasanya dilakukan dengan
menampilkan
kotalr
Bagaimana rneruhindari hal ini?
Salah satu caradapat ditempuh, yaitu
kadang terasa tidak praktis, Sebab,
komponen husfomEdif yaru mem iliki
properti hatas maksimum dan mini-
cara tersebut akan menambah
mum untuk tujuan seperti atas, Untuk
pekerjaan pemakai program, Apabila
pemakai harus menutup kotak pesan
keperluan praktis, pembaca dapat
mengembangkan sendiri sesuai
selera, ataupun mengurangi sesuai
kesalahan tersebut.
kebutuhan,
terjadi kesalahan masukan data,
Selamat mencoba!
Procedure SetValue (Value: Double ) ;
Procedure SetFormat {Value: String)
Function
: Borland De1phi /Pascal 3.0
//copyright : 1999 Click Software House
//gahasa
/
/
==
-=:==:====
=:-==:===:=!=:==
=:=:==:=
==
=
=
type
TParam
: TOb
j ect.;
Var Key:
Char ) ;
Procedure onEditExit ( Sender : TObj ect
Procedure CreateWnd; Overri-de,'
cmMouseEnter
(Var Msg:
;
);
TMessage ) ,'
proeedure cmMouseleave (Var Msg : TMessagfe ) ;
Message cm Mouseleatze ;
TError = Set Of
(NotValue, NotfntValue, Sma1ler, Bigger
TEditor '!= elass (TCustomEdit)
Procedure
OnEditKeyPress (Sender
Hessage cm MouseEnter,'
(BiggerThan, LessThan, fntValue ) ;
*
;
String;
Procedure Loaded; override;
Procedure onfditChange ( Sender : TObj ect)
procedure
= Set Of
:
pr o tec ted
=
unj,t Editor " Pas; interf aeeuses Wi.ndows, Messages , SysUtils , Classes, Graphi-cs, Controls,
Forms, Dialogs, StdCtrls. 0VCL,'
GetPesan
);
publ ic
Constructor Create
pr ivate
FonChange : TNotlfyEvent;
FOnKeyPress : TKeyPressEvent;
,'
Destructor Destroy; Override ;
Procedure ClearAlI;
pubti shed
Property Param : TParam Read FParam Write
FonExit : TNotifyEvent;
FParam: TParam;
FError : TError,'
Fl"Iin, El,Iax : Double;
FKontrol : TControl;
FFormat : Stri-ng,'
FValue : Doub1e;
FPesan : Strlng;
Procedure SetMin (Va1ue: Douhle ) ;
Procedure SetMax tValue: Double ) ;
Procedure SetKont,rol (Va1ue: TControl
(AOwner : TComponent )
Override;
E
Param;
Property Error : TError Read FError;
Property Mj,n : Double Read FI'{in }Irite
Setl,lin;
Froperty Max : Double Read Ellax lfrite
SetMax;
)
,'
Functlon GetValue : Doublet ; r r r r Ir ;
r r-r r r
Property Kontrol : TControl Read FKontro1
Write SetKontrol;
Property Value : Doub1e Read GetValue
It r r
trl
n m n t r t r I F t rll nf
2. rlttltltlrrrltlrlrr!arrtlllllrrlttllllllltlraalllltrarllt
Write SetValue,'
Property Format I String Read PFormat
Write SetFormat;
Property Pesan : String Read GetPesan
Write FPesan,'
property CharCase;
property Enabled;
propertY Font;
property ReadonlY;
property ShowHint;
property TabStoP;
property Visible;
property Onchanget
property onClick;
property OnDblClick;
propertY OnEnter;
property OnExit;
property OnKeYDowtr;
property onKeYPress;
property OnKeyUP;
Constructor TEditor . Create
Inherited Create
(Aourner ) ;
FError;=[NotValueJ,.
FParam; '= [ IntVa1ue I
FMin: =- Le2 4 I ;
,'
E?Iax:=*1e248,'
FFormat: =, #0.000' ;
End;
Destructor TEditor. DestroY;
Begin
fnherited Destroy;
End;
Procedure TEditor. Loaded,'
Begin
Inherited;
If csDesigning In Componentstate Then Exit;
EOnChange : =OnChange i
OnChange : =OnEditchange ;
FOnKeyPres s : :OnKeyPress ;
OnKeyPre s s : =OnEdi tKeyPre s s ;
end,'
procedure Register i
Procedure
Teswalue (Teks:string;I,ti.n,l'rax:Double,
(AOwner : TComponent ) ;
Begin
Par:TPalamrVar FonExit: =onExit,
,'
irnplementationFontcolor:=Eont'color;
Const
Eontcolor: Tcolor=0,
onExit: =OnEditExit'
Procedure TEditor . SetMin (Value : Double
TesWaLue (Teks : String;l"Iin, Max: Dottlcle; Par : TParam;Var
Err: TError
)
End;
Procedure
);
Err:TError),'
Begin
:Va}ue i
SetValue (FValue)
E1{in
Var V : Extended;
:
E : fnteger;
;
Begin
End;
Err:=[];
Val (TeksrV, E) ;
Proce,Cure TEditor . SetMax (Va1ue : Double ) ,'
If E=0 Then
Begin
Begin
Fttax : =Va1ue,'
f
SetValue ( FValue) ;
End;
Procedure TEditor. SetKontrol (Va}ue: TContro})
;
Begin
FKontrol: =Value
;
If VaIue=NiI Then
Kontrol . FreeNotification ( Self
=
J;
[NotValuel
;
If Error<>[]
Then
Begin
Procedure TEditor. SetValue (Va1ue: Doub1e)
;
Begin
If csDesigning In Componentstate Then Exit;
TestValue ( FloatfoStr (Value
) , t{in, l.Iax, FParam, Elrror } i
If Error<> [ J Then Value: =0i
Text::EormatEloat ( Format, Value
EValue ::Value;
);
Result : :' Mln=t +FloatToStr (Min) ;
If BlggerThan In Param Then
Result : =Resu1t+' r' ;
Result : =Result+' l*Iax:' *FloatToStr
(Max ) ;
If LessThan In Param Then Result:=Result+'-'
If IntValue In Paraft Then Result:=Result+'
( Real ) ' ;
t Bulat ) ' Else Result ::Result+'
End Else Result: =' Status oK' ;
End;
End,'
Procedure TEditor. SetFormat (Va1ue: String) ;
Begin
IrrI
Then
Funetion TEditor . GetPesan: String;
sult : :0;
End;
) And ( Frae (v) <>0 )
Begin
End;
End,'
Par
End;
If Error=[J Then Result:=fl/alue Else Re-
FEormat: =Value ;
IntValue Ih
End Else Err;
Function TEditor . GetValue : Double;
If Value()FFormat
(
(LessThan In Par) And (v>Max) ) Then
Begin
Begin
f
Err : -Err* [NotlntValue J ;
If ((BigqerThan In Par) And (V<:l{in)) or (Not
(BiggerThan fn Par) And (vcMin)) Then
Err: =Err* [Smaller] ;
If ( (tessThan In Par) nna (v>:Max) ) Or (Not
Err : =Err* [Blgger
);
End;
Invalidate;
'
Then
Procedure
IEditor . OnEditChange ( Sender : Tobj ect ) ;
Var I : Integer;
E : Boolean;
Begin
TestValue ( Text, Min, Max, FParam, EError ) ;
I f Kontrol<>Nil Then
Begin
I--I-r-
r-
rlrrrrrrr
;
3. II TI TII
TIIITIIII
IIrII
r rrlr
f:=0;
:False;
With Parent Do
While Not E And ( I<ControlCount)
II I IIII
TII
TIII
IIIIIIT
I IIITIII
II
End;
E:
Procedure TEditor , CMMouseEnter (Var
Do
MSg: TMessage )
Begin
If Controls II] Is TEditor
Then
Begin
E:= ( (Controls
IIJ As TEdito,r) .Error<>[]
Font . color : =clBlue
);
End;
i
t
warna font menj adi biru
End,'
rnc(I);
End,.
Procedure TEditor . CMMouseleave (Var
Kontrol. Enabled: =Not (E) ;
Msg : TMes sage )
End.'
Begin
If Error= [ ] Then EVaIue : =StrToPloat (Text),'
If Assigned (F0nChange) Then FOnChange (Se1f )
(
Sender
: TObJ
ect; Var
Key: Char ) ;
(Key, S,
TestValue
(
S,
Procedure TEditor . C1earA11,.
Var I,K : Integer;
I
f Kontrol<>Nil Then Kontrol . Enabled : :False,:0;
With Parent Do
For I ::0 To ControlCount- 1 Do
K:
OnEnterKeyPress (Sender, Key) ;
nsert
Font . Color : =FontColor ;
End;
Begin
Var S : String;
E : TError,'
Beg in
S : =Text;
Delete (S, Selstart+l-, Sellength)
,'
Inheri ted;
,.
Procedure
TEditor - OnEditKeyPress
f
,.
Begin
Inher ited;
EontColor : =Font . Color ;
Begin
If ControlsII] Is TEditor
;
Selstart+L ) ;
Min, Max, FParam, E ) i
rf {E<> [ ] ] And Not (I(ey rn ['e' ,'E' ,, *, ,' ',#81I Then Key:=#$;
','.',',
If Assigned ( FOnKeyPress) Then
FOnKeyPress (Self, Key) ;
End,'
Procedure TEditor " OnEditExit ( Sender
Then
Begin
With Control= [ t ] As TEditor
Do
Begin
Tag ::K,'
Text i=' ' ;
End,-
Inc (t() ;
:
TObj
Begin
If Assigned (FonExit) Then FOnExit (Self) ;
ect ) ;
End;
End;
End;
procedure Register;
Proeedure TEditor . Createfilnd;
Begin
Inher i ted;
I
f Kontrol<>Nil Then Kontrol . EnabLed: =False;
ClearAl1;
*
Carwoto dan Ipin B. A. adalah mahasiswa Teknik Elektro
LTNDIP
*
begin
RegisterComponents ( rstandard'
end;
end.
I
TEdi
tor
J)
,'
)