ùòåø 10

ùòåø 8

ùòåø 7

ùòåø 6

ùòåø  5

ùòåø 4

ùòåø 3

ùòåø 2

ùòåø 1

 
 

òåìí äãìôé

ùéòåø 9:  îîéø éçéãåú

áåà ðòùä ëîä úøâéìéí. áåà ðúëðú îîéø éçéãåú ëììé, äîáåññ òì îîéø äîèáòåú "EuroCC". àôìé÷öéä æå úîéø éçéãåú àåøê (ñðèéîèø, îèø, àéðõ',), ðôçéí (ìéèø, âìåï,) àå ëì ãáø àçø ùúøöä.

 àçø ëê, ðãåï áëîä ãøëéí ìäôåê àú ÷åã äî÷åø ìéåúø ÷åîô÷èé åîáðé.

 

äëðåú:

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 áôøåöãåøä àçú:

   
 procedure TFormMain.UnitsConvert(ConvType: integer); var Amount, // amount 
to convert MFactor: real; // multiplication factor begin try case ConvType of 
0 : begin Amount := StrToFloat(EdLength.Text); case RGLength.ItemIndex of 0 : 
MFactor := mfMM; 1 : MFactor := mfCM; 2 : MFactor := mfM; 3 : MFactor := mfKM; 
4 : MFactor := mfInch; 5 : MFactor := mfFoot; 6 : MFactor := mfYard; 7 : MFactor 
:= mfMile; end; end; 1 : begin Amount := StrToFloat(EdVolume.Text); case RGVolume.ItemIndex 
of 0 : MFactor := mfCC; 1 : MFactor := mfLiter; 2 : MFactor := mfM3; 3 : MFactor 
:= mfInch3; 4 : MFactor := mfGalUS; 5 : MFactor := mfGalUK; 6 : MFactor := mfFoot3; 
7 : MFactor := mfYard3; end; end; end; BU := Amount * MFactor; ConvertShow(ConvType); 
SetLabelInvisible; except on EConvertError do MessageDlg('Illegal input!', mtWarning, 
[mbOk], 0); end; end;

áçì÷ ääöäøä ùì 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, ðáçéï áéï ùðé ñåâé ääîøåú áàîöòåú ôøîèø. äçìó àú ùúé äôøåöãåøåú áôøåöãåøä äáàä:  

 

 

 
procedure TFormMain.ConvertShow(ConvType: integer); begin if (ConvType = 0) then 
begin LblMM.Caption := MakeString(mfMM, 0, 0); LblCM.Caption := MakeString(mfCM, 
0, 1); LblMeter.Caption := MakeString(mfM, 0, 2); LblKM.Caption := MakeString(mfKM, 
0, 3); LblInch.Caption := MakeString(mfInch, 0, 4); LblFoot.Caption := MakeString(mfFoot, 
0, 5); LblYard.Caption := MakeString(mfYard, 0, 6); LblMile.Caption := MakeString(mfMile, 
0, 7); end else begin LblCC.Caption := MakeString(mfCC, 1, 0); LblLiter.Caption 
:= MakeString(mfLiter, 1, 1); LblM3.Caption := MakeString(mfM3, 1, 2); LblInch3.Caption 
:= MakeString(mfInch3, 1, 3); LblGalUS.Caption := MakeString(mfGalUS, 1, 4); LblGalUK.Caption 
:= MakeString(mfGalUK, 1, 5); LblFoot3.Caption := MakeString(mfFoot3, 1, 6); LblYard3.Caption 
:= MakeString(mfYard3, 1, 7); end; end;

   

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

  function MakeString (Mfactor: real; ConvType, LineNr: integer): string;

   


[ìøàù äòîåã]

 

îä æå "äôåð÷öéä" äæå?

ôåð÷öéä äéà îàåã ãåîä ìôøåöãåøä, àìà ùäéà îçæéøä òøê. ñåâ äòøê ùäéà îçæéøä öøéê ìäéåú îöåéï áñåó ä- 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;

  Result äåà îùúðä ôðéîé îéåçã, àáì äåà ÷ééí áëì ôåð÷öéä.

îä òí ôåð÷öéú ä- 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.

  6.      á- Code Editor, ùðä àú ä÷åã ùì îèôì äîàåøò äøàùåï ëãìäìï:  

 procedure TFormMain.BtnLenConvertClick(Sender: 
TObject); begin if (Sender = BtnLenConvert) or (Sender = RGLength) then UnitsConvert(0) 
else UnitsConvert(1); end;

 

îé äåà ä- Sender äîñúåøé? ÷éáìðå ôøîèø æä îãìôé: äåà îöáéò ìøëéá (component) ùçåìì àú äîàåøò! áî÷øä ùìðå, æäå äøëéá ù÷éáì àú ä- click.

 

7.      ëòú, àúä éëåì ìîçå÷ àú ùìåùú îèôìé äîàåøòåú àùø àéðí ðçåöéí éåúø. àáì úï ìé ìäøàåú ìê èøé÷, àéê ìòùåú æàú áîäéøåú. ôùåè îç÷ àú ä÷åã îëì handler ùàéðê öøéê éåúø, àáì äùàø àú äîéìéí begin ï- end. ìãåâîä:

 

procedure TFormMain.RGLengthClick(Sender: TObject);

begin

end;

 

÷îôì àú äúëðéú (ôùåè "äøõ" àåúä, äéà úú÷îôì àåèåîèéú, àúä æåëø) àçø ëê, òöåø àú äúëðéú åäñúëì áòåøê: ùìåùú ä- handlers ðòìîå áàåôï àåèåîèé, âí îçì÷ äîîù÷ åâí îçì÷ äîéîåù!

 

 


[ìøàù äòîåã]

…åòãééï éù î÷åí ìùéôåø  

âí îèôìé äîàåøòåú menu-click  éëåìéí ìäéëúá èåá áãøê éåúø ÷åîô÷èéú. 

åìáñåó, ðéúï ìäçìéó àú ùðé îèôìé äîàåøòåú “KeyPress”  ùì ä- Edit-Box áàçã. 

àçøé ëì äùéðåééí äììå äñúëì áúåëðéúðå, UniCoEN3. ùäéà áååãàåú äøáä éåúø ÷åîô÷èéú îâøñúðå äøàùåðä!  

 

ìäúøàåú áùòåø 10!

 

[ìøàù äòîåã]

         

Copyright (C) 2000 Guido Festraets

Webmaster of the DelphiLand site: http://www.festra.com

îáðä äùéòåø: 
äëðåú 
îîéø éçéãåú ùðòùä òì éãê 
îééòìéí àú ÷åã äî÷åø 
îä æå äôåð÷öéä äæå 
ééòåì ðåñó 
åòãééï éù î÷åí ìùéôåø