«á¤@­¶
«e¤@­¶
¦^¥Ø¿ý
¦^­º­¶
²Ä¤Q¤E³¹¡@Delphi¦Û©w¸q³¡¥ó¶}µo¡]¤T¡^

3. «Ø¥ß·sªº°T®§³B²z¤èªk

¦]¬°Delphi¥u¬°¤j¦h¼Æ´¶³qWindows°T®§´£¨Ñ¤F³B²z¤èªk¡A©Ò¥H·í§A©w¸q¦Û¤vªº°T®§®É¡A´N­n«Ø¥ß·sªº°T®§³B²z¤èªk¡C

¡@¥Î¤á¦Û©w¸q°T®§ªº¹Lµ{¥]¬A¨â­Ó¤è­±¡G

¡@ ¡´ ©w¸q¦Û¤vªº°T®§

¡´ Án©ú·sªº°T®§³B²z¤èªk

¡@

Æ« ©w¸q¦Û¤vªº°T®§

³\¦h¼Ð·Ç³¡¥ó¬°¤F¤º³¡¨Ï¥Î©w¸q¤F°T®§¡C©w¸q°T®§ªº³Ì¤@¯ëªº°Ê¦]¬O¼s¼½¸ê°T©Mª¬ºA§ïÅܪº³qª¾¡C

¡@¡@©w¸q°T®§¹Lµ{¤À¨â¨B¡G

¡@¡@¡´ Án©ú°T®§¼ÐÃѲÅ

¡´ Án©ú°T®§°O¿ý«¬¦¡

¡@

Æ¡ Án©ú°T®§¼ÐÃÑ

°T®§¼ÐÃѬO¾ã«¬¤j¤pªº±`¼Æ¡CWindows¦sÀɤF¤p©ó1024ªº°T®§¥Î©ó¦Û¤v¨Ï¥Î¡A¦]¦¹·íÁn©ú¦Û¤vªº°T®§®É¡A§AÀ³·í¤j©ó1024¡C

¡@¡@±`¼ÆWM_USER¥Nªí¥Î©ó¦Û©w¸q°T®§ªº¶}©l¼Æ¦r¡C·í©w¸q°T®§¼Ð·Ç®É¡A§AÀ³·í°ò©óWM_USER¡C

¡@¡@¬Y¨Ç¼Ð·ÇWindows±±¨î¨Ï¥Î¥Î¤á¦Û©w¸q½d³òªº°T®§¡A¥]¬AListBox¡BComboBox¡BEditBox©MButton¡C¦pªG±q¤W­z³¡¥ó¤¤Ä~©Ó¤F¤@­Ó³¡¥ó¡A¦b©w¸q·sªº°T®§®É¡AÀ³·íÀˬd¤@¤UMessage³æ¤¸¬O§_¦³°T®§¥Î©ó¸Ó±±¨î¡C

¡@¡@©w¸q°T®§ªº¤èªk¦p¤U¡G

¡@

¡@¡@Const

WM_MYFIRSTMESSAGE=WM_USER+0;

WM_MYSECONDMESSAGE=WM_USER+1;

¡@

Æ¢ Án©ú°T®§°O¿ý«¬¦¡

¡@¡@¦pªG§A·Qµ¹¤©¦Û©w¸q°T®§ªº°Ñ¼Æ¦³§t¸qªº¦W¦r¡A´N­n¬°¸Ó°T®§Án©ú°T®§°O¿ý«¬¦¡¡C°T®§°O¿ý¬O¶Çµ¹°T®§³B²z¤èªkªº°Ñ¼Æªº«¬¦¡¡C¦pªG¤£¨Ï¥Î°T®§°Ñ¼Æ©ÎªÌ·Q¨Ï¥Î­·®æ°Ñ¼Æ¡A¥i¥H¨Ï¥Î¯Ê¬Ùªº°T®§°O¿ý¡C

¡@¡@Án©ú°T®§°O¿ý«¬¦¡­n¿í´`¤U¦C³W«h

¡´ ¥H°T®§¦W©R¦W°T®§°O¿ý«¬¦¡¡A¥HT¥´ÀY

¡´ ±N°O¿ý¤¤²Ä¤@­ÓÄæ¦ì©R¦W¬°Msg¡A«¬¦¡¬°TMsgPraram

¡´ ±N±µµÛªº¨â­Ó¦ì¤¸¸s²Õ©w¸q¬°word ¥HÅTÀ³word¤j¤pªº°Ñ¼Æ

¡´ ±N±µµÛªº¥|­Ó¦ì¤¸¸s²Õ»Plong°Ñ¼Æ¤Ç°t

¡´ ±N³Ì«áªºÄæ¦ì©R¦W¬°Result¡A«¬¦¡¬°Longint

¡@

¤U­±¬OTWMMouseªº©w¸q

¡@

type

TWMMouse=record

Msg: TMsgParam; { ²Ä¤@­Ó¬O°T®§ID }

Keys: Word; { wParam }

case Integer of { ©w¸qlParamªº¨âºØ¤è¦¡ }

o: (

Xpos: Integer; { ©ÎªÌ¥Hx¡Ay®y¼Ð }

Ypos: Integer);

1: (

Pos : TPoint; { ©ÎªÌ§@¬°³æ­ÓÂI }

Result: Longint; ) { ³Ì«á¬OResultÄæ¦ì }

end;

¡@

TWMMouse¨Ï¥ÎÅܪø°O¿ý©w¸q¤F¬Û¦P°Ñ¼Æªº¤£¦P¦W¦r¶°¡C

¡@¡@Ƭ Án©ú·sªº°T®§³B²z¤èªk

¡@¡@¦³¨âÃþÀô¹Ò»Ý­n§A©w¸q·sªº°T®§³B²z¤èªk¡G

¡@¡@¡´ ¦Û©w¸q·s³¡¥ó»Ý­n³B²z¨S¦³³Q¼Ð·Ç³¡¥ó³B²zªºWindows°T®§

¡´ ¤w©w¸q¤F¦Û©w¸q³¡¥ó¨Ï¥Îªº·s°T®§

¡@

Án©ú°T®§³B²z¤èªkªº¿ìªk¦p¤U¡G

¡´ ¦b³¡¥óÁn©ú¤¤ªºprotected³¡¤ÀÁn©ú¤èªk

¡´ ±N¤èªk°µ¦¨¹Lµ{

¡´ ¥H­n³B²zªº°T®§¦W©R¦W¤èªk ¦ý¤£±a©³½u

¡´ ¶Ç»¼¤@­Ó©R¦W¬°Messageªºvar°Ñ¼Æ¡A«¬¦¡¬°°T®§°O¿ý«¬¦¡

¡´ ½s¼g¥Î©ó¸Ó³¡¥óªº¯S§O³B²z¥N½X

¡´ ©I¥sÄ~©Óªº°T®§¤èªk

¡@

¤U­±¬O¥Î©ó¥Î¤á¦Û©w¸q°T®§CM_CHANGECOLORªº°T®§³B²z¥N½X:

¡@

type

TMyComponent=class(TControl)

¡K

protected

procedure CMChangeColor(var Message:TMessage);

message CM_CHANGECOLOR;

end:

¡@

procedure TMyComponent.CMChangeColor(var Message: TMessage);

begin

color := Message lParam;

inherited;

end;

¡@

19.2.2.4 µù¥U³¡¥ó

¡@

¡@¡@½s¼g³¡¥ó¤Î¨äÄÝ©Ê¡B¤èªk©M¨Æ¥ó¥u¬O³¡¥ó«Ø¥ß¹Lµ{ªº¤@³¡¤À¡C¾¨ºÞ³¡¥ó¨ã¦³³o¨Ç¯S©º´N¥i¥Î¡A¦ý³¡¥ó¯u¥¿¥\¯à±j¤jªº¬O¦b³]­p®É¾Þ§@¥¦­Ìªº¯à¤O¡C

¡@¡@¨Ï³¡¥ó¦b³]­p®É¥i¥Î»Ý­n¸g¹L¦p¤U´X¨B¡G

¡@¡@¡´ ¥ÎDelphiµù¥U³¡¥ó

¡´ ¼W¥[¿ï¾ÜªOÂI°}¹Ï

¡´ ´£¨Ñ¦³ÃöÄÝ©Ê©M¨Æ¥óªº»²§U±Ô­z

¡´ ¦s¶J©MŪ¨úÄÝ©Ê

¡@

1. ¥ÎDelphiµù¥U³¡¥ó

¬°¤FÅýDelphiÃѧO¦Û©w¸q³¡¥ó¡A¨Ã±N¥¦­Ì©ñ¸m©óComponent Palette¤W¡A§A¥²¶·µù¥U¨C¤@­Ó³¡¥ó¡C

µù¥U¤@­Ó³¡¥ó­n¦b³¡¥ó©Ò¦b³æ¤¸ùØ¥[¤JRegister¤èªk¡A³o¥]¬A¨â­Ó¤è­±ªº¤º®e¡G

¡´ Án©úµù¥U¹Lµ{

¡´ ¹ê²{µù¥U¹Lµ{

¡@

¤@¥¹¸Ë³]¤Fµù¥U¹Lµ{¡A´N¥i¥H±N³¡¥ó¸Ë³]¦b¿ï¾ÜªO¤W¡C

¡@¡@µù¥U¹Lµ{­n¦b³¡¥ó©Ò¦b³æ¤¸¤¤¼g¤@­Ó¹Lµ{¡A¸Ó¹Lµ{¥²¶·¥HRegister©R¦W¡CRegister¥²¶·¥X²{¦b®w³æ¤¸ªºinterface³¡¤À¡A³o¼ËDelphi´N¯à©w¦ì¥¦¡C¦bRegister¹Lµ{¤¤¡A¥i¥H¬°¨C­Ó³¡¥ó©I¥s¹Lµ{RegisterComponents¡C

¤U­±ªº¥N½Xºt¥Ü¤F«Ø¥ß©Mµù¥U³¡¥óªº·§²¤¤èªk¡G

¡@

unit MyBtns;

¡@

interface

¡@

type

¡K { Án©ú¦Û©w¸q³¡¥ó }

procedure Register;

¡@

Implementation

¡@

procedure Register;

begin

¡K { µù¥U³¡¥ó }

end;

¡@

end.

¡@

¦bRegister¹Lµ{¤¤¡A¥²¶·µù¥U¨C¤@­Ó­n¥[¤JComponent Paletteªº³¡¥ó¡A¦pªG®w³æ¤¸¥]§t­Y¤z³¡¥ó¡A´N­n±N¥¦­Ì¤@¦¸©Êµù¥U¡C

¡@¡@µù¥U¤@­Ó³¡¥ó®É¡A¬°³¡¥ó©I¥sRegisterComponents¹Lµ{¡CRegisterComponents§i¶DDelphi¨â¥ó¦³Ãö©Òµù¥Uªº³¡¥óªº¨Æ:¡G

¡´ ­nµù¥U³¡¥ó©Ò¦bªºComponent Paletteªº­¶¦W

¡´ ­n¸Ë³]ªº³¡¥óªº¦W¦r

¡@

¿ï¾ÜªOªº­¶¦W¬O­Ó¦r¤¸¦ê¡C¦pªG§A©Òµ¹¦W¦rªº­¶¤£¦s¦b¡ADelphi´N¥Î¸Ó¦W¦r«Ø¥ß·sªº­¶¡C

¤U­±ªºRegister¹Lµ{µù¥U¤F¤@­Ó¦W¬°TMyComponentªº³¡¥ó¡A¨Ã±N¨ä©ñ¦b¦W¬°¡§Miscellaneous¡¨ªºComponent Palette­¶¤W¡C

¡@

procedure Register;

begin

RegisterComponents('Miscellaneous', [TFirst, TSecond]);

end;

¡@

¤]¥i¥H¦b¬Û¦Pªº­¶¤W¡A©ÎªÌ¦b¤£¦Pªº­¶¤W¡A¤@¦¸µù¥U¦h­Ó³¡¥ó¡G

¡@

procedure Register;

begin

RegisterComponents('Miscellaneous', [TFirst, TSecond]);

RegisterComponents('Assorted', [TThird]);

end;

¡@

2. ¼W¥[Component Palette¤WªºÂI°}¹Ï

¨C­Ó³¡¥ó³£»Ý­n¤@­ÓÂI°}¹Ï¨Ó¦bComponent Palette¤W¥Nªí¥¦¡C¦pªG¸Ë³]®É¨S¦³´y­z¦Û¤vªºÂI°}¹Ï¡A«hDelphi·|¦Û°Ê®M¥Î¯Ê¬ÙÂI°}¹Ï¡C

¡@¡@¦]¬°¿ï¾ÜªOÂI°}¹Ï¥u¦³¦b³]­p®É»Ý­n¡A©Ò¥H¨S¦³¥²­n±N¥¦­Ì½sĶ¶i®w³æ¤¸¡C¦Ó¬O±N¥¦­Ì´£¨Ñ¦b»P®w³æ¦W¬Û¦PªºWindows¸ê·½¤å¥ó¤¤¡AÀɮתþ¥[¦W¬°.DCR¡C¥ÎDelphiªºÂI°}¹Ï½s¿è¾¹¨Ó²£¥Í¸ê·½¤å¥ó¡A¨C­ÓÂI°}¹ÏÃäªø24­Ó¹³¯À¡C

¡@¡@¬°¨C­Ó­n¸Ë³]ªº®w³æ¤¸´£¨Ñ¤@­Ó¿ï¾ÜªOÂI°}¹Ï¤å¥ó¡A¦b¨C­Ó¤å¥ó¤¤¬°¨C­Ó­nµù¥Uªº³¡¥ó´£¨Ñ¤@­ÓÂI°}¹Ï¡CÂI°}¹Ï¼v¹³¦W»P³¡¥ó¦W¬Û¦P¡A±N¤å¥ó©ñ¦b»P®w³æ¤¸¬Û¦Pªº¥Ø¿ý¤¤¡A³o¼Ë¦b¸Ë³]³¡¥ó®ÉDephi´N¯àµo²{ÂI°}¹Ï¡C

¡@¡@¨Ò¦p¡A¦pªG§A¦bToolBox³æ¤¸¤¤«Ø¥ß¤@­Ó¦W¬°TMyControlªº³¡¥ó¡A´N»Ý­n«Ø¥ß¦W¬°TOOLBOX.DCRªº¸ê·½¤å¥ó¡A¤å¥ó¤¤¥]§t¦W¬°TMyControlªºÂI°}¹Ï¡C

¡@¡@3. ´£¨Ñ¦³ÃöÄÝ©Ê©M¨Æ¥óªº»²§U±Ô­z

·í¦bµ¡Å餤¿ï¾Ü¤@­Ó³¡¥ó©Î¦bObject Inspector¤¤¿ï¾Ü¨Æ¥ó©ÎÄݩʮɡA¯à°÷«öF1±o¨ì¦³Ãö³o¤@¶µªº»²§U±Ô­z¡C¦pªG«Ø¥ß¤F¬ÛÀ³ªºHelp¤å¥óªº¸Ü¡A¦Û©w¸q³¡¥óªº¥Î¤á¯à±o¨ì¦³Ãö§Aªº³¡¥óªº¬ÛÀ³ªº¤åÀÉ¡C

¡@¡@¦]¬°Delph¨Ï¥Î¤F¯S®íªºHelp¤ÞÀº¤ä´©¸ó¦h­ÓHelp¤å¥ó³B²z¥DÃD·j¯Á¡A©Ò¥H§A¯à´£¨ÑÃö©ó¦Û©w¸q³¡¥óªº¤pªºHelp¤å¥ó¡A¥Î¤á¤£»Ý­nÃB¥~ªº¨BÆJ´N¯à§ä¨ì§Aªº¤åÀÉ¡C§AªºHelp¦¨¤FDelphi Help¨t²Îªº¤@³¡¤À¡C

¡@¡@­nµ¹¥Î¤á´£¨Ñ»²§U±Ô­z¡A­n²z¸Ñ¤U¦C¨â¤è­±:

¡´ Delphi«ç¼Ë³B²zHELP½Ð¨D

¡´ ±NHELP´¡¤JDelphi

¡@

Æ« Delphi«ç¼Ë³B²zHELP½Ð¨D

Delphi°ò©óÃöÁäµü¬d¸ßHELP½Ð¨D¡C´N¬O»¡¡A·í¥Î¤á¦bµ¡Åé³]­pµøµ¡ªº¤w¿ï³¡¥ó¤W«öF1Áä®É¡ADelpdi±N³¡¥óªº¦W¦rÂà´«¦¨¤@­ÓÃöÁäµü¡AµM«á©I¥sWindows Help¤ÞÀº§ä¨ì¨º­ÓÃöÁäµüªº»²§U±Ô­z¥DÃD¡CÃöÁäµü¬OWindows Help¨t²Îªº¼Ð·Ç³¡¤À¡C¹ê»Ú¤W ¡AWinHelp¨Ï¥ÎHelp¤¤ªºÃöÁäµü²£¥ÍSearch¹ï¸Ü¤è¶ô¤¤ªº²M³æ¡C¦]¬°¥Î©ó¤W¤U¤å±Ó·P·j¯Á¤¤ªºÃöÁäµü¤£¬O¹ê»Ú¨Ñ¥Î¤áŪªº¡A©Ò¥H­n¿é¤JÃöÁäµüªº´À¥Nµü¡C

¨Ò¦p¡A¤@­Ó§ä¨ì¦W¬°TSomethingªº³¡¥óªº¸Ô²Ó¸ê°Tªº¥Î¤á¥i¯à¥´¶}WinHelpªºSearch¹ï¸Ü¤è¶ô¨Ã¿é¤JTSomething¡C¦ý¤£·|¨Ï¥Î¥Î©óµ¡Åé³]­pµøµ¡ªº¤W¤U¤å§ä¨ìªº´À¥N§Î¦¡class-TSomething¡C¦]¦¹¡A³o­Ó¯S®íªºÃöÁäµüClass-TSomething¹ï¥Î¤á¬O¤£¥i¨£ªº¡A¥H§K§Ë¶Ã¤F·j¯Á²M³æ¡C

¡@¡@Ƭ ±NHelp´¡¤JDelphi

Delphi´£¨Ñ¤F«Ø¥ß©M´¡¤JWindows Help¤å¥óªº¤u¨ã¡A¥]¬AWindows Help½sĶ¾¹HC.EXE¡C¬°¦Û©w¸q³¡¥ó«Ø¥ßHelp¤å¥óªº¾÷¨î»P«Ø¥ß¥ô¦óHelp¤å¥ó¨S¤°»ò¤£¦P¡A¦ý»Ý­n¿í´`¤@¨Ç¬ù©w¥H»P®w¤¤¨ä¥¦Help¬Û®e¡C

¡@¡@«O«ù¬Û®e©Êªº¤èªk¦p¤U¡G

¡@¡@¡´ «Ø¥ßHelp¤å¥ó

¡´ ¼W¥[¯S®íªºµù¸}

¡´ «Ø¥ßÃöÁäµü¤å¥ó

¡´ ´¡¤JHelp¯Á¤Þ

¡@

·í§A¬°¦Û©w¸q³¡¥ó«Ø¥ß§¹Help¡A¦³¤U¦C´X­Ó¤å¥ó¡G

¡´ ½sĶ¹LªºHelp(.HLP)¤å¥ó

¡´ HelpÃöÁäµü(.KWF)¤å¥ó

¡´ ¤@­Ó©Î¦h­ÓHelp·½¤å¥ó(.RTF)

¡´ Help¤uµ{¤å¥ó(.HLJ)

¡@

½sĶ¹LªºHelp¤å¥ó©MÃöÁäµü¤å¥óÀ³·í»P®w³æ¤¸¦b¦P¤@¥Ø¿ý¡C

¡@¡@Æ¡ «Ø¥ßHelp¤å¥ó

§A¥i¥H¨Ï¥Î¥ô¦óªº¤u¨ã«Ø¥ßWindows Help¤å¥ó¡CDelphiªº¦h¤å¥ó·j¯Á¤ÞÀº¡A¥i¥H¥]§t¥ô¦ó¼Æ¥ØªºHelp¤å¥óªº­n¯À¡C¦b½sĶªºHelp¤å¥ó¤§¥~¡A§AÀ³·í¾Ö¦³RTF·½¤å¥ó¡A³o¼Ë¤~¯à²£¥ÍÃöÁäµü¤å¥ó¡C

¡@¡@¬°¨Ï¦Û©w¸q³¡¥óªºHelp¦P®w¤¤¨ä¥¦³¡¥ó¤@°_¤u§@¡A­n¿í´`¤U¦C¬ù©w¡G

¡@¡@¡´ ¨C­Ó³¡¥ó¦³¦û¤@­¶ªº»²§U±Ô­z

³¡¥ó»²§U±Ô­z­¶À³·íµ¹¥X³¡¥ó¥ØªºªºÂ²³æ´y­z¡AµM«á¦C¥X³Ì²×¥Î¤á¥i¥ÎªºÄÝ©Ê¡B¨Æ¥ó©M¤èªkªº´y­z¡CÀ³¥Î¶}µoªÌ³q¹L¦bµ¡Åé¤W¿ï¾Ü³¡¥ó¨Ã«öF1¦s¨ú³o¤@­¶¡C

¡@¡@³¡¥ó»²§U±Ô­z­¶À³·í¦³¤@­Ó¥Î©óÃöÁäµü·j¯Áªº¡§¢Ù¡¨ª`¸}¡Aª`¸}¤¤¥]§t³¡¥ó¦W¡C¨Ò¦p¡ATMemoªºÃöÁäµüª`¸}Ū§@"TMemo Component"

¡´ ³¡¥ó¼W¥[©M­×§ïªº¨C¤@­ÓÄÝ©Ê¡A¨Æ¥ó©M¤èªkÀ³·í¦³¤@­¶»²§U±Ô­z

¡@¡@ÄÝ©Ê¡B¨Æ¥ó©Î¤èªkªº»²§U±Ô­z­¶À³·í«ü¥X¸Ó¶µ¥Î©ó­þ­Ó³¡¥ó¡AÅã¥ÜÁn©ú»yªk©M´y­z¥¦ªº¨Ï¥Î¤èªk¡C

¡@¡@ÄÝ©Ê¡B¨Æ¥ó©Î¤èªkªº»²§U±Ô­z­¶À³·í¦³¤@­Ó¥Î©óÃöÁäµü·j¯Áªº¡§¢Ù¡¨ª`¸}¡A¸Óª`¸}¤¤¥]§t¸Ó¶µªº¦W¦r©MºØÃþ¡C¨Ò¦p¡AÄÝ©ÊTopªºÃöÁäµüª`¸}¬°¡§Top property¡¨¡C

¡@¡@Help¤å¥óªº¨C¤@­¶¤]»Ý­n¥Î©ó¦h¤å¥ó¯Á¤Þ·j¯Áªº¯S®íª`¸}¡C

¡@¡@Æ¢ ¼W¥[¯S®íª`¸}

Delphi»Ý­n¯S®íªº·j¯ÁÃöÁäµü¥H°Ï§O¥Î©ó³¡¥óªº»²§U±Ô­z­¶©M¨ä¥¦¶µ¥Ø¡C§AÀ³·í¬°¨C¤@¶µ´£¨Ñ¼Ð·ÇªºÃöÁäµü·j¯Á¶µ¡C¦ý§A¤]»Ý­n¥Î©óDelphiªº¯S®íª`¸}¡C

¡@¡@­n¬°¨Ó¦ÛObject Inspectorµøµ¡©Î¥N½X½s¿è¾¹F1ªº·j¯Á¼W¥[ÃöÁäµü¡A´N±o¬°Help¤å¥ó»²§U±Ô­z­¶¼W¥["B"ª`¸}¡C

¡@¡@¡§B¡¨ª`¸}»P¥Î©ó¼Ð·ÇWinHelpÃöÁäµü·j¯Áªº¡§K¡¨ª`¸}«Ü¬Û¶H¡A¦ý¥¦­Ì¥u¥Î©óDelphi·j¯Á¤ÞÀº¡C¤Uªí¦C¥X«ç¼Ë¬°¨CºØ³¡¥ó»²§U±Ô­z­¶«Ø¥ß¡§B¡¨ª`¸}¡G

¡@

ªí19.7 ³¡¥ó»²§U±Ô­z­¶·j¯Áµù¸}

¡@¡@ ¢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

»²§U±Ô­z­¶«¬¦¡ "B"ª`¸}¤º®e ¥Ü ¨Ò

¡@¡@ ¡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

¥D³¡¥ó­¶ 'class_'+³¡¥ó«¬¦¡¦W class_TMemd

¤@¯ëÄÝ©Ê©Î¨Æ¥ó­¶ 'prop_'+ÄݩʦW prop_WordWrap

'event_'+¨Æ¥ó¦W event_OnChange

³¡¥ó¯S¦³ªºÄÝ©Ê 'prop_'+³¡¥ó«¬¦¡¦W prop_TMemoWordWrap

©Î¨Æ¥ó­¶ +ÄݩʦW

'event_'+³¡¥ó«¬¦¡¦W event_TMemoOnChange

+¨Æ¥ó¦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

¡@

¡@¡@°Ï§O¤@¯ë»²§U±Ô­z­¶©M³¡¥ó¯S¦³ªº»²§U±Ô­z­¶¬O«Ü­«­nªº¡C¤@¯ë»²§U±Ô­z­¶À³¥Î©ó©Ò¦³³¡¥ó¤Wªº¯S©wÄÝ©Ê©M¨Æ¥ó¡C¨Ò¦pLeftÄݩʬO©Ò¦³³¡¥ó¤¤ªº¼ÐÃÑ¡C¦]¦¹¡A¥¦¥Î¦r¤¸¦êProp-Left¶i¦æ·j¯Á¡C¦ÓBorde-style¨Ì¿à©ó©ÒÄݪº³¡¥ó¡A¦]¦¹¡ABorderStyleÄݩʾ֦³¦Û¤vªº»²§U±Ô­z­¶¡C¨Ò¦p¡ATEdit¦³BorderStyleÄݩʪº»²§U±Ô­z­¶¡A·j¯Á¦r¤¸¦ê¬°Prop_TEditBorderStyle¡C

¡@¡@Æ£ «Ø¥ßÃöÁäµü¤å¥ó

¡@¡@«Ø¥ß©M½sĶ¤FHelp¤å¥ó¡A¨Ã¥B¼W¥[¤Fª`¸}¤§«á¡AÁÙ­n²£¥Í¿W¥ßªºÃöÁäµü¤å¥ó¡A³o¼ËDelphi¤~¯à±N¥¦­Ì´¡¤J¥DÃD·j¯Áªº¯Á¤Þ¡C

¡@¡@±qHelp¸ê·½¤å¥óRTF«Ø¥ßÃöÁäµü¤å¥óªº¤èªk¦p¤U¡G

¡´ ¦bDOS´£¥Ü¦æ¤U¡A¶i¤J¥]§tRTF¤å¥óªº¥Ø¿ý

¡´ °õ¦æÃöÁäµü¤å¥ó²£¥Íµ{¦¡????KWGEN.EXE¡A«á¸òHelp¤uµ{¤å¥ó¡A¦pKWGEN SPECIAL.HPJ¡C·íKWGEN°õ¦æ§¹²¦«á¡A´N¦³¤F»PHelp¤uµ{¤å¥ó¬Û¦PªºÃöÁäµü¤å¥ó¡A¦ý¥H.KWF¬°Àɮתþ¥[¦W

¡´ ±NÃöÁäµü¤å¥ó©ñ¦b½sĶ§¹ªº®w³æ¤¸©MHelp¤å¥ó¬Û¦Pªº¥Ø¿ý

·í§A¦bComponent Palette¤W¸Ë³]³¡¥ó®É¡A§Æ±æÃöÁäµü´¡¤JDelphi Help¨t²Îªº·j¯Á¯Á¤Þ¡C

¡@

Ƥ ´¡¤JHelp¯Á¤Þ

¥H¦Û©w¸q³¡¥ó«Ø¥ßÃöÁäµü¤å¥ó«á¡A­n±NÃöÁäµü´¡¤JDelphiªºHelp¯Á¤Þ¡C

¡@¡@±NÃöÁäµü¤å¥ó´¡¤JDetphi Help¯Á¤Þªº¤èªk¦p¤U¡G

¡´ ±NÃöÁäµü¤å¥ó©ñ¦b»P½sĶ§¹ªº®w³æ¤¸©MHeph¤å¥ó¬Û¦Pªº¥Ø¿ý¤¤

¡´ °õ¦æHELPINSTµ{¦¡

¡@

HELPINST°õ¦æ§¹«á¡ADelphiªºHelp¯Á¤Þ¤å¥ó(.HDX)¥]§t¦Û©w¸q³¡¥ó»²§U±Ô­z­¶ªºÃöÁäµü¡C

Æ­ ¦sÀx©M¸ü¤JÄÝ©Ê

Delphi±Nµ¡Åé¤Î¨ä¾Ö¦³ªº³¡¥ó¦sÀx¦bµ¡Åé¤å¥ó(.DFM)¤¤¡ADFM¤å¥ó¥Î¤G¶i¨îªí¥Üµ¡Å骺ÄÝ©Ê©M¥¦ªº³¡¥ó¡C·íDelphi¥Î¤á±N¦Û©w¸q³¡¥ó¥[¤Jµ¡Å餤®É¡A¦Û©w¸q³¡¥óÀ³·í¨ã¦³¦sÀx¥¦­ÌªºÄݩʪº¯à¤O¡C¦P¼Ë¡A·í³Q½Õ¤JDelphi©ÎÀ³¥Îµ{¦¡®É¡A³¡¥ó¥²¶·¯à±qDFM¤å¥ó¤¤«ì´_¥¦­Ì¡C

¡@¡@¦b¤j¦h¼Æ®É­Ô¡A¤£»Ý­n°µ¥ô¦ó¨Ï³¡¥óŪ¼gDFM¤å¥óªº¨Æ¡C¦sÀx©M¸ü¤J³£¬OÄ~©Óªº¯ª¥ý³¡¥óªº¦æ¬°ªº¤@³¡¤À¡CµM¦Ó¦b¬Y¨Ç±¡ªp¤U¡A§A¥i¯à·Q§ïÅܳ¡¥ó¦sÀx©M¸ü¤J®Éªì©l¤Æªº¤èªk¡C¦]¦¹¡AÀ³·í²z¸Ñ¤U­zªº¾÷¨î¡G

¡´ ¦sÀx©M¸ü¤J¾÷¨î

¡´ ´y­z¯Ê¬Ù­È

¡´ ¨M©w¦sÀx¤°»ò

¡´ ¸ü¤J«áªºªì©l¤Æ

¡@

Æ¡ ¦sÀx©M¸ü¤J¾÷¨î

·íÀ³¥Î¶}µoªÌ³]­pµ¡Åé®É¡ADelphi±Nµ¡Å骺´y­z¦sÀx¦bDFM¤å¥ó¤¤¡C·í¥Î¤á°õ¦æµ{¦¡®É¡A¥¦Åª¨ú³o¨Ç´y­z¡C

¡@¡@µ¡Å骺´y­z¥]§t¤F¤@¨t¦Cªºµ¡ÅéÄÝ©Ê©Mµ¡Å餤³¡¥óªº¬Û¦ü´y­z¡C¨C¤@­Ó³¡¥ó¡A¥]¬Aµ¡Å饻¨­¡A­t³d¦sÀx©M¸ü¤J¦Û¨­ªº´y­z¡C

¡@¡@¦b¯Ê¬Ù±¡ªp¤U¡A·í¦sÀx®É¡A³¡¥ó±N©Ò¦³public©MpublishedÄݩʪº¤£¦P©ó¯Ê¬Ù­Èªº­È¥HÁn©úªº¶¶§Ç¼g¤J¡C·í¸ü¤J®É¡A³¡¥ó­º¥ýºc³y¦Û¤v¡A¨Ã±N©Ò¦³Äݩʳ]¬°¯Ê¬Ù­È¡FµM«á¡AŪ¦sÀxªº¡B«D¯Ê¬ÙªºÄÝ©Ê­È¡C

¡@¡@³oºØ¯Ê¬Ù¾÷¨î¡Aº¡¨¬¤F¤j¦h¼Æ³¡¥óªº»Ý­n¡A¦Ó¤S¤£»Ý³¡¥ó½s¼gªÌªº¥ô¦ó¤u§@¡CµM¦Ó¦Û¤v©w¸q¦sÀx©M¸ü¤J¹Lµ{¥H¾A¦X¦Û©w¸q³¡¥ó»Ý­nªº¤èªk¤]¦³´XºØ¡C

¡@¡@Æ¢ ´y­z¯Ê¬Ù­È¡C

¡@¡@Delphi³¡¥ó¥u¦sÀx¨º¨ÇÄݩʭȤ£¦P©ó¯Ê¬Ù­ÈªºÄÝ©Ê¡C¦pªG§A¤£´y­z¡ADelphi°²³]ÄݩʨS¦³¯Ê¬Ù­È¡A³o·N¨ýµÛ³¡¥óÁ`¬O¦sÀxÄÝ©Ê¡C

¡@¡@¤@­ÓÄݩʪº­È¨S³Qºc³y¨ç¼Æ³]©w¡A«h³Q°²³]¬°¹s­È¡C¬°¤F´y­z¤@­Ó¯Ê¬Ù­È¡A¦bÄÝ©ÊÁn©ú«á­±¥[default«ü¥O©M·sªº¯Ê¬Ù­È¡C

¡@¡@§A¤]¯à¦b­«Án©úÄݩʮɴy­z¯Ê¬Ù­È¡C¹ê»Ú¤W¡A­«Án©úÄݩʪº¤@­Ó­ì¦]¬O«ü©w¤£¦Pªº¯Ê¬Ù­È¡C¥u´y­z¯Ê¬Ù­È¡A¨º»ò¦bª«¥ó«Ø¥ß®É¨Ã¤£·|¦Û°Ê¦aµ¹Äݩʽá­È¡AÁٻݭn¦b³¡¥óªºCreate¤èªk¤¤½á©Ò»Ýªº­È¡C

¡@¡@¤U­±ªº¥N½X¥ÎAlignÄݩʺt¥Ü¤F´y­z¯Ê¬Ù­Èªº¹Lµ{.

¡@

type

TStatusBar=class(TPanel)

public

constructor Create(Aowner: TComponent); override; { Âл\¥H³]©w·s­È }

published

property Align default alBottom; { ­«·sÁn©ú¯Ê¬Ù­È }

end;

¡@

constructor TStatusBar.Create(Aowner: TComponent);

begin

inherited Create(Aowner); { °õ¦æÄ~©Óªºªì©l¤Æ¹Lµ{ }

Align := alBottom; { ¬°Align½á·sªº¯Ê¬Ù­È }

end;

¡@

Æ£ ¨M©w¦sÀx¤°»ò

¥Î¤á¤]¥i¥H±±¨îDelphi¬O§_¦sÀx³¡¥óªº¨C¤@­ÓÄÝ©Ê¡C¯Ê¬Ù±¡ªp¤U¡A¦bª«¥óªºpublished³¡¤ÀÁn©úªº©Ò¦³Äݩʳ£³Q¦sÀx¡CµM¦Ó¡A¥i¥H¿ï¾Ü¤£¦sÀx©Òµ¹ªºÄÝ©Ê¡A©ÎªÌ³]­p¤@­Ó¨ç¼Æ¦b°õ¦æ®É¨M©w¬O§_¦sÀxÄÝ©Ê¡C

¡@¡@±±¨îDelphi¬O§_¦sÀxÄݩʪº¤èªk¬O¦bÄÝ©ÊÁn©ú«á­±¥[stored«ü¥O¡A«á¸òTrue©ÎFalse¡A©ÎªÌ¬O¥¬º¸¤èªk¦W¡C§A¥i¥Hµ¹¥ô¦óÄݩʪºÁn©ú©Î­«Án©ú¥[storedªí¹F¦¡¡C¤U­±ªº¥N½XÅã¥Ü¤F³¡¥óÁn©ú¤TºØ·sÄÝ©Ê¡C¤@­ÓÄݩʬOÁ`¬O­n¦sÀx¡A¤@­Ó¬O¤£¦s¡A²Ä¤T­Ó«h¨M©w©ó¥¬º¸¤èªkªº­È¡G

¡@

type

TSampleCompiment = class(TComponent)

protected

function storeIt: Boolean;

public { ¥¿±`±¡ªp¤U¦b¤£¦s }

property Important: Integer stored True; { Á`¬O¦sÀx }

published { ¥¿±`±¡ªp¤U¦sÀÉ }

property UnImportant: Integer stored False; { ¤£¦s }

property Sometimes: Integer stored StoreIt; { ¦sÀx¨Ì¿à©ó¨ç¼Æ­È }

end;

¡@

Ƥ ¸ü¤J«áªºªì©l¤Æ

¦b³¡¥ó±q¦sÀxªº´y­z¤¤Åª¨ú©Ò¦³ªºÄÝ©Ê«á¡A¥¦©I¥s¦W¬°Loadedªºµê¤èªk¡A³o´£¨Ñ¤F«ö»Ý­n°õ¦æ¥ô¦óªì©l¤Æªº¾÷·|¡C©I¥sLoaded¬O¦bµ¡Åé©M¥¦ªº±±¨îÅã¥Ü¤§«e¡A¦]¦¹¡A¤£»Ý­n¾á¤ßªì©l¤Æ·|±a¨Ó¿Ã¹õ°{Ã{¡C

¡@¡@¦b³¡¥ó¸ü¤JÄݩʮɪì©l¤Æ¥¦¡A­nÂл\Loaded¤èªk¡C

¡@¡@¦bLoaded¤èªk¤¤¡A­n°µªº²Ä¤@¥ó¨Æ¬O©I¥sÄ~©ÓªºLoaded¤èªk¡C³o¨Ï±o¦b§Aªº³¡¥ó°õ¦æªì©l¤Æ¤§«e¡A¥ô¦óÄ~©ÓªºÄݩʳ£¤wªì©l¤Æ¡C

¡@¡@¤U­±ªº¥N½X¨Ó¦Û©óTDatabase³¡¥ó¡C¦b¸ü¤J«á¡ATDatabase¸Õ¹Ï­««Ø¦b¥¦¦sÀx®É¤w¥´¶}ªº³s±µ¡A¨Ã´y­z¦b³s±µµo¥Í²§±`®É¦p¦ó³B²z¡C

¡@

¡@¡@procedure TDatabase.Loaded

begin

inherited Loaded; { Á`¬O¥ý©I¥sÄ~©Óªº¤èªk }

Modified; { ³]©w¤º³¡¼Ð»x }

try

if FStreamedConnected then Open; { ­««ØÁp±µ }

except

if csDesigning in ComponentState then { ¦b³]­p®É }

Application.HandleException(self) { ÅýDelphi³B²z²§±` }

else raise; { §_ «h }

end;

end;

¡@

¡@

19.3 Delphi³¡¥óµ{¦¡³]­p¹ê¨Ò

¡@

19.3.1 «Ø¥ß¸ê®Æ®w¬ÛÃöªº¤é¾ä±±¨î¡ÐTDBCalendar

¡@

¡@¡@·í³B²z¸ê®Æ®wÁp±µ®É¡A±N±±¨î©M¼Æ¾Úª½±µ¬ÛÁp¬O«Ü­«­nªº¡C´N¬O»¡¡AÀ³¥Îµ{¦¡¥i¥H«Ø¥ß±±¨î»P¸ê®Æ®w¤§¶¡ªºÁå¡CDelphi¥]¬A¤F¼Æ¾Ú¬ÛÃöªº¼ÐÅÒ¡B½s¿è®Ø¡B¦C¥Ü¤è¶ô©M¬]®æ¡C¥Î¤á¥i¥H¨Ï¦Û¤vªº±±¨î»P¼Æ¾Ú¬ÛÃö¡C

¡@¡@¼Æ¾Ú¬ÛÃö¦³­Y¤zµ¥¯Å¡C³Ì²³æªº¬O°ßŪ¼Æ¾Ú¬ÛÃö©Î¼Æ¾ÚÂsÄý¡A¥H¤Î¤Ï¬M¸ê®Æ®w¥Ø«eª¬ºAªº¯à¤O¡C¤ñ¸û½ÆÂøªº¬O¼Æ¾Ú¬ÛÃöªº½s¿è¡A¤]§Y¥Î¤á¥i¥H¦b±±¨î¤W¾Þ§@¸ê®Æ®w¤¤ªº¼Æ¾Ú¡C

¡@¡@¦b¥»³¡¤À¤¤±N¥Ü¨Ò³Ì²³æªº±¡ªp¡A§Y«Ø¥ßÁp±µ¸ê®Æ®wªº³æ­ÓÄæ¦ìªº°ßŪ±±¨î¡C¥»¨Ò¤¤±N¨Ï¥ÎComponent PaletteªºSamples­¶¤¤ªºTCalendar³¡¥ó¡C

«Ø¥ß¼Æ¾Ú¬ÛÃöªº¤é¾ä±±¨î¥]¬A¤U¦C´X¨B¡G

¡´ «Ø¥ß©Mµù¥U³¡¥ó

¡´ ¨Ï±±¨î°ßŪ

¡´ ¼W¥[¼Æ¾ÚÁp±µ(Data Link)

¡´ ÅTÀ³¼Æ¾Ú§ïÅÜ

¡@

19.3.1. 1«Ø¥ß©Mµù¥U³¡¥ó

¡@

¨C­Ó³¡¥óªº«Ø¥ß³£±q¬Û¦Pªº¤è¦¡¶}©l¡A¦b¥»¨Ò¤¤±N¿í´`¤U¦C¹Lµ{¡G

¡´ ±N³¡¥ó®w³æ¤¸©R¦W¬°DBCal

¡´ ±qTCalendarÄ~©Ó¤@­Ó·s³¡¥ó¡A¦W¬°TDBCalendar

¡´ ¦bComponent PaletteªºSamples­¶¤¤µù¥UTDBCalendar

¡@

¤U­±´N¬O«Ø¥ßªº¥N½X¡G

¡@

unit DBCal;

¡@

interface

¡@

uses SysUtils, WinTypes, WinProc, Messages, Classes, Graphics, Controls,

Forms, Grids, Calendar;

type

TDBCalendar=class(TCalendar)

end;

¡@

procedure Register;

¡@

implementation

¡@

procedure Register;

begin

RegisterComponents(Samples¡A[TDBabendar]);

end;

¡@

end.

¡@

19.3.1.2 ¨Ï±±¨î°ßŪ

¡@

¦]¬°³o­Ó¼Æ¾Ú¤é¾ä¥H°ßŪ¤è¦¡ÅTÀ³¼Æ¾Ú¡A©Ò¥H¥Î¤á¤£¯à¦b±±¨î¤¤§ïÅܼƾڨëü±æ¥¦­Ì¤Ï¬M¨ì¸ê®Æ®w¤¤¡C

¨Ï¤é¾ä°ßŪ¥]§t¤U¦C¨â¨B¡G

¡´ ¼W¥[°ßŪÄÝ©Ê

¡´ ¤¹³\©Ò»Ýªº§ó·s

¡@

1. ¼W¥[°ßŪÄÝ©Ê

µ¹¤é¾ä±±¨î¼W¥[°ßŪ¿ï¶µ¬Oª½±µ¹Lµ{¡C³q¹L¼W¥[ÄÝ©Ê¡A¥i¥H´£¨Ñ¦b³]­p®É¨Ï±±¨î°ßŪªº¤èªk¡A·íÄݩʭȳQ³]¬°True¡A±N¨Ï±±¨î¤¤©Ò¦³¤¸¯À¤£¥i³Q¿ï¡C

Æ« ¼W¥[ÄÝ©ÊÁn©ú©M¦sÀɭȪºprivateÄæ¦ì¡G

¡@

type

TDBCalendar=class(TClendar)

private

FReadOnly: Boolean;

public

constructor Create (Aowner: TComponent); override;

published

property ReadOnly: Boolean read FReadOnly write FReadOnly default True;

end;

¡@

constructor TDBCalendar.Create(Aowner: TComponent);

begin

inherited Create(AOwner);

FReadOnly := True;

end;

¡@

Ƭ Âл\SelectCell¤èªk¡A¨Ï±o·í±±¨î¬O°ßŪ®É¡A¤£¤¹³\¿ï¾Ü¡G

¡@

function TDBCalendar.SelectCell(ACol, Arow: Longint): Boolean;

begin

if FReadOnly then

Result := False

else

Result := inherited SelectCell(Acol¡AARow);

end;

¡@

ÁÙ­n¦bTDBcalendarªºÁn©ú¤¤Án©úSelectCell¡C

¦pªG²{¦b±NCalendar¥[¤Jµ¡Åé¡A·|µo²{³¡¥ó§¹¥þ©¿²¤·Æ¹«©MÀ»Áä¨Æ¥ó¡A¦Ó¥B·í§ïÅܤé´Á®É¡A¤]¤£¯à§ïÅÜ¿ï¾Üªº¦ì¸m¡C¤U­±±N¨Ï±±¨îÅTÀ³§ó·s¡C

2. ¤¹³\©Ò»Ýªº§ó·s

°ßŪ¤é¾ä¨Ï¥ÎSelectCell¤èªk¹ê²{¦UºØ§ïÅÜ¡A¥]¬A³]©wRow©MColªº­È¡C·í¤é´Á§ïÅܮɡAUpdateCalendar¤èªk³]©wRow©MColªº­È¡A¦ý¦]¬°SelectCell¤£¤¹³\§A§ïÅÜ¡A§Y¨Ï¤é´Á§ïÅܤF¡A¿ï¾Ü¤´¯d¦b­ì³B¡C

¥i¥Hµ¹¤é¾ä¼W¥[¤@­ÓBoolean¼Ð»x¡A·í¼Ð»x¬°True®É¤¹³\§ïÅÜ¡G

¡@

type

TDBCalendar=class(TCalendar)

private

Fupdating: Boolean;

protected

function SelectCell(Acol, Arow: Longint); Boolean; override;

public

procedure UpdateCalendar; override;

end;

¡@

function TDBCalendar.SelectCell(ACol, ARow: Longint): Boolean;

begin

if (not FUpdating) and FReadOnly then

Result := False { ¦pªG§ó·s«h¤¹³\¿ï¾Ü }

else

Result := inherited SelectCell(ACol, ARow); { §_«h©I¥sÄ~©Óªº¤èªk }

end;

¡@

procedure UpdateCalendar;

begin

FUpdating := True; { ±N¼Ð»x³]¬°¤¹³\§ó·s }

try

inherited UpdateCalendar; { ¶H³q±`¤@¼Ë§ó·s }

finally

FUpdating := False; { Á`¬O²M°£¼Ð»x }

end;

end;

¡@

¡@¡@²{¦b¤é¾ä¤´Â¤£¤¹³\¥Î¤á­×§ï¡A¦ý·í§ïÅܤé´ÁÄݩʮɯॿ½T¤Ï¬M§ïÅÜ¡F¥Ø«e¤w¦³¤F¤@­Ó¯u¥¿°ßŪ±±¨î¡A¤U¤@¨B¬O¼W¥[¼Æ¾ÚÂsÄý¯à¤O¡C

¡@

¡@¡@3. ¼W¥[¼Æ¾ÚÁp±µ

¡@¡@±±¨î©M¸ê®Æ®wªºÁp±µ¬O¥Ñ¤@­Ó¦W¬°DataLinkªºª«¥ó³B²z¡CDelphi´£¨Ñ¤F´XºØ«¬¦¡ªºDatalink¡C±N±±¨î»P¸ê®Æ®w³æ­ÓÄæ¦ì¬ÛÁpªºDataLinkª«¥ó¬OTFieldDatalink¡CDelphi¤]´£¨Ñ¤F»P¾ã­Óªí¬ÛÁpªºDataLink¡C

¡@¡@¤@­Ó¼Æ¾Ú¬ÛÃö±±¨î¾Ö¦³DataLinkª«¥ó¡A´N¬O»¡¡A±±¨î­t³d«Ø¥ß©MªRºcDataLink¡C

¡@¡@­n«Ø¥ß§@¬°¾Ö¦³ª«¥óªºDatalink¡A­n°õ¦æ¤U¦C¤T¨B¡G

¡@¡@¡´ Án©úª«¥óÄæ¦ì

¡@¡@¡´ Án©ú¦s¨úÄÝ©Ê

¡@¡@¡´ ªì©l¤ÆDataLink

¡@

¡@¡@Æ« Án©úª«¥óÄæ¦ì

¡@¡@¨C­Ó³¡¥ó­n¬°¨ä¾Ö¦³ª«¥óÁn©ú¤@­Óª«¥óÄæ¦ì¡C¦]¦¹¡A¤é¾äª«¥óDataLink Án©úTFieldDataLink«¬¦¡ªºÄæ¦ì¡C

¡@¡@¤é¾ä³¡¥ó¤¤DataLinkªºÁn©ú¦p¤U¡G

¡@

type

TDBCalendar = class(TSampleCalendar)

private

FDataLink: TFieldDataLink;

¡K

end;

¡@

¡@¡@Ƭ Án©ú¦s¨úÄÝ©Ê

¡@¡@¨C¤@­Ó¼Æ¾Ú¬ÛÃö±±¨î¦³¤@­ÓDataSourceÄÝ©Ê¡A¸ÓÄÝ©Ê´y­zÀ³¥Îµ{¦¡µ¹±±¨î´£¨Ñ¼Æ¾Úªº¼Æ¾Ú·½¡C¦Ó¥B¡A¦s¨ú³æ­ÓÄæ¦ìªº¸ê®Æ®wÁٻݭn¤@­ÓDataField ÄÝ©Ê´y­z¼Æ¾Ú·½¤¤ªºÄæ¦ì¡C

¡@¡@¤U­±¬ODataSource©MDataFieldªºÁn©ú©M¥¦­Ìªº¹ê²{¤èªk¡G

¡@

type

TDBCalendar = class(TSampleCalendar)

private { Äݩʪº¹ê²{¤èªk¬O }

function GetDataField: string; { ªð¦^¸ê®Æ®wÄæ¦ìªº¦W¦r }

function GetDataSource: TDataSource; { ªð¦^¼Æ¾Ú·½(Data source)ªº¤Þ¥Î }

procedure SetDataField(const Value: string); { µ¹¸ê®Æ®wÄæ¦ì¦W½á­È }

procedure SetDataSource(Value: TDataSource); { µ¹¼Æ¾Ú·½½á­È }

published { ¨ÏÄݩʦb³]­p®É¥i¥Î }

property DataField: string read GetDataField write SetDataField;

property DataSource: TDataSource read GetDataSource write SetDataSource;

end;

¡@

¡K¡K

¡@

function TDBCalendar.GetDataField: string;

begin

Result := FDataLink.FieldName;

end;

¡@

function TDBCalendar.GetDataSource: TDataSource;

begin

Result := FDataLink.DataSource;

end;

¡@

procedure TDBCalendar.SetDataField(const Value: string);

begin

FDataLink.FieldName := Value;

end;

¡@

procedure TDBCalendar.SetDataSource(Value: TDataSource);

begin

FDataLink.DataSource := Value;

end;

¡@

¡@¡@²{¦b¡A´N«Ø¥ß¤F¤é¾ä©MDataLinkªºÁå¡A¦¹¥~ÁÙ¦³¤@­Ó§ó­«­nªº¨BÆJ¡C§A¥²¶·¦b¤é¾äºc«Ø®É«Ø¥ßDataLinkª«¥ó¡A¦b¤é¾äªRºc®É¡A´_­ìDataLinkª«¥ó¡C

¡@¡@Æ­ ªì©l¤ÆDataLink

¡@¡@¦b¼Æ¾Ú¬ÛÃö±±¨î¦b¨ä¦s¦bªº´Á¶¡­n¤£°±¦a¦s¨úDataLinkª«¥ó¡A¦]¦¹¡A¥²¶·¦b¨äºc«Ø¨ç¼Æ¤¤«Ø¥ßDataLink«Ø¥ß¨Ã¥B¦bªRºc®É¡A´_­ìDataLinkª«¥ó¡A¦]¦¹­nÂл\¤é¾äªºCreate©MDestroy¤èªk¡C

¡@

type

TDBCalendar=class(TCalendar)

public

constructor Create(Aowna: TComponent); override;

destructor Destroy; override;

end;

¡@

constructor TDBCalendar Create (Aowner: TComponent);

begin

inherited Create(AOwner);

FReadOnly := True;

FDataLink := TFieldDataLink.Create;

end;

¡@

destructor TDBCalendar Destroy;

begin

FDataLink.Free;

inherited Destroy;

end;

¡@

²{¦b¡A³¡¥ó¤w¾Ö¦³§¹¾ãªºDataLink¡A¦ý³¡¥óÁÙ¤£ª¾±q¬ÛÁpªºÄæ¦ì¤¤Åª¨ú¤°»ò¼Æ¾Ú¡C

¡@

19.3.1.4 ÅTÀ³¼Æ¾ÚÅܤÆ

¡@

¡@¡@¤@¥¹±±¨î¾Ö¦³¤F¼Æ¾ÚÁp±µ(DataLink)©M´y­z¼Æ¾Ú·½©M¼Æ¾ÚÄæ¦ìªºÄÝ©Ê¡C´N»Ý¦b¼Æ¾Ú°O¿ý§ïÅÜ®ÉÅTÀ³Äæ¦ì¤¤¼Æ¾ÚªºÅܤơC

¡@ DataLinkª«¥ó³£¦³­Ó¦W¬°OnDataChangeªº¨Æ¥ó¡C·í¼Æ¾Ú·½«ü¥Ü¼Æ¾Úµo¥ÍÅܤƮɡADataLinkª«¥ó©I¥s¥ô¦óOnDataChange©ÒÁp±µªº¨Æ¥ó³B²z¹Lµ{¡C

¡@¡@­n¦b¼Æ¾Ú§ïÅܮɧó·s¼Æ¾Ú¡A´N»Ý­nµ¹DataLinkª«¥óªºOnDataChange¨Æ¥ó¼W¥[¨Æ¥ó³B²z¹Lµ{¡C

¡@¡@¤U­±Án©ú¤FDataChange¤èªk¡A¨Ã±N¨ä½áµ¹DataLinkª«¥óªºOnDataChange¨Æ¥ó:

¡@

type

TDBCalendar=class(TCalendar)

private

procedure Datachange(Sender: TObject);

end;

¡@

constructor TDBCalendar Create(AOwner:TComponent);

begin

inherited Create(AOwner);

FReadOnly := True;

FDataLink := TFieldDataLink.Create;

FDataLink.OnDataChange := DataChange;

end;

¡@

destructor TDBcalendar.Destroy;

begin

FDataLink.OnDataChange := nil;

FDataLink.Free;

inherited Destroy

end;

¡@

procedure TDBCalendar.DataChange(Sender: TObject);

begin

if FDataLink.Filed=nil then

CalendarDate := 0;

else

CalendarDate := FDataLink.Field.AsDate;

end;

;


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