ݺߣ

ݺߣShare a Scribd company logo
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
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

;
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)

,'

)

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) ,' )