«á¤@­¶
«e¤@­¶
¦^¥Ø¿ý
¦^­º­¶
²Ä¤»³¹¡@¤å¥óºÞ²z¡]¤@¡^

         ¤å¥ó¬O¦P¤@«¬¦¡¤¸¯Àªº¦³§Ç¶°¦X¡A¬O°O¾ÐÅé»P¥~³]¶¡¶Ç¿é¼Æ¾Úªº´ë¹D¡C¤@¨Ç¥~³]¦pÅã¥Ü¾¹¡BÁä½L¡B¦C¦L¾÷µ¥³£¥i¥H¬Ý§@¤å¥ó¡A¦ý³Ì±`¥ÎªºÁÙ¬OºÏ¤ùÀÉ¡A³o¤]¬O¥»³¹§Ú­Ì¥D­n°Q½×ªºª«¥ó¡C

         DelphiÄ~©Ó¤FObject Pascalªº¤å¥óºÞ²z¥\¯à¡A¨Ã¦³«Ü¤jªºµo®i¡A¨ä¤¤³Ì¥D­nªº¬O´£¨Ñ¤F¥Î©ó¤å¥óºÞ²zªº¼Ð·Ç±±¥ó¡A¦P®É¤]´£¨Ñ¤F§ó¦hªº¤å¥óºÞ²z¨ç¼Æ¡C§Q¥ÎDelphiªº±j¤j¥\¯à¡A¶}µo¤@­Ó¦Û¤vªº¤å¥óºÞ²z¨t²Î´N¦¨¬°«Ü®e©öªº¨Æ¡C

         ¥»³¹­º¥ý¤¶²ÐDelphi¤å¥óºÞ²zªº°ò¥»·§©À©M¼Ð·Ç¹Lµ{/¨ç¼Æ¡A¨Ã´£¨Ñ¤F¤@­Ó°O¿ý¤å¥óªºÀ³¥Î¹ê¨Ò¡A³o¬O±q§Ú­Ì¹ê»Ú½ÒÃD¶}µo¤¤´£¨ú¥X¨Óªº¡C¦Ó«á¤¶²ÐDelphi´£¨Ñªº¤å¥ó±±¥óªº¨Ï¥Î¤èªk¡C³Ì«á´£¨Ñªº¤@­Óºî¦X¨Òµ{MDI¤å¥óºÞ²z¾¹«h¬O¹ïDelphi¤å¥óºÞ²z¥\¯àªººî¦XÀ³¥Î¡C

6.1 ¤å¥ó«¬¦¡©M¼Ð·Ç¹Lµ{¡@

        Delphi¦PObject Pascal¤@¼Ë¤ä´©¤TºØ¤å¥ó«¬¦¡¡A§Y¡G¤å¥»¤å¥ó¡B°O¿ý¤å¥ó¡BµL«¬¦¡¤å¥ó¡C¡@

6.1.1¤å¥»¤å¥ó¡@

      ¤å¥»¤å¥ó«¬¦¡ªºÅܼƥΦp¤U¤èªkÁn©ú¡G

var

TextFileVar: Text ;¡@

       ¤å¥»¤å¥ó¬O¥H¦æ¬°³æ¦ì¶i¦æŪ¡B¼g¾Þ§@ªº¡C¥Ñ©ó¨C¤@¦æªø«×¤£¤@©w¬Û¦P¡A¤£¯à­pºâ¥Xµ¹©w¦æ¦b¤å¥ó¤¤ªº½T¤Á¦ì¸m¡A¦]¦Ó¥u¯à¶¶§Ç¦aŪ¼g¡C¦Ó¥B¤å¥»¤å¥ó¥u¯à³æ¿W¬°Åª©Î¼g¦Ó¥´¶}¡A¦b¤@­Ó¥´¶}ªº¤å¥»¤å¥ó¤W¦P®É¶i¦æŪ¡B¼g¾Þ§@¬O¤£¤¹³\ªº¡C¡@

6.1.1.1 ¤å¥»¤å¥óªº¥´¶}¡BÃö³¬¡@

      ¤å¥»¤å¥óªº¥´¶}»Ý­n¨â­Ó¨BÆJ¡G(1). ¤å¥óÅܼƻPÀÉ®×¼ÐñÃöÁp¡F(2). ªì©l¤ÆŪ¼g¡C

      Áp¤å¥óÅܼƻPÀÉ®×¼Ðñ©I¥sAssignFile¼Ð·Ç¹Lµ{¡G¡@

AssignFile ( TextFileVar , FileName ) ;¡@

     FileName ¬J¥i¥H¬O¥þ¸ô®|¦W¡A¤]¥i¥H¶È¬OÀÉ®×¼Ðñ¡C¹ï©ó«áªÌ¨t²Î±N¦b¥Ø«e¤u§@¥Ø¿ý¤U§ä¨ì¡C

       AssignFile¬ODelphi·s´£¨Ñªº¤@­Ó¨ç¼Æ¡A¨ä¥\¯àµ¥»ù©óObject Pascal¤¤ªºAssign¡C¦ÓAssign¦bDelphi¤¤§ó¦h¦a³Q¥Î§@¤@­Ó¤èªk¦W¡C

ªì©l¤ÆŪ¼g¦³¤TºØ¤è¦¡¡G

1. Reset : ¬°Åª¥´¶}¤å¥ó¨Ã§â¤å¥ó«ü¼Ð²¾°Ê¨ì¤å¥ó­º¡F

2. Rewrite : ¬°¼g«Ø¥ß¤@­Ó·s¤å¥ó¡F

3. Append : ¬°¼g¥´¶}¦s¦bªº¤å¥ó¨Ã§â¤å¥ó«ü¼Ð©w¦ì¦b¤å¥ó§À¡C

        ·í¨Ï¥ÎReset©ÎAppend¹Lµ{¦Ó¤å¥ó¤£¦s¦b®É±N·|¤Þµo¤@­ÓI/O²§±`¡C¦³ÃöI/O²§±`ªº³B²z½Ð°Ñ¬Ý¥»³¹¨Òµ{©M²Ä¤Q¤G³¹¤¤ªº¤¶²Ð¡C

       ¤å¥óªºÃö³¬«Ü²³æ¡A¥u¶·©I¥sCloseFile¹Lµ{§Y¥i¡C

        ÁöµMDelphiÀ³¥Îµ{¦¡¦bµ²§ô®É·|¦Û°ÊÃö³¬©Ò¦³¥´¶}ªº¤å¥ó¡A¦ý¦Û¤v°Ê¤âÃö³¬¤å¥ó¥i¥H½T«OÄÀ©ñ¤å¥ó¥y¬`¡A¨Ã¨Ïµ{¦¡ªº¥iÄâ©Ê¼W±j¡C

        ¬°«O«ù¬Û®e¡ADelphi¤]¤¹³\¥Î¤á¥ÎAssign«Ø¥ßÃöÁp¡ACloseÃö³¬¤å¥ó¡C¡@

6.1.1.2 ¤å¥»¤å¥óªºÅª¼g¡@

        ±q¤å¥»¤å¥ó¤¤Åª¨ú¸ê°T¥ÎRead¡BReadln¨â­Ó¼Ð·Ç¹Lµ{¡C

        ·íŪ¤J¼Æ­È®É¡ARead¡BReadln°²©w¼Æ­È¬O¥Î¤@­Ó©Î¦h­ÓªÅ®æ¤À¶}ªº¡A¦Ó¤£¬O³r¸¹¡B¤À¸¹©Î¨ä¥¦¦r¤¸¡C¹ï¦p¤U¤@±ø»y¥y¡G¡@

Read ( TextFileVar , Num1 , Num2 , Num3 ) ;¡@

      ¦pªG¤å¥ó¤¤ªº¼Æ­È¬O¡G

100 200 300

      «h¯à°÷¦¨¥\Ū¤J¡A¦Ó­Y¤å¥ó¤¤ªº¼Æ­È¬O

100 200¡A 300

      «hReadŪ¤J¡§200¡A¡¨¨Ã¸Õ¹Ï§â¥¦Âà¤Æ¦¨¤@­Ó¼Æ­È®É·|¤Þµo¤@­Ó²§±`¡C

       ·íŪ¤J¦r¤¸¬O¦r¤¸¦ê®É¡ARead¡BReadln¹Lµ{Á`¬OŪ¨úºÉ¥i¯à¦hªº¦r¤¸¶ñ¥R¨ì¦r¤¸¦êÅܼƤ¤©Î¤@ª½Åª¨ì¦æµ²§ô²Å¬°¤î¡C¦]¦¹±q¤å¥»¤å¥ó¤¤Åª¨ú®æ¦¡¤Æªº¦r¤¸¦ê¼Æ¾Ú¡A¥²¶·Án©ú»P¨äªø«×¬Û¤Ç°tªº¦r¤¸¦êÅܼơC¦pªG­n±q¤å¥ó¤¤Åª¨ú³æµü¡A¥²¶·¥ý§â¤å¥ó¤¤ªº¨C¤@¦æŪ¤J¦r¤¸¦ê¡AµM«á¦A±q¦r¤¸¦ê¤¤³v­Ó¤ÀªR¥X³æµü¡C©ÎªÌ¤@¦¸¥u±q¤å¥»¤å¥ó¤¤Åª¤J¤@­Ó¦r¤¸¨Ã´ú¸Õ¨C­Ó¦r¤¸«á¬O§_¬O³æµü¤ÁÂ_³B¡C

        ®æ¦¡¤Æ¦r¤¸¦ê¤§¶¡ªº¤À¹j²ÅÀ³Åª¤J¨ì¤@­ÓÁ{®ÉÅܼƤ¤¡A¦Ó¦r¤¸¦ê»P¼Æ­È¡B¼Æ­È»P¼Æ­È¶¡ªº¤À¹j²ÅŪ¤J®É·|¦Û°ÊÃѧO­ç°£¡C¹ï¦p¤U¤@¦æ¼Æ¾Ú¡G

Mon 12:10 40 50

©w¸q¡@

var

Day: string[3] ;

Time: string[5] ;

Num1, Num2: Integer ;

«h¶·¥Î¦p¤Uªºread »y¥yŪ¤J¡G¡@

read ( TextFileVar , Day , c , Time , Num1 , Num2 ) ;¡@

C¬°¤@­ÓÁ{®É¦r¤¸ÅܼơC¡@

6.1.1.3 ¤å¥»¤å¥óªº½s¿è¡@

        ¦bDelphi¤¤¹ê²{¹ï¤@­Ó¤å¥»¤å¥óªº½s¿è¡A¥u¶·Åý¨ä»P¤@­ÓTmemo±±¥ó«Ø¥ßÃöÁp§Y¥i¡G¡@

Memo1.Lines.LoadFromFile ( TextFileName ) ;¡@

³o¼Ë¦bTMemo¤W©Ò°µªº¤@¤Á­×§ï·í©I¥sMemo³¡¥óªºSaveToFile¤èªk«á³£·|¤Ï¬M¨ì¤å¥ó¤¤¥h¡C¡@

6.1.2 °O¿ý¤å¥ó¡@

       °O¿ý¤å¥ó¬O¤@ºØ¾Þ§@§ó¬°ÆF¬¡ªº¤å¥ó«¬¦¡¡C¥¦¤¹³\¦P®É¬°Åª©M¼g¥´¶}¡A¦Ó¥B¥Ñ©ó°O¿ý¤å¥ó¤¤¨C±ø°O¿ýªºªø«×©T©w¡A©Ò¥H¥iÀH¾÷¦s¨ú¡C

°O¿ý¤å¥óªº«¬¦¡Åܼƥi¦p¤UÁn©ú¡G¡@

var

RecordFileVar: file of RecordType;¡@

RecordType¬O¤@­Ó¦Û©w¸qªº°O¿ý«¬¦¡¡C

      ¦³Ãö°O¿ý¤å¥óªº¾Þ§@§Ú­Ì±N¦b¤U¤@¸`¤¤µ²¦X¨Òµ{¶i¦æ°Q½×¡C¡@

6.1.3 µL«¬¦¡¤å¥ó¡@

      µL«¬¦¡¤å¥ó´£¨Ñ¤F©³¼hªºI/O³q¹D¡A¥i¥Î©ó¦s¨ú¥iÅܪø«×°O¿ýªº¤å¥ó¡C¸g±`¥Î©ó¤å¥óªº´_¨î¾Þ§@¤¤¡C¥Ñ©óDelphi´£¨Ñ¤F§ó¦nªº¤èªk(¨£²Ä¥|¸`)¡A©Ò¥HµL«¬¦¡¤å¥ó«Ü¤Ö¨Ï¥Î¡C¦³¿³½ìªºÅªªÌ¥i°Ñ¬ÝBlockRead¡BBlockWrite¨â­Ó³s½u»²§U±Ô­z¥DÃD¡C¡@

6.1.4 Delphiªº¤å¥óºÞ²z¼Ð·Ç¹Lµ{¡@

      ®Ú¾Ú¥\¯à§Ú­Ì§â¼Ð·Ç¹Lµ{¹º¤À¬°¤Q¤@Ãþ¶i¦æ¤¶²Ð¡C¡@

6.1.4.1 ¤å¥óªº¥´¶}»PÃö³¬¡@

AssignFile ¡G §â¤@­Ó¥~³¡ÀÉ®×¼Ðñ©M¤@­Ó¤å¥óÅܼƬÛÃöÁp

Reset ¡G¥´¶}¤@­Ó¦s¦bªº¤å¥ó

Rewrite ¡G«Ø¥ß¨Ã¥´¶}¤@­Ó·s¤å¥ó¡]©ÎÂл\­ì¦³¤å¥ó¡^

Append ¡G ¥H¥[¤J¤è¦¡¥´¶}¤@­Ó¤å¥ó¡]¥u¾A¥Î©ó¤å¥»¤å¥ó¡^

CloseFile ¡G Ãö³¬¤@­Ó¥´¶}ªº¤å¥ó

FileOpen ¡G¥´¶}¤@­Ó¯S©wªº¤å¥ó¨Ãªð¦^¤å¥ó¥y¬`

FileCreate ¡G«Ø¥ß¤@­Óµ¹©wÀÉ®×¼Ðñªº¤å¥ó¨Ãªð¦^¤å¥ó¥y¬`

FileClose ¡G Ãö³¬¤@­Ó¯S©w¥y¬`ªº¤å¥ó¡@

       «áÃä¤T­Ó¤å¥ó¥D­n¨Ñ¨t²Î¤º³¡¨Ï¥Î¡A¦b¤å¥ó´_¨îªºµ{¦¡³]­p¤¤¤]©¹©¹·|¥Î¨ì¡C¥¦­Ì¾Þ§@ªºª«¥ó¬O¤å¥ó¥y¬`¦Ó¤£¬O¤å¥óÅܼơC¡@

6.1.4.2 ¤å¥ó©w¦ì¡@

Seek ¡G §â¤å¥ó¥Ø«e¦ì¸m²¾¨ì«ü©w³¡¤À

FilePos ¡G ªð¦^¤å¥óªº¥Ø«e¦ì¸m

Eoln ¡G ªð¦^¦æµ²§ô¼Ð»x

EOF ¡G ªð¦^¤å¥óµ²§ô¼Ð»x

FileSeek ¡G §ïÅܥثe¤å¥ó«ü¼Ðªº¦ì¸m

       Seek»PFileSeekªº°Ï§O¬O¡G1. Seek¶È¥Î©ó°O¿ý¤å¥ó¡F2. FileSeekªº°Ñ¼Æ¬O¤å¥ó¥y¬`¡B°¾²¾¶q¡B°_©l¦ì¸m¡C¨ä¤¤°_©l¦ì¸m¦³¤å¥ó­º¡B¥Ø«e¦ì¸m¡B¤å¥ó§À¤TºØ¿ï¾Ü¡CSeekªº°Ñ¼Æ¬O¤å¥óÅܼơB°¾²¾¶q¡A°¾²¾¶q¬O±q¤å¥ó­º¶}©l©w¦ìªº¡C3. FileSeekªº°¾²¾¶q¥H¦ì¤¸¸s²Õ¼Æ¨Ó­pºâ¡A¦ÓSeek¬O®Ú¾Ú°O¿ý¸¹¶i¦æ²¾°Ê¡C

       Seek¡BFilePos¶È¥Î©ó°O¿ý¤å¥ó¡C¦ý¥ô¦ó¤å¥ó³£¥i¥H¬Ý§@¬O°ò©ó¦ì¤¸¸s²Õªº°O¿ý¤å¥ó¡C¤U­±¤@¬qµ{¦¡ªí¥Ü¤F¥¦­Ìªº¥Îªk¡C

{ ¸Ó¨Ò¤lªº³]­p¤¶­±¬°¤@­Ó¥]§tTOpenDialog³¡¥óªºµ¡Åé¡C}¡@

uses Dialogs;

var

f: file of Byte;

size: Longint;

S: String;

y: Integer;

begin

if OpenDialog1.Execute then

begin

AssignFile(f, OpenDialog1.FileName);

Reset(f);

size := FileSize(f);

S := 'File size in bytes: ' + IntToStr(size);

y := 10;

Canvas.TextOut(5, y, S);

y := y + Canvas.TextHeight(S) + 5;

S := 'Seeking halfway into file...';

Canvas.TextOut(5, y, S);

y := y + Canvas.TextHeight(S) + 5;

Seek(f,size div 2);

S := 'Position is now ' + IntToStr(FilePos(f));

Canvas.TextOut(5, y, S);

CloseFile(f);

end;

end.¡@

6.1.4.3 ¤å¥ó¸Ñ°£»PºIÂ_¡@

Erase ¡G ¸Ñ°£¤@­Ó¦s¦bªº¤å¥ó

DeleteFile ¡G ¸Ñ°£¤@­Ó¤å¥ó

Truncate ¡G ±q¤å¥ó¥Ø«e¦ì¸m±N¤å¥óºIÂ_¡@

         Erase»PDeleteFileªº°Ï§O¬O¡GErase¥H¤å¥óÅܼƬ°°Ñ¼Æ¡A·í¤å¥ó¤£¯à¸Ñ°£®É¤Þ°_¤@­Ó²§±`¡FDeleteFile¥HÀÉ®×¼Ðñ¬°°Ñ¼Æ¡A·í¤å¥ó¤£¦s¦b©Î¤£¯à¸Ñ°£®Éªð¦^False¡A¦Ó¨Ã¤£¤Þ°_¤@­Ó²§±`¡C¡@

6.1.4.4 ÀÉ®×¼Ðñ¾Þ§@¡@

Rename ¡G¤å¥ó§ó¦W¡A¥H¤å¥óÅܼƬ°¾Þ§@ª«¥ó

RenameFile ¡G¤å¥ó§ó¦W¡A°Ñ¼Æ¬°¤å¥óªº­ì¦W©M·s¦W

ChangeFileExt ¡G§ïÅܤå¥óÀɮתþ¥[¦W

ExpandFileName ¡Gªð¦^¤å¥ó¥þ¸ô®|¦W

ExtractFileExt ¡Gªð¦^¤å¥óÀɮתþ¥[¦W

ExtractFileName ¡G±q¥þ¸ô®|¦W¤¤ªð¦^ÀÉ®×¼Ðñ

ExtractFilePath ¡Gªð¦^¯S©w¤å¥óªº¸ô®|¡@

6.1.4.5 ¤å¥óÄÝ©Ê¡@

FileGetAttr ¡Gªð¦^¤å¥óÄÝ©Ê

FileSetAttr ¡G³]©w¤å¥óÄÝ©Ê¡@

6.1.4.6 ¤å¥óª¬ºA¡@

FileSize ¡Gªð¦^¤å¥óª«¥ó¤j¤p

IOResult ¡Gªð¦^¤W¤@¦¸I/O¾Þ§@ªºª¬ºA

FileExists ¡G°»´ú¤å¥ó¬O§_¦s¦b¡@

6.1.4.7 ¤å¥ó¤é´Á¡@

DateTimeToFileDate ¡G§âDelphi¤é´Á®æ¦¡Âà´«¬°DOS¤é´Á®æ¦¡

FileDateToDateTime ¡G§âDOS¤é´Á®æ¦¡Âà´«¬°Delphi¤é´Á®æ¦¡

FileGetDate ¡Gªð¦^¤å¥óªºDOS¤é´Á®É¶¡ÂW

FileSetDate ¡G³]©w¤å¥óªºDOS¤é´Á®É¶¡ÂW¡@

6.1.4.8 ¤å¥óŪ¼g¡@

Read¡AReadln ¡G±q¤å¥»©Î°O¿ý¤å¥ó¤¤Åª¨úÅܼÆ

Write ¡G±N«ü©wÅܼƼg¤J¤å¥»©Î°O¿ý¤å¥ó

Writeln ¡G±N«ü©wÅܼƼg¤J¤å¥»¤å¥ó¨Ã¼g¤J¤@­Ó¦æµ²§ô¼Ð»x

FileRead ¡G±q¤@­Ó«ü©w¤å¥ó¤¤Åª¨úÅܼÆ

FileWrite ¡G¦V«ü©w¤å¥ó¼g¤J¼Æ¾Ú¡@

FileRead©MFileWrite³£¬O¥H¤å¥ó¥y¬`¬°¾Þ§@ª«¥ó¡A¥D­n¨Ñ¨t²Î¤º³¡¨Ï¥Î¡C¡@

6.1.4.9 ¥Ø¿ý¾Þ§@¡@

MkDir ¡G«Ø¥ß¥Ø«e¤u§@¥Ø¿ýªº¤l¥Ø¿ý

ChDir ¡G§ïÅܥثe¤u§@¥Ø¿ý

GetDir ¡Gªð¦^¯S©wºÏºÐªº¥Ø«e¤u§@¥Ø¿ý

RmDir ¡G¸Ñ°£¤@­ÓªÅ¤l¥Ø¿ý¡@

6.1.4.10 ºÏºÐ¾Þ§@¡@

DiskFree ¡Gªð¦^ºÏºÐ¦Û¥ÑªÅ¶¡

DiskSize ¡Gªð¦^¯S©wºÏºÐªº¤j¤p¡@

6.1.4.11 ¤å¥ó§ä¨ì

FileSearch ¡G§ä¨ì¥Ø¿ý¤¤¬O§_¦s¦b¬Y¤@¯S©w¤å¥ó

FindFirst ¡G¦b¥Ø¿ý¤¤§ä¨ì»Pµ¹©wÀÉ®×¼Ðñ¡]¥i¥H¥]§t¤Ç°t²Å¡^¤ÎÄݩʶ°¬Û¤Ç°t ªº²Ä¤@­Ó¤å¥ó

FindNext ¡Gªð¦^²Å¦X±ø¥óªº¤U¤@­Ó¤å¥ó

FindClose ¡G¤¤¤î¤@­ÓFindFirst / FindNext§Ç¦C¡@

        ¦³Ãö¤å¥óºÞ²z¼Ð·Ç¹Lµ{/¨ç¼Æªº§ó¸Ô²Ó¸ê®Æ¡A½Ð¬d¾\Delphi¬ÛÃöªºHelp¥DÃD¡C¥H¤Wªº¤j³¡¤À¹Lµ{¦b«á­±³£¦³À³¥Î¹ê¨Ò¡AŪªÌ¥i¥H±q¤¤Åé·|¨ä¥Îªk¡C

        ¦bDelphiªº³s½u»²§U±Ô­zHelp¨t²Î¤¤§â¦³Ãö¤å¥óªº¹Lµ{/¨ç¼Æ¤À¬°¨â­Ó¥DÃD¡GI/O Routine©MFile_Management Routine¡C«eªÌ¤j³¡¤À¥H¤å¥óÅܼƬ°¾Þ§@ª«¥ó¡A¦Ó«áªÌ¤j³¡¤À¥HÀÉ®×¼Ðñ©Î¤å¥ó¥y¬`¬°¾Þ§@ª«¥ó¡C³oùج°¤F¤è«KŪªÌªº¨Ï¥Î¡A§Ú­Ì«ö¥\¯à­«·s¶i¦æ¤F¤ÀÃþ¡C¦b¤U¤@¸`¤¤¥D­nÀ³¥ÎI/O Routine¥DÃD¤Uªº¹Lµ{¡A¦Ó¦b²Ä¥|¸`ªººî¦XÁ|¨Ò¤¤¥D­nÀ³¥ÎFile_Management Routine¥DÃD¤Uªº¹Lµ{¡C

       ¥t¥~¡AWindows´£¨Ñ¤F³\¦h¦³Ãö¤å¥óºÞ²zªºAPI¨ç¼Æ¡CÁöµM¦b¤@¯ë±¡ªp¤U¡A§Q¥ÎDelphi´£¨Ñªº¨ç¼Æ¤w¨¬°÷¸Ñ¨M°ÝÃD¡A¦ý¦³®É­Ô¤´µM»Ý­n¨Ï¥ÎWindows API¡C¦b(6.4.4.2)¤¤§Ú­Ì´N¥Î¨ì¤FWindows API¨ç¼ÆGetDriveType¡C¦³ÃöWindows API¨ç¼Æªº±¡ªp¡A½ÐŪªÌ°Ñ¾\¬ÛÃöªº¸ê®Æ¡A³oùؤ£¦A¶i¦æ¤¶²Ð¡C

6.2 °O¿ý¤å¥óªºÀ³¥Î¡@

6.2.1 ¥ô°È¤¶²Ð¡@

¡@¡@¦b³o¤@¸`¡A§Ú­Ì¶}µo¤@­Ó¨t²Î¦w¥þ©Êºî¦Xµû¦ô¤èªkºÞ²z¨t²Î¡C¨t²Î¦w¥þ©Ê¦b½ÆÂø¶µ¥Ø¶}µo¤¤¤Q¤À­«­n¡A¦ý¥Ñ©ó²o¯A­±¼s¦]¦Ó«ÜÃøÀò±o«ÈÆ[¡B¥þ­±ªºµû¦ô­È¡CŲ©ó¦¹§Ú­Ì´£¥X¦h¨¤«×¡B¦h°¼­±µû¦ô¦Ó«á©w¶q¾ã¦Xªº«ä¸ô¡A¨Ã¦b¦¹°ò¦¤W´£¥X¤F¦hºØ¦w¥þ©Êºî¦Xµû¦ô¤èªk¡C¨CºØ¤èªk¥Ñ¤£¦P³¡ªù¶i¦æµû¦ô¦Ó«á§âµ²ªG¶×Á`¡Bºî¦X¡C

¡@¡@¬°¦¹§Ú­Ì©w¸q¦p¤Uªº°O¿ý«¬¦¡¡G¡@

type

TNature = (Micro,Macro);

{¤èªk©Ê½è¡A¤À¬°·LÆ[©M§»Æ[¨âÃþ}¡@

¡@¡@¡@TMethod = Record

Name: string[20]; {¤èªk¦W}

Condition: string[40]; {¤èªk¾A¥Î±ø¥ó}

Nature: TNature; {¤èªk©Ê½è}

Result: Real; {¤èªkµû¦ô­È}

end;¡@

¥Î¨Ó°O¿ý¤£¦P¤èªkªº¸ê°T¡C

¡@¡@¥Ñ©ó¤£¦P¤èªkªº±ø¥ó¡B©Ê½è¤£¦P¡A¦]¦Ó¹ï¤uµ{¶}µoªº¤£¦P¶¥¬q¾A¥Î¤èªk¶°¤]¤£¦P¡C¦]¦¹»Ý­n®Ú¾Ú¹ê»Ú±¡ªp¹ï¤èªk¶°¶i¦æºÞ²z¡C§Ú­Ì§â¨C¤@¤èªk§@¬°¤@±ø°O¿ý¡A¨C¤@¤èªk¶°§@¬°¤@­Ó°O¿ý¤å¥ó¡C¤U­±°Q½×¨t²Îªº¹ê²{¤èªk¡C¡@

6.2.2 ³]­p°ò¥»«ä¸ô¡@

¡@¡@¥»¨t²Î­n¹ê²{ªº°ò¥»¥\¯à¬O¤å¥óªº¥´¶}¡B«Ø¥ß¡BÃö³¬¡BÅã¥Ü¡A°O¿ýªº¼W¥[¡B­×§ï¡B¸Ñ°£¥H¤Îµ²ªGªººî¦X©MÅã¥Ü¡C¬°¦¹§Ú­Ì¨Ï¥Î¤F¨â¸s¸s²Õ«ö¶s¤À§O¥Î©ó¤å¥ó©M°O¿ýªº¾Þ§@¡A ¨Ï¥Î¤@­ÓStringGrid±±¥ó¨ÓÅã¥Ü¤å¥ó¤º®e¡A¨Ï¥Î¤@­Ó°ßŪ½s¿è®ØÅã¥Üµ²ªGªººî¦X¡C

¨ä¤¤¦U³¡¥óªº¼Ðñ¡B¥\¯à¦p¤Uªí©Ò¥Ü¡G¡@

ªí6.1 ¥Dµøµ¡³¡¥óªº³]­p

¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w

³¡¥ó¼Ðñ ¥D­nÄÝ©Ê ³Æµù

¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X

RecFileForm BorderStyle=bsDialog ¤å¥ó¥´¶}«á§âÀÉ®×¼Ðñªþ¨ìµøµ¡¼ÐÃD«á

Position=poScreenCenter

StringGrid1 ¤j¤p¦æ¼Æ°ÊºA½T©w

HazAttr(½s¿è®Ø) ReadOnly=True Åã¥Üºî¦Xµ²ªG

OpenButton TabOrder=0 ¥´¶}¤@­Ó°O¿ý¤å¥ó,­Y¤å¥ó¤£¦s¦b«h«Ø¥ß

NewButton Caption='¥´¶}' «Ø¥ß¤@­Ó°O¿ý¤å¥ó,­Y¤å¥ó¦s¦b«h¥´¶}

CloseButton Caption='Ãö³¬' Ãö³¬¤@­Ó¤w¥´¶}ªº¤å¥ó

AddButton Caption='¼W¥[' ¼W¥[¤@±ø°O¿ý

ModifyButton Caption='­×§ï' ­×§ï¤@±ø°O¿ý

DeleteButton Caption='¸Ñ°£' ¸Ñ°£¤@±ø°O¿ý

CalcuButton Caption='­pºâ' ­pºâ³Ì²×µ²ªG¨ÃÅã¥Ü

ExitButton Caption='µ²§ô' ¨t²Î²×¤î¡C­Y¥Ø«e¦³¥´¶}ªº¤å¥ó«h¥ýÃö³¬

OpenDialog1 Filter= ¿ï¾Ü©Î¿é¤J±ý¥´¶}ªº¤å¥ó

'Record File(*.Rec)|.Rec

|Any File(*.*)|*.*'

¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¡@

¡@¡@¥t¥~¡AStringGrid1¡BHazAttrªº¼ÐÃD¥Î¨â­Ó¼ÐÅÒ®Ø(Label)¨ÓÅã¥Ü¡C

¡@¡@¥t¥~§Ú­ÌÁٻݭn¤@­Ó½s¿è¹ï¸Ü¤è¶ô¡C¨ä¤¤¥|­Ó½s¿è®ØName¡BCondition¡BNature¡B Result¤À§O¹ïÀ³TMethod°O¿ýªº¥|­ÓÄæ¦ì¡C

¬°¨ó½Õµ{¦¡°õ¦æ¡A§Ú­Ì©w¸q¤F¤@¸s¸s²Õ¥þ§½ÅܼơC¦UÅܼƪº«¬¦¡¡B§@¥Î¦p¤Uªí¡C¡@

¡@¡@ ªí6.2¡@¥þ§½ÅܼƤΨä§@¥Î

¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w

¡@¡@ ÅܼƦW «¬¦¡ §@¥Î

¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X

MethodFile MethodFileType »P¥Ø«e¥´¶}¤å¥ó¬ÛÃöÁpªº¤å¥óÅܼÆ

FileName string[70] ¥Ø«e¥´¶}¤å¥óªºÀÉ®×¼Ðñ

Count Count ¥Ø«e¥´¶}¤å¥óªº°O¿ýÁ`¼Æ

CurrentRec Integer ¥Ø«e³B²z°O¿ý¸¹

FileOpened Boolean ¥Ø«e¬O§_¦³¤å¥ó¥´¶}

¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¡@

°O¿ý¤å¥ó«¬¦¡MethodFileTypeªº©w¸q¬°¡@

¡@¡@type

MethodFileType = file of TMethod;¡@

        ¥¬º¸ÅܼÆFileOpened¥Î©ó±±¨î¤å¥ó«ö¶sªº¨Ï¯à¡BÅܦǡA°O¿ý«ö¶sªº¤ÏÀ³¥H¤Î¨t²Îµ²§ô®É¬O§_»Ý­n­º¥ýÃö³¬¤å¥ó¡C¡@

6.2.3 °O¿ý¤å¥óªº¥´¶}©M«Ø¥ß¡@

¡@¡@°O¿ý¤å¥óªº¥´¶}©M«Ø¥ß¦P¤å¥»¤å¥ó¤@¼Ë¤]»Ý­nÃöÁp©Mªì©l¤Æ¨â­Ó¨BÆJ¡C¦P¤å¥»¤å¥ó°ß¤@ªº¤£¦P¬O¤£¯à¨Ï¥ÎAppend¹Lµ{¡C

¡@¡@°O¿ý¤å¥ó¯Ê¬Ù±¡ªp¤U¥HŪ¼g¤è¦¡¥´¶}¡A¦pªG·Q¥H°ßŪ©Î¥u¼g¤è¦¡¥´¶}¡A«h»Ý­n­×§ïSystem³æ¤¸¤¤©w¸qªºÅܼÆFileModeªº­È¡C

¡@¡@FileModeªº¨ú­È©M·N¸q¦p¤Uªí¡C¡@

¡@¡@ ªí6.3 FileModeªº¨ú­È©M·N¸q

¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w

¨ú­È ·N¸q

¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X

0 °ßŪ

1 ¥u¼g

2 Ū¼g

¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¡@

¡@¡@FileMode¬O¤@­Ó¥þ§½ÅܼơA¹ï¥¦ªº¨C¦¸­×§ï³£±N¼vÅT©Ò¦³Resetªº¾Þ§@¡A¦]¦¹¦b¥´¶}¦Û¤vªº¤å¥ó«áÀ³Á٭쥦ªº­È¡C

¡@¡@¦b¥»¨t²Î¤¤¡A·í¥Î¤á«ö¤U¡§¥´¶}¡¨«ö¶s®É¡A­º¥ý¼u¥X¤@­Ó¼Ð·Ç¤å¥ó¥´¶}¹ï¸Ü¤è¶ô¡A­n¨D¥Î¤á¿é¤J©Î¿ï¾ÜÀÉ®×¼Ðñ¡C½T»{«á¦pªG¸ÓÀÉ®×¼Ðñªº¤å¥ó¦s¦b¡A«h¥ÎReset¥´¶}¡A­Y¤£¦s¦b«h«Ø¥ß¡Cµ{¦¡²M³æ¦p¤U¡C¡@

procedure TRecFileForm.OpenButtonClick(Sender: TObject);

begin

if OpenDialog1.Execute then

FileName := OpenDialog1.FileName

else

exit;

AssignFile(MethodFile,Filename);

try

Reset(MethodFile);

FileOpened := True;

except

On EInOutError do

begin

try

if FileExists(FileName) = False then

begin

ReWrite(MethodFile);

FileOpened := True;

end

else

begin

FileOpened := False;

MessageDlg('¤å¥ó¤£¯à¥´¶}',mtWarning,[mbOK],0);

end;

except

On EInOutError do

begin

FileOpened := False;

MessageDlg('¤å¥ó¤£¯à«Ø¥ß',mtWarning,[mbOK],0);

end;

end;

end;

end;

if FileOpened = False then exit;

Count := FileSize(MethodFile);

if Count>0 then

ChangeGrid;

RecFileForm.Caption := FormCaption+' -- '+FileName;

NewButton.Enabled := False;

OpenButton.Enabled := False;

CloseButton.Enabled := True;

end;

¡@¡@­º¥ý¨t²Î¸Õ¹Ï¥ÎReset¥´¶}¤@­Ó¤å¥ó¡A¨Ã¸mFileOpened¬°True¡C¦pªG¤å¥ó¤£¯à¥´¶}¡A«h¤Þµo¤@­ÓI/O²§±`¡C¦b²§±`³B²z¹Lµ{¤¤¡A­º¥ý°»´ú¤å¥ó¬O§_¦s¦b¡C­Y¤£¦s¦b«h«Ø¥ß³o­Ó¤å¥ó¡C§_«h¬O¨ä¥¦­ì¦]¤Þµoªº²§±`¡A«h§âFileOpend­«¸m¬°False¡A ¨ÃÅã¥Ü¸ê°T¡§¤å¥ó¤£¯à¥´¶}¡¨¡C¦b¤å¥ó«Ø¥ß¹Lµ{¤¤¤´¥i¯à¤Þµo²§±`¡A¦]¦Ó¦b¤@­Ó±_ª¬ªº²§±`³B²z¤¤§âFileOpened­«¸m¬°False¡A¨Ã´£¥Ü¸ê°T¡§¤å¥ó¤£¯à«Ø¥ß¡¨¡C

¡@¡@¦³Ãö²§±`³B²zªº¤º®e½ÐŪªÌ°Ñ¬Ý²Ä¤Q¤G³¹¡C³o¬qµ{¦¡±Ô­z¡G²§±`³B²z¾÷¨î¤£¶È¯à¨Ï§Ú­Ìªºµ{¦¡§ó°·§§¡A¦Ó¥B¬°µ{¦¡³]­p´£¨Ñ¤FÆF¬¡©Ê¡C

¡@¡@·í¥Î¤á«ö¤U¡§«Ø¥ß¡¨«ö¶s®É¡A¨t²Î­º¥ý¼u¥X¤@­Ó¼Ð·Ç¿é¤J®Ø¡A­n¨D¥Î¤á¿é¤JÀÉ®×¼Ðñ¡A½T»{«á¨t²Î­º¥ý°»´ú¤å¥ó¬O§_¦s¦b¡C­Y¦s¦b«hª½±µ¥´¶}¡A§_«h«Ø¥ß¤@­Ó·s¤å¥ó¡C¥´¶}©Î«Ø¥ß¹Lµ{¾É­P²§±`¡A«h­«¸mFileName©MFileOpened¨â­Ó¥þ§½ÅܼơC¡@

procedure TRecFileForm.NewButtonClick(Sender: TObject);

begin

FileName := InputBox('¿é¤J®Ø','½Ð¿é¤JÀÉ®×¼Ðñ','');

if FileName = '' then Exit;

try

AssignFile(MethodFile,FileName);

if FileExists(FileName) then

begin

Reset(MethodFile);

Count := FileSize(MethodFile);

if Count>0 then

ChangeGrid;

end

else

begin

Rewrite(MethodFile);

count := 0;

end;

FileOpened := true;

Except

on EInOutError do

begin

FileName := '';

FileOpened := False;

end;

end;

if FileOpened then

begin

NewButton.Enabled := False;

OpenButton.Enabled := False;

CloseButton.Enabled := True;

RecFileForm.Caption := FormCaption+' -- '+FileName;

end;

end;

¡@¡@·í¤å¥ó¥´¶}©Î«Ø¥ß«á¡A©Ò­n°µªº¤u§@¦³¡G

¡@¡@¡´ ­Y¤å¥ó«DªÅ¡A«h­pºâ¤å¥óªø«×¡A¨Ã¥Î¤å¥ó¤º®e¶ñ¥RStringGrid1

¡@¡@¡´ ¡§«Ø¥ß¡¨¡B¡§¥´¶}¡¨«ö¶sÅܦǡA¡§Ãö³¬¡¨«ö¶s¨Ï¯à

¡@¡@¡´ §âÀÉ®×¼Ðñªþ¨ìµøµ¡¼ÐÃD«á

6.2.4 °O¿ý¤å¥óªºÅª¤J©MÅã¥Ü¡@

¡@¡@©w¸q¤@­Ó¥þ§½ÅܼÆCount¥Î¨Ó¦sÀɤå¥ó¤¤ªº°O¿ý­Ó¼Æ¡C·í¤å¥ó¸ü¤J®É¡G¡@

¡@¡@Count := FileSize(MethodFile)¡F¡@

¡@¡@¦pªGCount > 0¡A«h­º¥ý½T©wStringGrid1ªº°ª«×¡B¦æ¼Æ¡C¬°«OÃÒStringGrid1¤£·|Âл\µøµ¡¤U­±ªº½s¿è®Ø¡A©w¸q¤@­Ó±`¼ÆMaxShow¡C·íCount < MaxShow®É¡A°O¿ý¥i¥þ³¡Åã¥Ü¡F·íCount >= MaxShow®É¡AStringGrid1¦Û°Ê¥[¤J¤@­Ó¨÷°Ê´Î¡C¬°«OÃÒ¨÷°Ê´Î¤£Âл\±¼Åã¥Ü¤º®e¡AStringGrid1ªº¼e«×À³¯d¦³¾l¦a¡C

¡@¡@½T©wStringGrid1°ª«×¡B¦æ¼Æªº¥N½X¦p¤U¡G¡@

¡@¡@With StringGrid do

if count < MaxShow then

Height := DefaultRowHeight * (Count+1)+10

else

Height := DefaultRowHeight * MaxShow+10;

RowCount := Count+1;

end;¡@

        ¦Ó«á±q¤å¥ó¤¤³v­ÓŪ¤J°O¿ý¨ÃÅã¥Ü¦bStringGrid1ªº¬ÛÀ³¦ì¸m¡G¡@

¡@¡@for i := 1 to Count do

begin

Read(MethodFile,MethodRec);

ShowMethod(MethodRec,i);

end;¡@

         ShowMehtod¬O¤@­Ó¹Lµ{¡A¥Î¨Ó§â¤@±ø°O¿ý¶ñ¤JStringGrid1ªº¤@¦æ¤¤¡C¹ï©óName¡BConditionÄæ¦ì¦Ó¨¥¡A¥u¶·ª½±µ½á­È§Y¥i¡F¦Ó¹ïNature Äæ¦ì»Ý­n§âªTÁ|«¬¦¡­ÈÂà¤Æ¬°¹ïÀ³·N¸qªº¦r¤¸¦ê(0¡G¡§·LÆ[¡¨¡A1¡G¡§§»Æ[¡¨)¡F¦Ó¹ïResultÄæ¦ì«h»Ý­n§â¼Æ­ÈÂà¤Æ¬°¤@©w®æ¦¡ªº¦r¤¸¦ê¡G¡@

Str (MethodRec.Result:6:4,ResultStr)¡F

¡@ StringGrid1.Cells[3,Pos] := ResultStr;¡@

§YResultÅã¥ÜÄæ¦ì¼e¬°6¡A¨ä¤¤¤p¼ÆÂI«á¦ì¼Æ¬°4¡C¡@

6.2.5 ¼W¥[¤@±ø°O¿ý¡@

¡@¡@·í¥Î¤á«ö¤@¤U¡§¼W¥[¡¨«ö¶s®É¿Ã¹õ±N·|¼u¥X¤@­Ó°O¿ý½s¿è¼Ò¦¡¹ï¸Ü¤è¶ôEditForm¡C¦b½s¿è®Ø¤¤¶ñ¤J¦X¾Aªº¤º®e¨Ã«öOKÁäÃö³¬«á¡A¬ÛÀ³­È¼g¤J¤@­ÓTMethod«¬¦¡ªºÅܼÆMethodRec¤¤¡C¨ä¤¤Nature©MResult Äæ¦ì»Ý­n¶i¦æÂà´«¡C¤§«á¼W¥[ªº°O¿ý¥[¤J¨ìStringGrid1ªºÅã¥Ü¤¤¡C

¡@¡@³Ì«á¤å¥ó©w¦ì©ó§À³¡¡A¼g¤J¥Ø«e°O¿ý¡AÁ`°O¿ý¼Æ¥[1¡C¡@

¡@ Seek(MethodFile,Count);

Write(MethodFile,MethodRec);

Count := Count+1;¡@

§¹¾ãªºµ{¦¡²M³æ¦p¤U¡G¡@

procedure TRecFileForm.AddButtonClick(Sender: TObject);

var

MethodRec: TMethod;

Rl: Real;

k: Integer;

EditForm: TEditForm;

begin

if FileOpenEd = False then Exit;

EditForm := TEditForm.Create(self);

if EditForm.ShowModal <> idCancel then

begin

HazAttr.text := '';

MethodRec.Name := EditForm.MethodName.text;

MethodRec.Condition := EditForm.Condition.text;

case EditForm.NatureCombo.ItemIndex of

0:

MethodRec.Nature := Micro;

1:

MethodRec.Nature := Macro ;

end;

Val(EditForm.Result.text,Rl,k);

MethodRec.Result := Rl;

with StringGrid1 do

begin

if Count < MaxShow then

Height := Height+DefaultRowHeight;

RowCount := RowCount+1;

end;

ShowMethod(MethodRec,Count+1);

seek(MethodFile,Count);

write(MethodFile,MethodRec);

Count := Count+1;

end;

end;¡@

6.2.6 ­×§ï°O¿ý¡@

¡@¡@­º¥ýÀò¨ú¥Ø«e°O¿ý¦ì¸m¡G¡@

¡@¡@CurrentRec := StringGrid1.Row - 1;¡@

        ¦Ó«á¥´¶}½s¿è¹ï¸Ü¤è¶ô¨ÃÅã¥Ü¥Ø«e­È¡C­×§ï§¹²¦«á¡A­×§ïµ²ªG¦sÀɦb¤@­Ó°O¿ý¤¤¨Ã¦bStringGrid1¤¤­«·sÅã¥Ü¡C

¡@¡@³Ì«á­×§ïµ²ªG¼g¤J¤å¥ó¡G¡@

Seek(MethodFile,CurrentRec);

Write(MethodFile,MethodRec);¡@

§¹¾ãµ{¦¡¦p¤U¡G¡@

procedure TRecFileForm.ModifyButtonClick(Sender: TObject);

var

MethodRec: TMethod;

Rl: Real;

k: Integer;

EditForm: TEditForm;

begin

if FileOpened = False then Exit;

EditForm := TEditForm.Create(self);

CurrentRec := StringGrid1.Row-1;

with EditForm do

begin

MethodName.text := StringGrid1.Cells[0,CurrentRec+1];

Condition.text := StringGrid1.Cells[1,CurrentRec+1];

if StringGrid1.Cells[2,CurrentRec+1] = '·L Æ[' then

NatureCombo.ItemIndex := 0

else

NatureCombo.ItemIndex := 1;

Result.text := StringGrid1.Cells[3,CurrentRec+1];

if ShowModal <> idCancel then

begin

HazAttr.text := '';

MethodRec.Name := MethodName.text;

MethodRec.Condition := Condition.text;

case NatureCombo.ItemIndex of

0:

MethodRec.Nature := Micro;

1:

MethodRec.Nature := Macro ;

end;

Val(Result.text,Rl,k);

MethodRec.Result := Rl;

ShowMethod(MethodRec,CurrentRec+1);

seek(MethodFile,CurrentRec);

write(MethodFile,MethodRec);

end;

end;

end;¡@¡@


«á¤@­¶
«e¤@­¶
¦^¥Ø¿ý
¦^­º­¶