«á¤@¶ «e¤@¶ ¦^¥Ø¿ý ¦^º¶ |
¡@¡@¡@Delphi°£¤F¤ä´©¨Ï¥Î¥iµø¤Æ³¡¥ó©Ò¨£§Y©Ò±o¦a«Ø¥ßÀ³¥Îµ{¦¡¥~¡AÁ٤䴩¬°¶}µoÀ³¥Î¦Ó³]p¦Û¤vªº³¡¥ó¡C ¡@¡@¦b¥»³¹¤¤±NÄÄz¦p¦ó¬°DelphiÀ³¥Îµ{¦¡½s¼g³¡¥ó¡C³o¤@³¹±N¹F¨ì¨âӥتº¡G ¡@¡@¡´ ±Ð§A¦p¦ó¦Û©w¸q³¡¥ó ¡@¡@¡´ ¨Ï§Aªº³¡¥ó¦¨¬°DelphiÀô¹Òªº¦³¾÷¸s¸s²Õ¦X³¡¤À ¡@ 19.1 Delphi³¡¥óì²z ¡@ 19.1.1 ¤°»ò¬O³¡¥ó ¡@ ¡@¡@³¡¥ó¬ODelphiÀ³¥Îµ{¦¡ªºµ{¦¡ºc¥ó¡C¾¨ºÞ¤j¦h¼Æ³¡¥ó¥Nªí¥Î¤á¤¶±ªº¥i¨£¤¸¯À¡A¦ý³¡¥ó¤]¥i¥H¬Oµ{¦¡¤¤ªº¤£¥i¨£¤¸¯À¡A¦p¸ê®Æ®w³¡¥ó¡C¬°§Ë²M¤°»ò¬O³¡¥ó¥i¥H±q¤TӤ豨Ӧҹ¡G¥\¯à©w¸q¡B§Þ³N©w¸q©M¸gÅç©w¸q¡C ¡@¡@1. ³¡¥óªº¥\¯à©w¸q ¡@¡@±q³Ì²×¥Î¤á¨¤«×¡A³¡¥ó¬O¦bComponent Palette¤W¿ï¾Üªº¡A¨Ã¦bµ¡Åé³]pµøµ¡©M¥N½Xµøµ¡¤¤¾Þ§@ªº¤¸¯À¡C±q³¡¥ó½s¼gªÌ¨¤«×¡A³¡¥ó¬O¥N½X¤¤ªºª«¥ó¡C¦b½s¼g³¡¥ó¤§«e¡A§AÀ³¥Î¬Û·í¼ô±x¤w¦³ªºDelphi³¡¥ó¡A³o¼Ë¤~¯à¨Ï§Aªº³¡¥ó¾A¦X¥Î¤áªº»Ýn¡C½s¼g³¡¥óªº¥Ø¼Ð¤§¤@¬O¨Ï³¡¥óºÉ¥i¯àªºÃþ¦ü¨ä¥¦³¡¥ó¡C ¡@¡@2. ³¡¥óªº§Þ³N©w¸q ¡@¡@±q³Ì²³æªº¨¤«×¬Ý¡A³¡¥ó¬O¥ô¦ó±qTComponentÄ~©Óªºª«¥ó¡CTComponent©w¸q¤F©Ò¦³³¡¥ó¥²¶·nªº¡B³Ì°ò¥»ªº¦æ¬°¡C¨Ò¦p¡A¥X²{¦bComponent Palette¤W©M¦bµ¡Åé³]pµøµ¡¤¤½s¿èªº¥\¯à¡C¦ý¬OTComponent¨Ã¤£ª¾¦p¦ó³B²z§Aªº³¡¥óªº¨ãÅé¥\¯à¡A¦]¦¹¡A§A¥²¶·¦Û¤v´yz¥¦¡C ¡@¡@3. ³¡¥ó½s¼gªÌ¦Û¤vªº©w¸q¡C ¡@¡@¦b¹ê»Úµ{¦¡³]p¤¤¡A³¡¥ó¬O¯à´¡¤JDelphi¶}µoÀô¹Òªº¥ô¦ó¤¸¯À¡C¥¦¥i¯à¨ã¦³µ{¦¡ªº¦UºØ½ÆÂø©Ê¡C²¦Ó¨¥¤§¡A¥un¯à¿Ä¤J³¡¥ó®Ø¬[¡A³¡¥ó´N¬O§A¥Î¥N½X½s¼gªº¤@¤Á¡C³¡¥ó©w¸q¥u¬O±µ¤f´yz¡A¥»³¹±N¸Ô²ÓÄÄz³¡¥ó®Ø¬[¡A±Ôz³¡¥óªº¦³©Ê¡A¥¿¦p±Ôzµ{¦¡³]pªº¦³©Ê¡C¥»³¹¤£·Ç³Æ±Ð§A¥Î©Òµ¹»y¨¥½s¼g¨C¤@ºØ³¡¥ó¡A¥u¯à§i¶D½s©w¥N½Xªº¤èªk©M«ç¼Ë¨Ï³¡¥ó¿Ä¤JDelphiÀô¹Ò¡C ¡@¡@ 19.1.2 ½s¼g³¡¥óªº¤£¦P¤§³B ¡@ ¡@¡@¦bDelphiÀô¹Ò¤¤«Ø¥ß³¡¥ó©M¦bÀ³¥Îµ{¦¡¤¤¨Ï¥Î³¡¥ó¦³¤TÓ«n®t§O¡G ¡@¡@¡´ ½s¼g³¡¥óªº¹Lµ{¬O«D¥iµø¤Æªº ¡@¡@¡´ ½s¼g³¡¥ó»Ýn§ó²`¤JªºÃö©óª«¥óªºª¾ÃÑ ¡@¡@¡´ ½s¼g³¡¥ó»Ýn¿í´`§ó¦hªº³W«h ¡@ ¡@¡@1. ½s¼g³¡¥ó¬O«D¥iµø¤Æªº ¡@¡@½s¼g³¡¥ó»P«Ø¥ßDelphiÀ³¥Î³Ì©úÅ㪺°Ï§O¬O³¡¥ó½s¼g§¹¥þ¥H¥N½Xªº§Î¦¡¶i¦æ¡A§Y«D¥iµø¤Æªº ¡C¦]¬°DelphiÀ³¥Îªº¥iµø¤Æ³]p»Ýn¤w§¹¦¨ªº³¡¥ó¡A¦Ó«Ø¥ß³o¨Ç³¡¥ó´N»Ýn¥ÎObject Pascal ¥N½X½s¼g¡C ¡@¡@ÁöµM§AµLªk¨Ï¥Î¥iµø¤Æ¤u¨ã¨Ó«Ø¥ß³¡¥ó¡A¦ý§A¯à¹B¥Î Delphi¶}µoÀô¹Òªº©Ò¦³µ{¦¡³]p¯S©Ê¦p¥N½X½s¿è¾¹¡B¾ã¦X¤Æ°»¿ù©Mª«¥óÂsÄý¡C ¡@¡@2. ½s¼g³¡¥ó»Ýn§ó²`ªº¦³Ãöª«¥óªºª¾ÃÑ ¡@¡@°£¤F«D¥iµø¤Æµ{¦¡³]p¤§¥~¡A«Ø¥ß³¡¥ó©M¨Ï¥Î¥¦Ìªº³Ì¤j°Ï§O¬O¡G·í«Ø¥ß·s³¡¥ó®É¡A»Ýn±q¤w¦s³¡¥ó¤¤Ä~©Ó²£¥Í¤@Ó·sª«¥ó«¬¦¡¡A¨Ã¼W¥[·sªºÄÝ©Ê©M¤èªk¡C¥t¤@¤è±¡A³¡¥ó¨Ï¥ÎªÌ¡A¦b«Ø¥ßDelphiÀ³¥Î®É¡A¥u¬O¨Ï¥Î¤w¦³³¡¥ó¡C¦b³]p¶¥¬q³q¹L§ïÅܳ¡¥óÄÝ©Ê©M´yzÅTÀ³¨Æ¥óªº¤èªk¨Ó©w¨î¥¦Ìªº¦æ¬°¡C ¡@¡@·íÄ~©Ó²£¥Í¤@Ó·sª«¥ó®É¡A§A¦³Åv¦s¨ú¯ª¥ýª«¥ó¤¤¹ï³Ì²×¥Î¤á¤£¥i¨£ªº³¡¤À¡C³o¨Ç³¡¤À³QºÙ¬°protected¤¶±ªº¡C¦b«Ü¤j³¡¤Àªº¹ê²{¤W¡A«á¥Nª«¥ó¤]»Ýn©I¥s¥L̪º¯ª¥ýª«¥óªº¤èªk¡A¦]¦¹¡A½s¼g³¡¥óªÌÀ³¬Û·í¼ô±x±¦Vª«¥óµ{¦¡³]p¯S©Ê¡C ¡@¡@3. ½s¼g³¡¥ón¿í´`§ó¦hªº³W«h ¡@¡@½s¼g³¡¥ó¹Lµ{¤ñ¥iµø¤ÆÀ³¥Î²£¥Í±Ä¥Î§ó¶Ç²Îªºµ{¦¡³]p¤èªk¡A»P¨Ï¥Î¤w¦³³¡¥ó¬Û¤ñ¡A¦³§ó¦hªº³W«hn¿í´`¡C¦b¶}©l½s¼g¦Û¤vªº³¡¥ó¤§«e¡A³Ì«nªº¨Æ²ö¹L©ó¼ô½mÀ³¥ÎDelphi¦Û±aªº³¡¥ó¡A¥H±o¨ì¹ï©R¦W³W«h¥H¤Î³¡¥ó¥Î¤á©Ò´Á±æ¥\¯àµ¥ªºª½Æ[»{ÃÑ¡C³¡¥ó¥Î¤á´Á±æ³¡¥ó°µ¨ìªº³Ì«nªº¨Æ±¡²ö¹L©ó¥L̦b¥ô¦ó®ÉÔ¯à¹ï³¡¥ó°µ¥ô¦ó¨Æ¡C½s¼gº¡¨¬³o¨Ç´Á±æªº³¡¥ó¨Ã¤£Ãø¡A¥un¹w¥ý·Q¨ì©M¿í´`³W«h¡C ¡@ 19.1.3 «Ø¥ß³¡¥ó¹Lµ{·§²¤ ¡@ ¡@¡@²¦Ó¨¥¤§¡A«Ø¥ß¦Û©w¸q³¡¥óªº¹Lµ{¥]§t¤U¦C´X¨B¡G¡@ ¡´ «Ø¥ß¥]§t·s³¡¥óªº®w³æ¤¸ ¡@¡@¡´ ±q¤w¦³³¡¥ó«¬¦¡¤¤Ä~©Ó±o¨ì·sªº³¡¥ó«¬¦¡ ¡@¡@¡´ ¼W¥[ÄÝ©Ê¡B¤èªk©M¨Æ¥ó ¡@¡@¡´ ¥ÎDelphiµù¥U³¡¥ó ¡@¡@¡´ ¬°³¡¥óªºÄݩʤèªk©M¨Æ¥ó«Ø¥ßHelp¤å¥ó ¡@ ¡@¡@¦pªG§¹¦¨³o¨Ç¤u§@¡A§¹¾ãªº³¡¥ó¥]§t¤U¦C4Ó¤å¥ó ¡@¡@¡´ ½sĶªº®w³æ¤¸¡@¡@ ( .DCU¤å¥ó) ¡´ ¿ï¾ÜªOÂI°}¹Ï¡@¡@¡@ (.DCR¤å¥ó) ¡´ Help¤å¥ó¡@¡@¡@¡@ (.HLP¤å¥ó) ¡´ Help-keyword¤å¥ó (.KWF¤å¥ó) ¡@ 19.2 Delphi ³¡¥óµ{¦¡³]p¤èªk¡@ 19.2.1 Delphi ³¡¥óµ{¦¡³]p·§z¡@ 19.2.1.1 Delphi ¥iµø³¡¥óÃþ®w¡@ ¡@¡@ Delphiªº³¡¥ó³£¬O¥iµø³¡¥óÃþ®w¡]VCL¡^ªºª«¥óÄ~©Ó¾ðªº¤@³¡¤À¡A¤U±¦C¥X¸s¸s²Õ¦¨VCLªºª«¥óªºÃö«Y¡CTComponent¬OVCL¤¤¨C¤@Ó³¡¥óªº¦@¦P¯ª¥ý¡CTComponent´£¨Ñ¤FDelphi³¡¥ó¥¿±`¤u§@ªº³Ì°ò¥»ªºÄÝ©Ê©M¨Æ¥ó¡C®w¤¤ªº¦U±ø¤À¤ä´£¨Ñ¤F¨ä¥¦ªº§ó±M¤@ªº¥\¯à¡C¡@ ·í«Ø¥ß³¡¥ó®É¡A³q¹L±qª«¥ó¾ð¤¤¤w¦³ªºª«¥óÄ~©ÓÀò±o·sª«¥ó¡A¨Ã±N¨ä¥[¤JVCL¤¤¡C¡@19.2.1.2 «Ø¥ß³¡¥óªº°_ÂI¡@¡@¡@³¡¥ó¬O§A¦b³]p®É·Q¾Þ§@ªº¥ô·Nµ{¦¡¤¸¯À¡C«Ø¥ß·s³¡¥ó·N¨ýµÛ±q¤w¦³«¬¦¡¤¤Ä~©Ó±o¨ì·sªº³¡¥óª«¥óÃþ¡C «Ø¥ß·s³¡¥óªº¥Dn³~®|¦p¤U¡G¡@ ¡´ קï¤w¦³ªº±±¨î¡@¡@¡´ «Ø¥ßì©l±±¨î ¡@¡´ «Ø¥ß¹Ï§Î±±¨î¡@ ¡´ «Ø¥ßWindows±±¨îªº¤lÃþ¡@¡@¡´ «Ø¥ß«D¥iµø³¡¥ó¡@ ¡@¡@¤Uªí¦C¥X¤F¤£¦P«Ø¥ß³~®|ªº°_©lÃþ ¡@ ªí19.1 ©w¸q³¡¥óªº°_©lÂI ¡@¢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 ¡@³~ ®|¡@¡@¡@¡@¡@ °_ ©l Ãþ ¡@ ¡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 קï¤w¦³³¡¥ó ¡@ ¥ô¦ó¤w¦³³¡¥ó¡A¦pTButton¡BTListBox ©Î©â¶H³¡¥óª«¥ó¦pTCustomListBox «Ø¥ßì©l±±¨î¡@¡@¡@ TCustomControl«Ø¥ß¹Ï§Î±±¨î TGraphicControl «Ø¥ßµøµ¡±±¨îªº¤lÃþ TWinControl «Ø¥ß«D¥iµø³¡¥ó¡@¡@ TComponent ¡@¢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 ¡@ ¡@¡@¤]¥i¥HÄ~©Ó«D³¡¥óªº¨ä¥¦ª«¥ó¡A¦ýµLªk¦bµ¡Åé³]pµøµ¡¤¤¾Þ§@¥¦Ì¡CDelphi¥]¬A³\¦h³oºØª«¥ó¡A¦pTINIFile¡BTFontµ¥¡C ¡@¡@1. קï¤w¦³±±¨î ¡@¡@«Ø¥ß³¡¥óªº³Ì²³æªº¤èªk¬OÄ~©Ó¤@Ó¤w¦³ªº¡B¥i¥Îªº³¡¥ó¨Ã©w¨î¥¦¡C¥i¥H±qDelphi´£¨Ñªº¥ô¦ó³¡¥ó¤¤Ä~©Ó¡C¨Ò¦p¡A¥i¥H§ïÅܼзDZ±¨îªº¯Ê¬ÙÄÝ©ÊÈ¡A¦pTButton¡C ¡@¡@¦³¨Ç±±¨î¡A¦pListbox©MGridµ¥¦³³\¦h¬Û¦PÅܼơA¦b³oºØ±¡ªp¤U¡ADelphi´£¨Ñ¤F©â¶H±±¨î«¬¦¡¡A±q¸Ó«¬¦¡¥Xµo¥i©w¨î¥X³\¦hªº«¬¦¡¡C¨Ò¦p¡A§A¤]³\·Q«Ø¥ßTListBoxªº¯S®í«¬¦¡¡A³oºØ³¡¥ó¨S¦³¼Ð·ÇTListBoxªº¬Y¨ÇÄÝ©Ê¡A§A¤£¯à±NÄݩʱq¤@Ó¯ª¥ý«¬¦¡¤¤²¾¥h¡A¦]¦¹§A»Ýn±q¤ñTListBox§ó°ª¼h¦¸ªº³¡¥óÄ~©Ó¡C¨Ò¦pTCustomListBox¡A¸Ó³¡¥ó¹ê²{¤FTCustomListBoxªº©Ò¦³Äݩʦý¨S¦³¤½§G(Publishing)¥¦Ì¡C·í±q¤@ӽѦpTCustomListBoxªº©â¶HÃþ¤¤Ä~©Ó®É¡A§A¤½§G¨º¨Ç§A·Q¨Ï¤§¥iÀò±oªºÄݩʦÓÅý¨ä¥¦ªº«OÅ@°_¨Ó(protected)¡C ¡@¡@2. «Ø¥ßì©l±±¨î ¡@¡@¼Ð·Ç±±¨î¬O¦b°õ¦æ®É¥i¨£ªº¡C³o¨Ç¼Ð·Ç±±¨î³£±qTWinControl¡AÄ~©Ó¨Óªº¡A·í§A«Ø¥ßì©l±±¨î®É¡A§A¨Ï¥ÎTCustomControl§@¬°°_©lÂI¡C¼Ð·Ç±±¨îªºÃöÁä¯S©º¬O¥¦¨ã¦³µøµ¡¥y¬`¡A¥y¬`¦sÀɦbÄÝ©ÊHandle¤¤¡A³oºØ±±¨î¡G ¡@ ¡´ ¯à±µ¨ü¿é¤JµJÂI ¡@ ¡´ ¯à±N¥y¬`Âà°eµ¹Windows API¨ç¼Æ ¡@ ¡@¡@¦pªG±±¨î¤£»Ýn±µ¨ü¿é¤JµJÂI¡A§A¥i§â¥¦°µ¦¨¹Ï§Î±±¨î¡A³o¥i¯à¸`¬Ù¨t²Î¸ê·½¡C ¡@¡@3. «Ø¥ß¹Ï§Î±±¨î ¡@¡@¹Ï§Î±±¨î«D±`Ãþ¦ü©w¨îªº±±¨î¡A¦ý¥¦Ì¨S¦³µøµ¡¥y¬`¡A¦]¦¹¤£¦û¦³¨t²Î¸ê·½¡C¹ï¹Ï§Î±±¨î³Ì¤jªº¨î¬O¥¦Ì¤£¯à±µ¦¬¿é¤JµJÂI¡C§A»Ýn±qTGraphicControlÄ~©Ó¡A¥¦´£¨Ñ¤F§@¹ÏªºCanvas©M¯à³B²zWM_PAINT°T®§¡A§A»ÝnÂл\Paint¤èªk¡C ¡@¡@4. Ä~©Óµøµ¡±±¨î Windows¤¤¦³¤@ºØºÙ¤§¬°µøµ¡Ãþªº·§©À¡AÃþ¦ü©ó±¦Vª«¥óªºª«¥ó©MÃþªº·§©À¡Cµøµ¡Ãþ¬OWindows¤¤¬Û¦Pµøµ¡©Î±±¨îªº¤£¦P¹ê¨Ò¤§¶¡¦@¨Éªº¸ê°T¶°¦X¡C·í§A¥Î¶Ç²ÎªºWindowsµ{¦¡³]p¤èªk«Ø¥ß¤@ºØ·sªº±±¨î¡A§An©w¸q¤@Ó·sªºµøµ¡Ãþ¡A¨Ã¦bWindows¤¤µù¥U¡C§A¤]¯à°ò©ó¤w¦³ªºµøµ¡Ãþ«Ø¥ß·sªºµøµ¡Ãþ¡C³o´NºÙ¬°±qµøµ¡ÃþÄ~©Ó¡C¦b¶Ç²ÎªºWindowsµ{¦¡³]p¤¤¡A¦pªG§A·Q«Ø¥ß¥Î¤á¤Æªº±±¨î¡A§A´N¥²¶·±N¨ä°µ¦b°ÊºAÁåµ²®wùØ¡A´N¶H¼Ð·ÇWindows±±¨î¡A¨Ã¥B´£¨Ñ¤@Ó¦s¨ú¤¶±¡C¨Ï¥ÎDelphi¡A§A¯à«Ø¥ß¤@Ó³¡¥ó¥]¸Ë¦b¤w¦³µøµ¡Ãþ¤§¤W¡C¦pªG§A¤w¦³¥Î¤á¤Æ±±¨îªº®w¡A¨Ã·Q¨Ï¨ä°õ¦æ¦b§AªºDelphiÀ³¥Î¤¤¡A¨º§A´N¯à«Ø¥ß¤@ӨϧA¯à¨Ï¥Î¤w¦³±±¨î©MÀò±o·sªº±±¨îªº³¡¥ó¡C¦b®w³æ¤¸StdCtrls¤¤¦³³\¦h³o¼Ëªº¨Ò¤l¡C ¡@¡@5. «Ø¥ß«D¥iµø¤Æªº³¡¥ó ¡@¡@©â¶Hª«¥ó«¬¦¡TComponent¬O©Ò¦³³¡¥óªº°ò¦«¬¦¡¡C±qTComponentª½±µÄ~©Ó©Ò«Ø¥ßªº³¡¥ó´N¬O«D¥iµø¤Æ³¡¥ó¡C§A½s¼gªº¤j¦h¼Æ³¡¥ó³£¬O¥iµø±±¨î¡CTComponent©w¸q¤F³¡¥ó¦bFormDesigner¤¤©Ò»Ýªº°ò¥»ªºÄÝ©Ê©M¤èªk¡C¦]¦¹¡A±qTComponentÄ~©Ó¨Óªº¥ô¦ó³¡¥ó³£¨ã³Æ³]p¯à¤O¡C ¡@¡@«D¥iµø³¡¥ó¬Û·í¤Ö¡A¥Dn¥Î¥¦Ì§@¬°«D¥iµøµ{¦¡³æ¤¸¡]¦p¸ê®Æ®w³æ¤¸¡^©M¹ï¸Ü¤è¶ôªº¤¶±¡C ¡@ 19.2.1.3 «Ø¥ß·s³¡¥óªº¤èªk ¡@ ¡@¡@«Ø¥ß·s³¡¥óªº¤èªk¦³¨âºØ¡G ¡@¡@¡´ ¤â¤u«Ø¥ß³¡¥ó ¡@¡´ ¨Ï¥ÎComponent Expert ¡@ ¡@¤@¥¹§¹¦¨«Ø¥ß«á¡A´N±o¨ì©Ò»Ýªº³Ì¤p¥\¯à³æ¦ìªº³¡¥ó¡A¨Ã¥i¥H¸Ë³]¦bComponent Palette¤W¡C¸Ë³]§¹«á¡A§A´N¯à±N·s³¡¥ó©ñ¸m¦bµ¡Åéµøµ¡¡A¨Ã¥i¦b³]p¶¥¬q©M°õ¦æ¶¥¬q¶i¦æ´ú¸Õ¡C§AÁٯର³¡¥ó¼W¥[·sªº¯S©º¡B§ó·s¿ï¾ÜªO¡B«·s´ú¸Õ¡C ¡@¡@1. ¤â¤u«Ø¥ß³¡¥ó ÅãµM«Ø¥ß³¡¥ó³Ì®e©öªº¤èªk¬O¨Ï¥ÎComponent Expert¡CµM¦Ó¡A§A¤]¯à³q¹L¤â¤u¨Ó§¹¦¨¬Û¦P¨BÆJ¡C ¡@¡@¤â¤u«Ø¥ß³¡¥ó»Ýn¤U¦C¤T¨B¡G ¡@ ¡´ «Ø¥ß·sªº®w³æ¤¸ ¡@¡@¡´ Ä~©Ó¤@Ó³¡¥óª«¥ó ¡@¡´ µù¥U³¡¥ó ¡@ ¡@¡@Æ« «Ø¥ß·sªº®w³æ¤¸ ¡@¡@®w³æ¤¸¬OObject Pascal¥N½Xªº¿W¥ß½sĶ³æ¦ì¡C¨C¤@Óµ¡Å馳¦Û¤vªº®w³æ¤¸¡C¤j¦h¼Æ³¡¥ó¡]¦bÅÞ¿è¤W¬O¤@¸s¸s²Õ¡^¤]¦³¦Û¤vªº®w³æ¤¸¡C ¡@¡@·í§A«Ø¥ß³¡¥ó®É¡A§A¥i¥H¬°³¡¥ó«Ø¥ß¤@Ó®w³æ¤¸¡A¤]¥i±N·sªº³¡¥ó¥[¦b¤w¦³ªº®w³æ¤¸¤¤¡C ¡@Æ¡ ¬°³¡¥ó«Ø¥ß®w³æ¤¸¡A¥i¿ï¾ÜFile/New... ¡A¦bNew Items¹ï¸Ü¤è¶ô¤¤¿ï¾ÜUnit¡ADelphi±N«Ø¥ß¤@Ó·s¤å¥ó¡A¨Ã¦b¥N½X½s¿è¾¹¤¤¥´¶}¥¦ ¡@Æ¢ ¦b¤w¦³®w³æ¤¸¤¤¼W¥[³¡¥ó¡A¥u¶·¿ï¾ÜFile/OPen¬°¤w¦³®w³æ¤¸¿ï¾Ü·½¥N½X¡C¦b¸Ó®w³æ¤¸¤¤¥u¯à¥]§t³¡¥ó¥N½X¡A¦pªG¸Ó®w³æ¤¸¤¤¦³¤@Óµ¡Åé¡A±N²£¥Í¿ù»~ ¡@ ¡@¡@Ƭ Ä~©Ó¤@Ó³¡¥óª«¥ó ¡@¡@¨CÓ³¡¥ó³£¬OTComponentªº«á¥Nª«¥ó¡C¤]¥i±qTControl¡BTGraphicControlµ¥Ä~©Ó¡C ¡@¡@¬°Ä~©Ó¤@Ó³¡¥óª«¥ó¡An±Nª«¥ó«¬¦¡Án©ú¥[¦b®w³æ¤¸ªºinterface³¡¤À¡C ¡@¡@¨Ò¦p¡A«Ø¥ß¤@ӳ̲³æªº±qTComponentª½±µÄ~©Ó«D¥iµøªº³¡¥ó¡A±N¤U¦Cªº«¬¦¡©w¸q¥[¦b³¡¥ó³æ¤¸ªºinterface³¡¤À¡C ¡@ ¡@¡@type TNewComponent=class(TComponent) ¡K¡K end; ¡@ ¡@²{¦b§A¯àµù¥UTNewComponent¡C¦ý¬O·s³¡¥ó»PTComponent¨S¤°»ò¤£¦P¡A§A¥u«Ø¥ß¤F¦Û¤v³¡¥óªº®Ø¬[¡C ¡@¡@Æ µù¥U³¡¥ó ¡@¡@µù¥U³¡¥ó¬O¬°¤F§i¶DDelphi¤°»ò³¡¥ó³Q¥[¤J³¡¥ó®w©M¥[¤JComponent Paletteªºþ¤@¶¡C ¡@¡@¬°¤Fµù¥U¤@Ó³¡¥ó¡G ¡@¡@Æ¡ ¦b³¡¥ó³æ¤¸ªºinterface³¡¤À¼W¥[¤@ÓRegister¹Lµ{¡CRegister¤£±a¥ô¦ó°Ñ¼Æ¡A¦]¦¹Án©ú«Ü²³æ¡G ¡@ procedure Register; ¡@¦pªG§A¦b¤w¦³³¡¥óªº®w³æ¤¸¤¤¼W¥[³¡¥ó¡A¦]¬°¤w¦³Register ¹Lµ{¡A¦]¦¹¤£¶·nקïÁn©ú¡C ¡@¡@Æ¢ ¦b®w³æ¦ìªºimplementation³¡¥ó½s¼gRegister¹Lµ{¬°¨C¤@Ó§A·Qµù¥Uªº³¡¥ó©I¥s¹Lµ{RegisterComponents¡A¹Lµ{RegisterComponents±a¨âӰѼơGComponent Paletteªº¶¦W©M³¡¥ó«¬¦¡¶°¡C¨Ò¦p¡Aµù¥U¦W¬°TNewComponentªº³¡¥ó¡A¨Ã±N¨ä¸m©óComponent PaletteªºSamples¶¡A¦bµ{¦¡¤¤¨Ï¥Î¤U¦C¹Lµ{¡G ¡@ procedure Register; begin RegisterComponents('Samples', [TNewComponent]); end; ¡@¡@¤@¥¹µù¥U§¹²¦¡ADelphi¦Û°Ê±N³¡¥ó¹Ï¥ÜÅã¥Ü¦bComponent Palette¤W¡C ¡@¡@2. ¨Ï¥ÎComponent Expert¡]³¡¥ó±M®a¡^ ¡@¡@§A¯à¨Ï¥ÎComponent Expert«Ø¥ß·s³¡¥ó¡C¨Ï¥ÎComponent Expert²¤Æ¤F«Ø¥ß·s³¡¥ó³Ìªì¶¥¬qªº¤u§@¡A¦]¬°§A¥u»Ý´yz¤T¥ó¨Æ¡G ¡@ ¡´ ·s³¡¥óªº¦W¦r ¡@ ¡´ ¯ª¥ý«¬¦¡ ¡@ ¡´ ·s³¡¥ón¥[¤JªºComponent Palette¶¦W ¡@ ¡@ Component Expert°õ¦æ¤F¤â¤u¤è¦¡ªº¬Û¦P¤u§@¡G ¡@¡@¡´ «Ø¥ß·sªº®w³æ¤¸ ¡@¡´ Ä~©Ó±o¨ì·s³¡¥óª«¥ó ¡@ ¡´ µù¥U³¡¥ó ¡@ ¡@¡@¦ýComponent Expert¤£¯à¦b¤w¦³³æ¤¸¤¤¼W¥[³¡¥ó¡C ¥i¿ï¾ÜFile/New... ¡A¦bNew Items¹ï¸Ü¤è¶ô¤¤¿ï¾ÜComponent¡A´N¥´¶}Component Expert¹ï¸Ü¤è¶ô¡C¡@ ¡@¡@¶ñ§¹Component Expert¹ï¸Ü¤è¶ôªº¨C¤@ÓÄæ¦ì«á¡A¿ï¾ÜOK¡CDelphi«Ø¥ß¥]¬A·s³¡¥ó©MRegister¹Lµ{ªº®w³æ¤¸¡A¨Ã¦Û°Ê¼W¥[uses»y¥y¡C ¡@¡@§AÀ³¸Ó¥ß¨è¦sÀÉ®w³æ¤¸¡A¨Ãµ¹¤©¨ä¦³·N¸qªº¦W¦r¡C ¡@ 19.2.1.4. ´ú¸Õ¥¼¸Ë³]ªº³¡¥ó ¡@ ¡@¡@¦b±N·s³¡¥ó¸Ë³]¦bComponent Palette¤§«e´N¯à´ú¸Õ³¡¥ó°õ¦æ®Éªº°Ê§@¡C³o¹ï©ó°»¿ù·s³¡¥ó¯S§O¦³¥Î¡A¦Ó¥BÁÙ¯à¥Î¦P¼Ëªº§Þ³N´ú¸Õ¥ô·N³¡¥ó¡AµL½×¸Ó³¡¥ó¬O§_¥X²{¦bComponent Palette¤W¡C ¡@ ±q¥»½è¤W»¡¡A§A³q¹L¼Ò¥é¥Î¤á±N³¡¥ó©ñ¸m¦bµ¡Å餤ªºDelphiªº°Ê§@¨Ó´ú¸Õ¤@Ó¥¼¸Ë³]ªº³¡¥ó¡C ¡@¡@¥i«ö¤U¦C¨BÆJ¨Ó´ú¸Õ¥¼¸Ë³]ªº³¡¥ó ¡@¡@1. ¦bµ¡Åé³æ¤¸ªºuses»y¥y¤¤¥[¤J³¡¥ó©Ò¦b³æ¤¸ªº¦W¦r 2. ¦bµ¡Å餤¼W¥[¤@Óª«¥óÄæ¦ì¨Óªí¥Ü³¡¥ó ¡@¡@³o¬O¦Û¤v¼W¥[³¡¥ó©MDelphi¼W¥[³¡¥óªº¤èªkªº¥Dn¤£¦PÂI¡C ¡@¡@§A±Nª«¥óÄæ¦ì¥[¦bµ¡Å髬¦¡Án©ú©³³¡ªºpublic³¡¤À¡CDelphi«h·|±Nª«¥óÄæ¦ì¥[¦b©³³¡Án©úªº¤W±¡C ¡@¡@§A¤£¯à±NÄæ¦ì¥[¦bDelphiºÞ²zªºµ¡Å髬¦¡ªºÁn©úªº¤W³¡¡C¦b³o¤@³¡¤ÀÁn©úªºª«¥óÄæ¦ì±N¬ÛÀ³¦b¦sÀx¦bDFM¤å¥ó¤¤¡C¼W¥[¤£¦bµ¡Å餤¦s¦bªº³¡¥ó¦W±N²£¥ÍDFM¤å¥óµL®Äªº¿ù»~¡C ¡@3. ªþ¤Wµ¡Å骺OnCreate¨Æ¥ó³B²z¹Lµ{ ¡@¡@4. ¦bµ¡Å骺OnCreate³B²z¹Lµ{¤¤ºc³y¸Ó³¡¥ó ¡@¡@·í©I¥s³¡¥óªººc³y¹Lµ{®É¡A¥²¶·¶Ç»¼Owner°Ñ¼Æ¡]¥ÑOwnert³dªRºc¸Ó³¡¥ó¡^¤@¯ë»¡¨ÓÁ`¬O±NSelf§@¬°Ownerªº¶Ç¤J°Ñ¼Æ¡C¦bOnCreate¤¤¡ASelf¬O«üµ¡Åé¡C ¡@ 5. µ¹ComponentªºParentÄݩʽáÈ ¡@¡@³]©wParentÄÝ©Ê©¹©¹¬Oºc³y³¡¥ó«án°µªº²Ä¤@¥ó¨Æ®É¡CParent¦b§Î¦¡¤W¥]§t³¡¥ó¡A¤@¯ë¨Ó»¡Parent¬Oµ¡Åé©ÎªÌGoupBox¡BPanel¡C³q±`µ¹Parent½á»PSelf¡A§Yµ¡Åé¡C¦b³]©w³¡¥óªº¨ä¥¦Äݩʤ§«e³Ì¦n¥ýµ¹Parent½áÈ¡C ¡@ 6. «ö»Ýnµ¹³¡¥óªº¨ä¥¦ÄݩʽáÈ ¡@¡@°²³]§A·Q´ú¸Õ¦W¬°TNewComponent«¬¦¡ªº·s³¡¥ó¡A®w³æ¤¸¦W¬°NewTest¡Cµ¡Åé®w³æ¤¸À³¸Ó¬O³o¼Ëªº¡F ¡@ unit Unitl; ¡@ interface ¡@uses SysUtils, Windows, Messages, Classes, Grophics, Controls, Forms, Dialogs, Newtest; type Tforml = class(TForm) procedure FormCreate(Sender: TObject); private { private ¥Ó ©ú }public { public ¥Ó ©ú }NewComponent: TNewComponent; end; ¡@ var Forml: TForml; ¡@ implementation ¡@ {$R *.DFM } ¡@ procedure TForml.FormCreate ( Sender: TObject ) ; begin NewComponent := TNewComponent.Create ( Self ); NewCompanent.Parent := Self; NewCompanent.Left := 12; end; ¡@ end. ¡@ 19.2.1.5 ½s¼g³¡¥óªº±¦Vª«¥ó§Þ³N¡@ ¡@¡@³¡¥ó¨Ï¥ÎªÌ¦b DelphiÀô¹Ò¤¤¶}µo¡A±N¹J¨ì¦b¥]§t¼Æ¾Ú©M¤èªkªºª«¥ó¡C¥ḺN¦b³]p¶¥¬q©M°õ¦æ¶¥¬q¾Þ§@ª«¥ó¡A¦Ó½s¼g³¡¥ó±N¤ñ¥LÌ»Ýn§ó¦hªºÃö©óª«¥óªºª¾ÃÑ¡A¦]¦¹¡A§AÀ³·í¼ô±xDelphiªº±¦Vª«¥óªºµ{¦¡³]p¡C¡@¡@ 1. «Ø¥ß³¡¥ó¡@¡@³¡¥ó¥Î¤á©M³¡¥ó½s¼gªÌ³Ì°ò¥»ªº°Ï§O¬O¥Î¤á³B²zª«¥óªº¹ê¨Ò¡A¦Ó½s¼gªÌ«Ø¥ß·sªºª«¥ó«¬¦¡¡C³oÓ·§©À¬O±¦Vª«¥óµ{¦¡³]pªº°ò¦¡C¨Ò¦p¡A¥Î¤á«Ø¥ß¤F¤@Ó¥]§t¨âÓ«ö¶sªºµ¡Åé¡A¤@ӼЬ° OK¡A¥t¤@ӼЬ°Cancel¡A¨CÓ³£¬OTButtonªº¹ê¨Ò¡A³q¹Lµ¹Text¡Bdefault©MCancelµ¥Äݩʽᤣ¦PªºÈ¡Aµ¹OnClick¨Æ¥ó½á¤©¤£¦Pªº³B²z¹Lµ{¡A¥Î¤á²£¥Í¤F¨âÓ¤£¦Pªº¹ê¨Ò¡C «Ø¥ß·s³¡¥ó¤@¯ë¦³¨âÓ²z¥Ñ¡@ ¡´ §ïÅÜ«¬¦¡ªº¯Ê¬Ù±¡ªp¡AÁקK¤Ï´_¡@ ¡´ ¬°³¡¥ó¼W¥[·sªº¥\¯à¡@ ¡@¡@¥Øªº³£¬O¬°¤F«Ø¥ß¥i«¥Îª«¥ó¡C¦pªG±q±N¨Ó«¥Îªº¨¤«×¹w¥ýp¹º©M³]p¡A¯à¸`¬Ù¤@¤j°ï±N¨Óªº¤u§@¡C ¡@¡@¦bµ{¦¡³]p¤¤¡AÁקK¤£¥²nªº«½Æ¬O«Ü«nªº¡C¦pªGµo²{¦b¥N½X¤¤¤@¹M¤S¤@¹M«¼g¬Û¦Pªº¦æ¡A´NÀ³·í¦Ò¼{±N¥N½X©ñ¦b¤l¹Lµ{©Î¨ç¼Æ¤¤¡A©Î°®¯Ü«Ø¥ß¤@Ó¨ç¼Æ®w¡C ¡@¡@³]p³¡¥ó¤]¬O³oÓ¹D²z¡A¦pªGÁ`¬O§ïÅܬۦPªºÄݩʩάۦPªº¤èªk©I¥s¡A¨ºÀ³«Ø¥ß·s³¡¥ó¡C ¡@¡@«Ø¥ß·s³¡¥óªº¥t¤@Óì¦]¬O·Qµ¹¤w¦³ªº³¡¥ó¼W¥[·sªº¥\¯à¡C§A¥i¥H±q¤w¦³³¡¥óª½±µÄ~©Ó¡]¦p ListBox¡^©Î±q©â¶Hª«¥ó«¬¦¡Ä~©Ó¡]¦pTComponent¡ATControl¡^¡C§AÁöµM¯à¬°³¡¥ó¼W¥[·s¥\¯à¡A¦ý¤£¯à±N즳³¡¥óªºÄݩʲ¾¨«¡A¦pªGn³o¼Ë°µªº¸Ü¡A´N±q¸Ó¤÷ª«¥óªº¯ª¥ýª«¥óÄ~©Ó¡C¡@¡@ 2. ±±¨î³¡¥óªº³X¦V¡@¡@ Object Pascal»y¨¥¬°ª«¥óªº¦U³¡¤À´£¨Ñ¤F¥|ӯŧOªº¦s¨ú±±¨î¡C¦s¨ú±±¨îÅý§A©w¸q¤°»ò¥N½X¯à¦s¨úª«¥óªºþ¤@³¡¤À¡C³q¹L´yz¦s¨ú¯Å§O¡A©w¸q¤F³¡¥óªº±µ¤f¡C¦pªG¦X²z¦w±Æ±µ¤f¡A±N´£°ª³¡¥óªº¥i¥Î©Ê©M«¥Î©Ê¡C¡@¡@°£«D¯S¦a´yz¡A§_«h¥[¦bª«¥óùتºÄæ¦ì¡B¤èªk©MÄݩʪº±±¨î¯Å§O¬O published¡A³o·N¨ýµÛ¥ô¦ó¥N½X¥i¥H¦s¨ú¾ãÓª«¥ó¡C¡@¡@¤Uªí¦C¥X¦U«OÅ@¯Å§O¡G ¡@ ¡@ ªí19.2 ª«¥ó©w¸q¤¤ªº«OÅ@¯Å§O ¡@ ¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w ¡@«OÅ@¯Å¡@¡@¡@¡@¡@¡@ ¥Î³B ¡@¡@ ¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡X¡Xprivate ÁôÂùê²{²Ó¸`protected ¡@¡@¡@¡@ ©w¸q¶}µoªÌ±µ¤fpublic ©w¸q°õ¦æ®É±µ¤fpublished ©w¸q³]p®É±µ¤f ¡@ ¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¡@ ©Ò¦³ªº«OÅ@¯Å³£¦b³æ¤¸¯Å°_§@¥Î¡C¦pªGª«¥óªº¬Y¤@³¡¤À¦b®w³æ¤¸¤¤ªº¤@³B¥i³X¦V¡A«h¦b¸Ó®w³æ¤¸¥ô·N³B³£¥i³X¦V¡C¡@¡@Æ« ÁôÂùê²{²Ó¸`¡@¡@¦pªGª«¥óªº¬Y³¡¤À³QÁn©ú¬° private¡A±N¨Ï¨ä¥¦®w³æ¤¸ªº¥N½XµLªk¦s¨ú¸Ó³¡¤À¡A¦ý¥]§tÁn©úªº®w³æ¤¸¤¤ªº¥N½X¥i¥H¦s¨ú¡A´N¦n¶H¦s¨úpublic¤@¼Ë¡A³o¬O©MC++¤£¦Pªº¡C¡@¡@ª«¥ó«¬¦¡ªº private³¡¤À¹ï©óÁôÂøԲӹê²{¬O«Ü«nªº¡C¬JµMª«¥óªº¥Î¤á¤£¯à¦s¨ú¡Aprivate³¡¤À¡A§A´N¯à§ïÅܪ«¥óªº¹ê²{¦Ó¤£¼vÅT¥Î¤á¥N½X¡C¡@¡@¤U±¬O¤@Óºt¥Ü¨¾¤î¥Î¤á¦s¨ú privateÄæ¦ìªº¨Ò¤l¡G¡@ unit HideInfo; ¡@ interface ¡@ uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs; ¡@ type TSecretForm = class(TForm) { Án©ú·sªºµ¡Åéµøµ¡ }procedure FormCreate(Sender: TObject); private { declare private part } FSecretCode: Integer; { Án©úprivateÄæ¦ì }end; ¡@ var SecretForm: TSecretForm; ¡@ implementation ¡@ procedure TSecretForm.FormCreate(Sender: TObject); begin FSecretCode := 42; end; ¡@ end. ¡@ unit TestHide; { ³o¬O¥Dµ¡Åé®w³æ¤¸ }¡@ interface ¡@ uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs, HideInfo; { ¨Ï¥Î±aTSecretFormÁn©úªº®w³æ¤¸ }type TTestForm = class(TForm) procedure FormCreate(Sender: TObject); end; ¡@var TestForm: TTestForm; ¡@implementation ¡@procedure TTestForm.FormCreate(Sender: TObject); begin SecretForm.FSecretCode := 13; { ½sĶ¹Lµ{±N¥H"Field identifier expected"¿ù»~°±¤î}end; ¡@ end. ¡@¡@¡@Ƭ ©w¸q¶}µoªÌ±µ¤f¡@¡@±Nª«¥ó¬Y³¡¤ÀÁn©ú¬° protected¡A¥i¨Ï¦b¥]§t¸Ó³¡¥óÁn©úªº®w³æ¤¸¤§¥~ªº¥N½XµLªk¦s¨ú¡A´N¶Hprivate³¡¤À¡Cprotected³¡¤Àªº¤£¦P¤§³B¬O¡A¬Yª«¥óÄ~©Ó¸Óª«¥ó¡A«h¥]§t·sª«¥óªº®w³æ¤¸¥i¥H¦s¨úprotected³¡¤À¡A§A¯à¨Ï¥ÎprotectedÁn©ú©w¸q¶}µoªÌªº±µ¤f¡C¤]´N¬O»¡¡Cª«¥óªº¥Î¤á¤£¯à³X¦Vprotected³¡¤À¡A¦ý¶}µoªÌ³q¹LÄ~©Ó´N¥i¯à°µ¨ì¡A³o·N¨ýµÛ§A¯à³q¹Lprotected³¡¤Àªº¥i¦s¨ú©Ê¨Ï³¡¥ó½s¼gªÌ§ïÅܪ«¥ó¤u§@¤è¦¡¡A¦Ó¤S¤£¨Ï¥Î¤á¨£¨ì³o¨Ç²Ó¸`¡C¡@¡@Æ ©w¸q°õ¦æ®É±µ¤f¡@¡@±Nª«¥óªº¬Y¤@³¡¤À©w¸q¬° public¥i¨Ï¥ô¦ó¥N½X¦s¨ú¸Ó³¡¤À¡C¦pªG§A¨S¦³¹ïÄæ¦ì¤èªk©ÎÄÝ©Ê¥[¥Hprivate¡Bprotected¡Bpublicªº¦s¨ú±±¨î´yz¡C¨º»ò¸Ó³¡¤À´N¬Opublished¡C¡@¡@¦]¬°ª«¥óªº public³¡¤À¥i¦b°õ¦æ®É¬°¥ô¦ó¥N½X¦s¨ú¡A¦]¦¹ª«¥óªºpublic³¡¤À³QºÙ¬°°õ¦æ±µ¤f¡C°õ¦æ®É±µ¤f¹ï¨º¨Ç¦b³]p®É¨S¦³·N¸qªº¶µ¥Ø¡A¦p¨Ì¾a°õ¦æ®É¸ê°Tªº©M°ßŪªºÄÝ©Ê¡A¬O«Ü¦³¥Îªº¡C¨º¨Ç³]p¥Î¨Ó¨Ñ¥Î¤á©I¥sªº¤èªk¤]À³©ñ¦b°õ¦æ®É±µ¤f¤¤¡C¡@¡@¤U¨Ò¬O¤@ÓÅã¥Ü¨âÓ©w¸q¦b°õ¦æ®É±µ¤fªº°ßŪÄݩʪº¨Ò¤l¡G ¡@ type TSampleComponent = class(TComponent) private FTempCelsius: Integer; { ¨ãÅé¹ê²{¬Oprivate }function GetTempFahrenheit: Integer; public property TempCelsius: Integer read FTempCelsius; { ÄݩʬOpublic }property TempFahrenheit: Integer read GetTempFahrenheit; end; ¡@function GetTempFahrenheit: Integer; begin Result := FTempCelsius * 9 div 5 + 32; end; ¡@¡@¡@¬JµM¥Î¤á¦b³]p®É¤£¯à§ïÅÜ public³¡¤ÀªºÄݩʪºÈ¡A¨º»ò¸ÓÃþÄÝ©Ê´N¤£¯à¥X²{¦bObject Inspectorµøµ¡¤¤¡C¡@¡@Æ® ©w¸q³]p®É±µ¤f¡@¡@±Nª«¥óªº¬Y³¡¤ÀÁn©ú¬° published¡A¸Ó³¡¤À¤]§Y¬°public¥B²£¥Í°õ¦æ®É«¬¦¡¸ê°T¡C¦ý¥u¦³published³¡¤À©w¸qªºÄÝ©Ê¥iÅã¥Ü¦bObject Inspectorµøµ¡¤¤¡Cª«¥óªºpublished³¡¤À©w¸q¤Fª«¥óªº³]p®É±µ¤f¡C³]p®É±µ¤f¥]§t¤F¥Î¤á·Q¦b³]p®É©w¨îªº¤@¤Á¯S©º¡C¡@¡@¤U±¬O¤@Ó publishedÄݩʪº¨Ò¤l¡A¦]¬°¥¦¬Opublished¡A¦]¦¹¥i¥H¥X²{¦bObject Inspectorµøµ¡¡G¡@ TSampleComponent = class(TComponent) private FTemperature: Integer; { ¨ãÅé¹ê²{¬O private }published property Temperature: Integer read FTemperature write FTemperature; { ¥i¼gªº }end; ¡@¡@¡@ 3. ¬£°e¤èªk¡@¡@¬£°e (Dispatch)³oÓ·§©À¬O¥Î¨Ó´yz·í©I¥s¤èªk®É¡A§AªºÀ³¥Îµ{¦¡«ç¼Ë¨M©w°õ¦æ¤°»ò¼Ëªº¥N½X¡A·í§A½s¼g©I¥sª«¥óªº¥N½X®É¡A¬Ý¤W¥h»P¥ô¦ó¨ä¥¦¹Lµ{©Î¨ç¼Æ©I¥s¨S¤°»ò¤£¦P¡A¦ýª«¥ó¦³¤TºØ¤£¦Pªº¬£°e¤èªkªº¤è¦¡¡C¡@¡@³o¤TºØ¬£°e¤èªkªº«¬¦¡¬O¡G ¡@ ¡´ ÀRºAªº¡@ ¡´ µêÀÀªº¡@ ¡´ °ÊºAªº¡@ ¡@¡@µê¤èªk©M°ÊºA¤èªkªº¤u§@¤è¦¡¬Û¦P¡A¦ý¹ê²{¤£¦P¡C¨âªÌ³£»PÀRºA¤èªk¬Û·í¤£¦P¡C²z¸Ñ¦UºØ¤£¦Pªº¬£°e¤èªk¹ï«Ø¥ß³¡¥ó¬O«Ü¦³¥Îªº¡C ¡@Æ« ÀRºA¤èªk¡G¡@¡@¦pªG¨S¦³¯S®íÁn©ú¡A©Ò¦³ªºª«¥ó¤èªk³£¬OÀRºAªº .¡CÀRºA¤èªkªº¤u§@¤è¦¡¥¿¦p¤@¯ëªº¹Lµ{©M¨ç¼Æ©I¥s¡C¦b½sĶ®É¡A½sĶ¾¹¨M©w¤èªk¦ì§}¡A¨Ã»P¤èªkÁp±µ¡C¡@¡@ÀRºA¤èªkªº°ò¥»¦n³B¬O¬£°e¬Û·í§Ö¡C¦]¬°¥Ñ½sĶ¾¹¨M©w¤èªkªºÁ{®É¦ì§}¡A¨Ãª½±µ»P¤èªk¬ÛÁp¡Cµê¤èªk©M°ÊºA¤èªk«h¬Û¤Ï¡A¥Î¶¡±µªº¤èªk¦b°õ¦æ®É§ä¨ì¤èªkªº¦ì§}¡A³o±Nªá¸ûªøªº®É¶¡¡C ¡@¡@ÀRºA¤èªkªº¥t¤@Ó¤£¦P¤§³B¬O·í³Q¥t¤@«¬¦¡Ä~©Ó®É¤£°µ¥ô¦ó§ïÅÜ¡A³o´N¬O»¡¦pªG§AÁn©ú¤F¤@Ó¥]§tÀRºA¤èªkªºª«¥ó¡AµM«á±q¸Óª«¥óÄ~©Ó·sªºª«¥ó¡A«h¸Ó«á¥Nª«¥ó¨É¦³»P¯ª¥ýª«¥ó¬Û¦Pªº¤èªk¦ì§}¡A¦]¦¹¡A¤£ºÞ¹ê»Úª«¥ó¬O½Ö¡AÀRºA¤èªk³£§¹¦¨¬Û¦Pªº¤u§@¡C ¡@¡@§A¤£¯àÂл\ÀRºA¤èªk¡A¦b«á¥Nª«¥ó¤¤Án©ú¬Û¦P¼ÐñªºÀRºA¤èªk³£±N¨ú¥N¯ª¥ýª«¥ó¤èªk¡C ¡@¡@¦b¤U¦C¥N½X¤¤¡A²Ä¤@Ó³¡¥óÁn©ú¤F¨âÀRºA¤èªk¡A²Ä¤GÓ³¡¥ó¡AÁn©ú¤F¬Û¦P¦W¦rªº¤èªk¨ú¥N²Ä¤@Ó³¡¥óªº¤èªk¡C ¡@ typeTFirstComponent = class(TComponent) procedure Move; procedure Flash; end; ¡@ TSecondComponent = class(TFirstComponent) procedure Move; { ¾¨ºÞ¦³¬Û¦PªºÁn©ú¡A¦ý»PÄ~©Óªº¤èªk¤£¦P }function Flash(HowOften: Integer): Integer; { ¦PMove¤èªk¤@¼Ë }end; ¡@¡@¡@Ƭ µê¤èªk¡@¡@©I¥sµê¤èªk»P©I¥s¥ô¦ó¨ä¥¦¤èªk¤@¼Ë¡A¦ý¬£°e¾÷¨î¦³©Ò¤£¦P¡Cµê¤èªk¤ä´©¦b«á¥Nª«¥ó¤¤«©w¸q¤èªk¡A¦ý©I¥s¤èªk§¹¥þ¬Û¦P¡Aµê¤èªkªº¦ì§}¤£¬O¦b½sĶ®É¨M©w¡A¦Ó¬O¦b°õ¦æ®É¤~§ä¨ì¤èªkªº¦ì§}¡C ¡@¡@¬°Án©ú¤@Ó·sªº¤èªk¡A¦b¤èªkÁn©ú«á¼W¥[ virtual«ü¥O¡C¤èªkÁn©ú¤¤ªºvirtual«ü¥O¦bª«¥óµêÀÀ¤èªkªí¡]VMT¡^¤¤«Ø¥ß¤@Ó¤J¤f¡A¸ÓµêÀÀ¤èªkªí¦sÀɪ«¥óÃþ©Ò¦³µê¦³ÀÀ¤èªkªº¦ì§}¡C¡@¡@·í§A±q¤w¦³ª«¥óÀò±o·sªºª«¥ó¡A·sª«¥ó±o¨ì¦Û¤vªº VMT¡A¥¦¥]§t©Ò¦³ªº¯ª¥ýª«¥óªºVMT¤J¤f¡A¦A¼W¥[¦b·sª«¥ó¤¤Án©úªºµêÀÀ¤èªk¡C«á¥Nª«¥ó¯àÂл\¥ô¦óÄ~©ÓªºµêÀÀ¤èªk¡C¡@¡@Âл\¤@Ó¤èªk¬OÂX®i¥¦¡A¦Ó¤£¬O¨ú¥N¥¦¡C«á¥Nª«¥ó¥i¥H«©w¸q©M«¹ê²{¦b¯ª¥ýª«¥ó¤¤Án©úªº¥ô¦ó¤èªk¡C¦ýµLªkÂл\¤@ÓÀRºA¤èªk¡CÂл\¤@Ó¤èªk¡An¦b¤èªkÁn©úªºµ²§À¼W¥[ override«ü¥O¡A¦b¤U¦C±¡ªp¡A¨Ï¥Îoverride±N²£¥Í½sĶ¿ù»~¡G ¡@ ¡´ ¯ª¥ýª«¥ó¤¤¤£¦s¦b¸Ó¤èªk ¡@ ¡´ ¯ª¥ýª«¥ó¤¤¬Û¦P¤èªk¬OÀRºAªº¡@ ¡´ Án©ú»P¯ª¥ýª«¥óªº¡]¦p¦W¦r¡B°Ñ¼Æ¡^¤£¤Ç°t¡@ ¡@¡@¤U¦C¥N½Xºt¥Ü¨âÓ²³æªº³¡¥ó¡C²Ä¤@Ó³¡¥óÁn©ú¤F¤TÓ¤èªk¡A¨C¤@ӨϥΤ£¦Pªº¬£°e¤è¦¡¡A²Ä¤GÓ³¡¥óÄ~©Ó²Ä¤@Ó³¡¥ó¡A¨ú¥N¤FÀRºA¤èªk¡AÂл\¤FµêÀÀ¤èªk©M°ÊºA¤èªk¡C ¡@ typeTFirstComponent = class(TCustomControl) procedure Move; { ÀRºA¤èªk }procedure Flash; virtual; { µê ¤è ªk }procedure Beep; dynamic; { °ÊºAµêÀÀ¤èªk }end; ¡@ TSecondComponent = class(TFirstComponent) procedure Move; { Án©ú¤F·sªº¤èªk }procedure Flash; override; { Âл\Ä~©Óªº¤èªk }procedure Beep; override; { Âл\Ä~©Óªº¤èªk }end; ¡@ ¡@¡@Æ °ÊºA¤èªk¡@¡@°ÊºA¤èªk¬Oµy·L¤£¦P©óµêÀÀ¤èªkªº¬£°e¾÷¨î¡C¦]¬°°ÊºA¤èªk¨S¦³ª«¥ó VMTªº¤J¤f¡A¥¦Ì´î¤Ö¤Fª«¥ó®ø¯Óªº°O¾ÐÅé¼Æ¶q¡C¬£°e°ÊºA¤èªk¤ñ¬£°e¤@¯ëªºµêÀÀ¤èªkºC¡C¦]¦¹¡A¦pªG¤èªk©I¥s«ÜÀWÁc¡A§A³Ì¦n±N¨ä©w¸q¬°µê¤èªk¡C¡@¡@©w¸q°ÊºA¤èªk®É¡A¦b¤èªkÁn©ú«á±¼W¥[ dynamic«ü¥O¡C¡@¡@»Pª«¥óµêÀÀ¤èªk«Ø¥ß¤J¤f¤£¦Pªº¬O dynamicµ¹¤èªk½á¤F¤@¼Æ¦r¡A¨Ã¦sÀx¬ÛÀ³¥N½Xªº¦ì§}¡A°ÊºA¤èªk²M³æ¥u¥]§t·s¥[ªº©MÂл\ªº¤èªk¤J¤f¡AÄ~©Óªº°ÊºA¤èªkªº¬£°e¬O³q¹L§ä¨ì¨C¤@Ó¯ª¥ýªº°ÊºA¤èªk²M³æ¡]«ö»PÄ~©Ó¡§¤ÏÂ઺¶¶§Ç¡¨¡^¡A¦]¦¹°ÊºA¤èªk¥Î©ó³B²z°T®§¡]¥]¬AWindows°T®§¡^¡C¹ê»Ú¤W¡A°T®§³B²z¹Lµ{ªº¬£°e¤è¦¡»P°ÊºA¤èªk¬Û¦P¡A¥u¬O©w¸q¤èªk¤£¦P¡@¡@Æ® ª«¥ó»P«ü¼Ð¡@¡@¦b Object Pascal¤¤¡Aª«¥ó¹ê»Ú¤W¬O«ü¼Ð¡C½sĶ¾¹¦Û°Ê¦a¬°µ{¦¡«Ø¥ßª«¥ó«ü¼Ð¡A¦]¦¹¦b¤j¦h¼Æ±¡ªp¤U¡A§A¤£»Ýn¦Ò¼{ª«¥ó¬O«ü¼Ð¡C¦ý·í§A±Nª«¥ó§@¬°°Ñ¼Æ¶Ç»¼®É¡A³o´N«Ü«n¤F¡C³q±`¡A¶Ç»¼ª«¥ó¬O«öȦӫD«ö¤Þ¥Î¡A¤]´N¬O»¡¡A±Nª«¥óÁn©ú¬°¹Lµ{ªº°Ñ¼Æ®É¡A§A¤£¯à¥Îvar°Ñ¼Æ¡A²z¥Ñ¬Oª«¥ó¤w¸g¬O«ü¼Ð¤Þ¥Î¤F¡C |
«á¤@¶ «e¤@¶ ¦^¥Ø¿ý ¦^º¶ |