| | |
|
|
|
|
|
|
|
|
|
òåìí äãìôé ùéòåø 9: îîéø éçéãåú
àçø
ëê, ðãåï áëîä ãøëéí ìäôåê àú ÷åã äî÷åø ìéåúø ÷åîô÷èé åîáðé. äëðåú:1. àí òãééï ìà òùéú æàú, äåøã àú ä÷áöéí unicoen1.zip, unicoen2.zip å unicoen3.zip ì .\Delphi_tutorial
2. öåø ùìåù ñôøéåú çãùåú: \Delphi_tutorial\UniCoEN1, \Delphi_tutorial\UniCoEN2 å .\Delphi_tutorial\UniCoEN3
3. áöò "unzip" ìëì àçã î÷áöé ä- zip ìñôøééúå äîúàéîä. ëì ñôøéä öøéëä ìäëéì ùìåùä ÷áöéí: ÷åáõ DFM, ÷åáõ PAS å ÷åáõ .DPR
4.
ôúç àú unicoen1.dpr
á- Delphi
(àå ôùåè ìçõ ìçéöú òëáø ëôåìä òì ä÷åáõ áñééø äçìåðåú).
îîéø
éçéãåú, ùðòùä òì éãêUniCoEN1
îëéì úáðéú ùì äàôìé÷öéä. ÷îôì àú äàôìé÷öéä åøàä áòöîê: äéà ìçìåèéï ìà òåùä ùåí
ãáø ;-) ëéååï ùòìéê ìäëðéñ àú øåá ä÷åã. ìà ëì- ëê îñåáê,
ùëï àúä éëåì ììååú ÷åã îä- EuroConvertor. ëê
ðøàä äèåôñ (form):
áúçéìú çì÷ äîéîåù (implementation) , úîöà àú ëì ä÷áåòéí äãøåùéí. àê áðéâåã ì- EuroCC ìà áéèàðå àú äéçéãä äáñéñéú (BASE UNIT) áëì àçã îäîèáòåú äàçøéí: (1 euro=40.3399 BEF,
1 euro=40.3399
FRF). ëéååï
ùääîøåú îéçéãåú àðâìéåú ìéçéãåú àîøé÷àéåú îáåññåú òì çå÷éí ëîå 1
inch=2.54 cm,
àðçðå ðåúðéí àú äúåöàä äù÷åìä áîèøéí. àåúå ãáø ìâáé ðôçéí, äúåöàä úéðúï áîèø øáåò.
áëãé ìîðåò áìáåì ð÷øà ìæä ô÷èåøé äëôìä (multiplication) áî÷åí ô÷èåøé äîøä (conversion),ëîåáï
ùëòú ðåñçàåú ääîøä äï ääôê îîä ùäï á- EuroCC: -
îéçéãä
îñåéîú ìéçéãä äáñéñéú: BU:= Amount*Mfactor -
îéçéãåú
áñéñéåú ìéçéãåú äàçøåú: Other_Unit:=BU/Mfactor àúä
éëåì ìäùååú àú úëðéúê òí äôúøåï, ùðîöà á- UniCoEN2. îééòìéí
àú ÷åã äî÷åøëùàúä
ëåúá ÷åã î÷åø, ðñä ìùîøå ÷åîô÷èé. áãøê æå ÷ì éåúø ìîöåà áå ùâéàåú, àê çùåá éåúø:
éåúø ÷ì ìúçæ÷ àåúå îàåçø éåúø. ãøê àçú ìáöò æàú, äéà òì éãé ÷éáåõ îñôø ôøåöãåøåú
ìôøåöãåøä àçú. áôøåé÷è
UniCoEN2,
äñúëì òì äôøåöãåøåú LengthConvert
å- VolumeConvert: öåøúí äëììéú æää, ø÷ ëîä ôøèéí äí ùåðéí. äáä ðçìéó
àú ùúé äôøåöãåøåú äììå áôøåöãåøä àçú: UnitsConvert. 1.
áçì÷
äîîù÷ (interface),
äçìó àú ùúé äùåøåú:
procedure
LengthConvert;
procedure
VolumeConvert; áùåøä
àçú ôùåèä: procedure
UnitsConvert (ConvertType: integer); 2.
áçì÷ äîéîåù (implementation),
äçìó àú ùúé äôøåöãåøåú LengthConvert
å- VolumeConvert
áôøåöãåøä àçú:
áçì÷ ääöäøä
ùì UnitsConvert, ùéí ìá ìîùúðä äôåøîìé ConvType. äåà îìååä áîéìä integer: æäå
äñåâ ùì äîùúðä. àðçðå îùúîùéí áå áëãé ìöééï ìôøåöãåøä äàí ìáöò äîøú àåøê (0) àå
äîøú ðôç (1).
ùéí ìá ìëê ùùîåú äîùúðéí åñåâí çééáéí
ìäéåú æäéí áçì÷
äîîù÷ (interface)
åáçì÷ äîéîåù (implementation)! ìîä ìäùúîù áîùúðä îñåâ integer?
ìîòùä, éëåìðå ìäùúîù ëàï áîùúðä áåìàðé, ëéååï ùàðå æ÷å÷éí ø÷ ìùðé òøëéí ùåðéí
(îùðä áåìàðé éëåì ìäéåú ø÷ TRUE
àå FALSE).
àáì áåà ðúëåðï ìòúéã: îàåçø éåúø, ðåëì ìäùúîù á- 2 òáåø îäéøåú, 3 ìîù÷ì…
3.
äçìó
àú ëì ääåôòåú ùì LengthConvert
á- UnitsConvert(0).
4.
áàåôï
ãåîä, äçìó àú
ëì ääåôòåú ùì VolumeConvert
á- UnitsConvert(1). ëàùø
àúä ÷åøà ìùâøä òí ôøîèøéí, àúä çééá ìäòáéø àú äôøîèøéí äîúàéîéí ìñãø åìñåâ
ùáøùéîú äôøîèøéí ùì äùâøä. äôøîèøéí ùàúä îòáéø ìùâøä ð÷øàéí 5.
äáä ðçìéó âí àú ConvertLengthShow
åàú ConvertVolumeShow
áôøåöãåøä àçú, ConvertShow.
ëîå á- UnitsConvert,
ðáçéï áéï ùðé ñåâé ääîøåú áàîöòåú ôøîèø. äçìó àú ùúé äôøåöãåøåú áôøåöãåøä äáàä:
6.
äåñó àú äôåð÷öéä MakeString:
function
TFormMain.MakeString(MFactor: real; ConvType, LineNr: integer): string; var Other_Units,
FormatStr, UnitName: string; begin if RGDecimals.ItemIndex = 0 then FormatStr
:= '0.00' else FormatStr := '0.0000'; Other_Units:= FormatFloat(FormatStr, BU
/ MFactor); // Make the unitname equal to the Radiogroup item case ConvType of
0: UnitName := RGLength.Items[LineNr]; 1: UnitName := RGVolume.Items[LineNr];
end; MakeString := Format('%15s%', [Other_Units]) + ' ' + UnitName; end;
7.
àì
úùëç ìäåñéó äöäøä òì äôåð÷öéä ìçì÷ äîîù÷ (interface):
îä
æå "äôåð÷öéä" äæå?
ôåð÷öéä äéà îàåã ãåîä ìôøåöãåøä, àìà ùäéà îçæéøä òøê. ñåâ äòøê ùäéà îçæéøä öøéê
ìäéåú îöåéï áñåó ä- header ùì äôåð÷öéä. áî÷øä ùìðå, æäå äçì÷: string; ùéí ìá ì÷èò áå úîöúðå àú ùí äéçéãåú (mm,
cm,
m,…) îçåõ ìøùéîú ä-Items
ùì ä- Radiogroup.
æëåø: Items æå øùéîú äîçøåæåú ùîéìàú òì éãé ä- Object
Inspector. áæîï
øéöä, àúä éëåì ìâùú ìîùúðä ééçåãé áøùéîä æå òì éãé ùéîåù áàéðã÷ñ, äòøê LineNr
ùðøùí áéï ñåâøéí îøåáòéí. áî÷øä æä îáðä ù÷åì ì÷åã äáà: case ConvType of 0 : case LineNr
of 0 : UnitName := 'mm'; 1 : UnitName := 'cm'; 2 : UnitName := 'm'; 3 : UnitName
:= 'km'; 4 : UnitName := 'inch'; 5 : UnitName := 'foot'; 6 : UnitName := 'yard';
7 : UnitName := 'mile'; end; 1 : case LineNr of 0 : UnitName := 'cc'; 1 : UnitName
:= 'l'; 2 : UnitName := 'm3'; 3 : UnitName := 'inch3'; 4 : UnitName := 'galUS';
5 : UnitName := 'galUK'; 6 : UnitName := 'foot3'; 7 : UnitName := 'yard3'; end;
end; ðå…,àæ…,îä äéúøåï áëê? ä÷åã äîùåìá ùì ConvertShow
åùì MakeString
ìà äôê ìéåúø
÷åîô÷èé, àáì ëòú äåà éåúø ëììé. åäåà îåëï ìäøçáåú òúéãéåú, ëôé ùðøàä áùòåø 10. MakeString
:= Format('%15s%', [Other_Units]) + ' ' + UnitName;
Result
:= Format('%15s%', [Other_Units]) + ' ' + UnitName;
îä òí ôåð÷öéú ä- Format
äæàú? æåäé ôåð÷öéú Object
Pascal ùîùîùú áòé÷ø ìòéöåá òøëéí òáåø ôìè. ðéúï ìòöá îñôøéí åëï îçøåæåú,
ëúìåú á format string.
áãåâîä äñôöéôéú äæå, îùîòåú ä- s: ôøîè string
(îçøåæú). îùîòåú ä- 15: 15 úååéí. ëìåîø, îùîòåú ä- ‘%15s’:
òùä ùàåøê äîçøåæú éäéä 15 úååéí, òì éãé äåñôú øååçéí ìöã ùîàì. îàåã ùéîåùé ìòéöåá
ùì îçøåæåú ùîëéìåú îñôøéí åàùø öøéëåú ìäéåú îéåùøåú ìùîàì. äå ëï, ëîòè ùëçúé ìñôø ìê: äúååéåú (labels)
ùé÷áìå àú úåöàåú ääîøä, îéåùøåú ìùîàì äôòí, ôùåè áãå÷ æàú á- Object
Inspector. îãåò?
åáëï, ùåá æåäé äëðä ìòúéã: áùòåø äáà, ðöéâ àú äúåöàåú á- ListBox,
åìà ðéúï ìéùø ìéîéï è÷ñè á- ListBox.
åâí, æä ðúï ìé äæãîðåú ìäøàåú ìê àú ôåð÷öéú ä- Format
äçùåáä. ãàâ âí ìäñúëì á-
help ùì Delphi. ééòåì
ðåñó
úëðéúðå äôëä ìéåúø áøåøä. ÷ì éåúø ìøàåú àú äîáðä, ëéååï ùäçì÷éí äîùåúôéí
î÷åáöéí éçãéå. àê éù òåã äøáä î÷åí ìùéôåø: àðçðå éëåìéí ì÷áõ
âí àú îèôìé äîàåøòåú (event
handlers)!
âí àí ðìçõ òì äëôúåø BtnLenConvert
àå òì ä- radiogroup
RGLength, äúëðéú
úáöò àú àåúä ôòåìä áãéå÷: äéà çééáú ì÷øåà ì- UnitsConvert(0).
ëð"ì ìâáé BtnVolConvert å- RGVolume,
ëàùø äúëðéú çééáú ì÷øåà ì- UnitsConvert(1). áôñáãå
÷åã, æä ðøàä ëê: if
(clicked on BtnLenConvert) or (clicked on RGLength) then UnitsConvert(0) else
if (clicked on BtnVolConvert) or (clicked on RGVolume) then UnitsConvert(1); ùìà ìäôúòúðå, éù ìðå ëáø ôøåöãåøä ùîúàéîä ìîùéîä
æå. ìîòùä, éù ìðå ëîä ëàìå! àæ, áåà
ðéúï àú ëì îùéîåú ä- "click
handling" ì- BtnLenConvertClick
åáåà ðçìå÷ àú îáöò äîàåøò (event
handler) äæä
áéï ëì àøáò ä- OnClick
events. áãøê æå ðåëì ìîçå÷ ùìåùä îèôìé îàåøòåú! äú÷ãí ëê: 1.
áèåôñ
(form),
áçø á- radiogroup RGLength. 2.
á- Object
Inspector, ìê ìòîåã
"Events"
3.
ìçõ òì
äçõ ìéã ä- OnClick:
úøàä øùéîä ùì îèôìé îàåøò.
4.
áçø áîèôì äîàåøò BtnLenConvertClick
îøùéîä æå.
5.
áãéå÷
áàåúå äàåôï, ä÷öä îèôì îàåøò BtnLenConvertClick
ì- OnClick event ùì BtnVolConvert
åùì RGVolume.
îé äåà ä- Sender
äîñúåøé? ÷éáìðå ôøîèø æä îãìôé: äåà îöáéò ìøëéá (component)
ùçåìì àú äîàåøò! áî÷øä ùìðå, æäå äøëéá ù÷éáì àú ä- click. 7.
ëòú, àúä éëåì ìîçå÷ àú ùìåùú îèôìé äîàåøòåú àùø àéðí
ðçåöéí éåúø. àáì úï ìé ìäøàåú ìê èøé÷, àéê ìòùåú æàú áîäéøåú. ôùåè îç÷ àú ä÷åã
îëì handler
ùàéðê öøéê éåúø, àáì äùàø àú äîéìéí begin
ï- end.
ìãåâîä: procedure TFormMain.RGLengthClick(Sender:
TObject); begin end; ÷îôì àú äúëðéú (ôùåè "äøõ" àåúä, äéà úú÷îôì
àåèåîèéú, àúä æåëø) àçø ëê, òöåø àú äúëðéú åäñúëì áòåøê: ùìåùú ä- handlers
ðòìîå áàåôï àåèåîèé, âí îçì÷ äîîù÷ åâí îçì÷ äîéîåù!
…åòãééï
éù î÷åí ìùéôåø
âí îèôìé äîàåøòåú menu-click
éëåìéí ìäéëúá èåá áãøê éåúø ÷åîô÷èéú.
åìáñåó, ðéúï ìäçìéó àú ùðé îèôìé äîàåøòåú “KeyPress”
ùì ä- Edit-Box
áàçã.
àçøé ëì äùéðåééí äììå äñúëì áúåëðéúðå, UniCoEN3.
ùäéà áååãàåú äøáä éåúø ÷åîô÷èéú îâøñúðå äøàùåðä!
Copyright (C) 2000 Guido Festraets Webmaster of the DelphiLand site: http://www.festra.com |
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||