VFP ·R¥ÎªÌªÀ°Ï ­º­¶ VFP ·R¥ÎªÌªÀ°Ï
¥»°Q½×°Ï¬° Visual Foxpro ·R¥ÎªÌ¸gÅç¥æ¬yªº¦a¤è, ½Ð¦h¦h§Q¥Î"·j´M"ªº¥\¯à, ¥ý¬d¬Ý¬Ý¦³µL«e¨Ò¥i´`, ¦pªGÁÙ¦³¤£À´ªº¦Aµo°Ý. ³¡¥÷¥DÃD¦³ªþ¥[ÀÉ®×, ¶·¥ýµù¥U¦¨¬°ªÀ°Ï©~¥Á¤~¥i¥H¤U¸ü.
 
 ±`¨£°ÝÃD±`¨£°ÝÃD   ·j´M·j´M   ·|­û¦Cªí·|­û¦Cªí   ·|­û¸s²Õ·|­û¸s²Õ   ·|­ûµù¥U·|­ûµù¥U 
 ­Ó¤H¸ê®Æ­Ó¤H¸ê®Æ   µn¤JÀˬd±zªº¨p¤H°T®§µn¤JÀˬd±zªº¨p¤H°T®§   µn¤Jµn¤J

VFP ªºGridªí®æ³zªR(Âà¶K)

 
µoªí·s¥DÃD   ¦^ÂÐ¥DÃD    VFP ·R¥ÎªÌªÀ°Ï ­º­¶ -> VFP °Q½×°Ï
¤W¤@½g¥DÃD :: ¤U¤@½g¥DÃD  
µoªí¤H ¤º®e
Ruey



µù¥U®É¶¡: 2003-03-12
¤å³¹: 1698
¨Ó¦Û: tunglo

²Ä 1 ¼Ó

µoªíµoªí©ó: ¬P´Á¤T ¤G¤ë 18, 2004 1:19 am    ¤å³¹¥DÃD: VFP ªºGridªí®æ³zªR(Âà¶K) ¤Þ¨¥¦^ÂÐ

µû½×:Grid¬OVFP«Ü­«­nªº¤@­Ó±±¨î¶µ.¥i¤£­n§âVBªºGrid¨Ó¬Ý«Ý³á!
§_«h§A·|¥Îªº«Üªq³à.¤£ºÞ·s¤â©Î¦Ñ¤â.§Ú³£«ØÄ³¥L.¦³ªÅ¦h§l¦¬¦¹¤å³¹.




VFP ªºGridªí®æ³zªR


RMH ©ó 2001-12-17 12:41:05 µoªí¡G
§@ªÌ Vlad Grynchyshyn
ĶªÌ RMH

VFP ¤¤ªºªí®æ ²Ä¤@³¡¤À

¤°»ò¬Oªí®æ©M¤°»ò®É­Ô¨Ï¥Î¥¦?

ªí®æ±±¨î¶µ¬O¤@²Õ¤¹³\¦b¤@­Óªí®æ¤@¼Ëªº¥i±²°Ê¦Cªí¤¤Åã¥Ü¸ê®Æªº VFP ª«¥ó. ªí®æ¥Ñªí®æª«¥ó¦Û¤v©M¤@²Õ¦C²Õ¦¨. ¦U¦C¥²¶·¦³¤@­Ó header ª«¥ó©M¦bªí®æ¦C¤¤Åã¥Ü¸ê®Æªº±±¨î¶µ. ªí®æ¦C¤¤ªº±±¨î¶µ¥Î©óÅã¥Ü©M½s¿è¸ê®Æ. ªí®æ¬O¤@­Ó±a®æ½u±øªº¯x§Î, ©M³»³¡ªº¼ÐÃD, ±²°Ê±ø©M¤@¨Ç¨ä¥L¦³¥ÎªºªF¦è, ¦p°O¿ý¼Ð°O, §R°£¼Ð°O, ¤À¹j±øµ¥.

»¡¹ê¸Ü, ªí®æÅã¥Ü¸ê®Æ¤£¶H Excel sheet ¨º¼Ë¦Û¥Ñ. ªí®æ­n¨D¥Î VFP °O¿ý·½ (§O¦W) ¨ÓÅã¥Ü¤@¨ÇªF¦è. ­n¦b¦P¤@¦Cªº¤£¦P¦æ¤¤Åã¥Ü¤£¦PÃþ«¬ªº¸ê®Æ¬O§xÃøªº. ªí®æ¤¤ªº©Ò¦³¦æªº°ª«×³£¬O¬Û¦Pªº, ¨Ã¥Bªí®æ¤¤¤@¦C¤¤ªº©Ò¦³¦æªº¼e«×¤]¬O¬Û¦Pªº. ·íµMÁÙ¦³¤@¨Ç¨ä¥L¬Û·í©_©Çªº©M¤£¥i«äijªº­­¨î, °£«D§Ú­Ì°O¦íªí®æ¬O¤@­Ó¯u¹êªº°ò©ó¦­´Áª©¥»ªº FoxPro ªº¬yÄýµøµ¡¨Ó½s¼gªº±±¨î¶µ. ³o¤@¨Æ¹ê¦^µª¤F³\¦hÃö©óªí®æªº©_©ÇªºªF¦è©M¦æ¬°ªº &¬°¤°»ò&. ¾¨ºÞ¦³³\¦hªº³Â·Ð, ªí®æÁÙ¬O¬Û·í¦³¥Îªº±±¨î¶µ¨Ã¦b¨ü¨ì VFP µ{¦¡®vªºÅwªï, ¦]¦¹¤]¦³³\¦hªº³B²z©M¤è®×¨Ó¥´¯}ªí®æªº­­¨î¨Ã¥Î¥¦¨Ó²£¥Í§ó¦nªº®ÄªG. §½­­©Î©_©ÇªºªF¦è±N¤£¦A¬O¨M©w¬O§_¨Ï¥Îªí®æªºÃöÁä.

ªí®æ±±¨î¶µ¹ï©ó¦b¤@­Ó²¼äªºªí³æ¤¤Åã¥Ü(¬yÄý)¸ê®Æ¬O¦³¥Îªº (¨C­¶Åã¥Ü¤j¶q¸ê®Æ). ªí®æ¹ï©ó·j¯Á©M©w¦ì¸ê®Æ¤ñ¼u¦¡¥\¯àªí©Î¾ã­¶ªº¤U©Ô²M³æ¦n. «ù¤[í©Tªº¨Ï¥Îªí®æ§@¬°©w¦ì¸ê®Æ¤£¬O¤@­Ó¦nªº¥D·N, ¦]¬°ªí®æ³q±`¦û¥Î³\¦hªÅ¶¡. ³\¦hÀ³¥Îµ{¦¡¦³¤@­Óªí®æ§@¬°¤@­Ó¥D­nªº±±¨îªí³æ - ½ÆÂøªº±a¦³³\¦h¥\¯àªº¥iÅã¥Ü¤lªí³æ¨Ó¶i¦æ¸ê®Æ½s¿èªºªí®æ.

ªí®æ¹ï©ó©Ò¦³Ãþ«¬ªº³W«hªº°ßŪ¸ê®Æ¬O¦³¥Îªº. ¨Ï¥Îªí®æ¶i¦æ¸ê®Æ½s¿è¤£¬O¤@­Ó¦n¥D·N. ¦bªí®æ¤¤¶i¦æ¸ê®Æ½s¿èªº¦n³B¶È¶È¬O©ö©ó²Õ´©MºÞ²zÀ³¥Îµ{¦¡. ¦bªí®æ¤¤¶i¦æ¸ê®Æ½s¿è®É¦pªG­n¥´¯} VFP ªí®æªº­­¨î·|¦³³\¦h°ÝÃD. ¦ý¬O, ¨Ò¦pµo²¼©Î­q³æªí³æªº¦æ¶µ, ¨Ï¥Îªí®æ¨Ó¶i¦æ½s¿è¬O§ó¦nªº, ¥Î¤á¤]·|·P¨ì§óµÎªA. ³o¼Ëªºªí³æ¬O¤@­Ó¨Ò¥~; ¤£­n¶È¶È¦]¬°ªí®æ¹ï©ó½s¿è¸ê®Æ®ÉªºÂ²³æ´N§â¥¦©ñ¦b¨C¤@­Óªí³æ¤¤. ·í§A³o¼Ë°µ®É, §A·|«Ü§Öµo²{¦Û¤v³B©ó³Â·Ð¤§¤¤, ¦]¬°ªí®æ¬O¦p¦¹½ÆÂø¥B©ö©ó¥¢¥h±±¨îªº±±¨î¶µ. ³o±N­n¨D§A¥I¥X§ó¦hªº§V¤O¨Ó«ü¥X°ÝÃD, §ä¥X¸Ñ¨M¤è®×©M­×¥¿§ó¦hªº°ÝÃD. ³q±`, ¸ê®Æ½s¿è¨Ï¥Î¤å¥»®ØÅã¥ÜÄæ¦ì©M±a¦³©w¦ì,«O¦s/«ì´_©M¤@¨Ç¨ä¥L¯S©w«ö¶s¤u¨ãÄæ¨Ó²¾°Ê°O¿ýªºªºªí³æ. ¬°ªí®æ¥Í¦¨¤@­Ó³o¼Ëªºªí³æ¬Oªá¶O¤j¶q®É¶¡ªº¤@ºØ¤èªk. ·íµM, ¦pªG§A¦³®É¶¡¨Ã³ßÅwª±­A©Ç²§ªºªF¦è, ªí®æ¬O¤@ºØ®ø¿i®É¥ú¨Ã§ä¥X¤è®×©M³B²z¿ìªkªº³Ì¦nªº±±¨î¶µ.


ªí®æ¦Û°Ê¶i¦æ¦Cªº­«¸j©w

ªí®æ¤¤³Ì±`¥X²{ªº©_©ÇªºªF¦è¬O¦Cªº control sources ªº¦Û°Ê§ïÅÜ. §A·|µo²{¬ðµMªí®æ¦CÅã¥Ü¤F¨ä¥Lªº¤£¬O§A¦b¦Cªº ControlSource Äݩʤ¤«ü©wªº¸ê®Æ. ¥t¥~, ¦C¤¤Åã¥Üªº¸ê®Æªº¶¶§Ç¤£¬O§A­«·s¦w±Æ¹Lªº¶¶§Ç. ¬°¤°»ò·|³o¼Ë?

======================================================
¦]¬°ªí®æªº RecordSource Äݩʦb³]­p®É³Q§ïÅÜ. ¦bªí®æªº RecordSource ÄݩʳQ§ïÅÜ«á©Ò¦³ªº ControlSource ­È³Q²M°£¤F. ¦b¦¹±¡ªp¤U»s§@¤@­Ó³o¨Ç­Èªº³Æ¥÷, ³q±`¬O¦b¦Cªº Comment Äݩʤ¤.

¦]¬°ªí®æªº RecordSource Äݩʦb¹B¦æ®É³Q§ïÅÜ. ¦n¤F, ¦pªG§A­n³o¼Ë°µ, «O¦s©Ò¦³ªº control sources, µM«á«ì´_¥¦­Ì.

¥i¯àªº­ì¦]¬Oªí®æ³Q­««Ø¤F. Ãö©ó³o¤@ÂI±N¦b¤U¤@³¹¤¤»¡©ú.
======================================================

¸Ó¦æ¬°ªº°Æ§@¥Î¨Ã¤£ÄY­«. ³q±`Åã¥Üªº¸ê®Æ¨S¦³§ïÅÜ, °£«Dªí®æ¦³¤@¨Ç½ÆÂøªº¥\¯à©Mµ²ºcÅé¨t. ¨Ò¦p, ¦C­ÈÅã¥Üªº¬O¹Bºâ¦¡ - ¹Bºâ¦¡±N¥á¥¢¨Ã¥uÅã¥ÜÄæ¦ì. ¹ï©ó¥Î¤á¨Ó»¡¦bªí®æ¦C¤¤Åã¥Ü ID Äæ¦ì (¥DÃöÁä¦r¬q)¤]¤£¬O¤@¥ó¦n¨Æ. ³Ì¦MÀIªº¬O·í§A¦bªí®æ¤¤¦³¤@¨Ç¤£¦Pªº±±¨î¶µ®É. ·í¦C¤¤¦³¤@­Ó®Ö¨ú¤è¶ô±±¨î¶µ®É, ¦ýªí®æ¨M©w¨Ï¥Î¦r¤¸«¬Äæ¦ì§@¬°¸Ó¦Cªº control source ®É, VFP ±NÅã¥Ü¤@­ÓÃö©ó¸ê®ÆÃþ«¬¥¢°tªº¿ù»~: &±±¨î¶µ¤£¤ä´©¸Ó¸ê®ÆÃþ«¬&.

µL½×¬O¤W­z¦óºØ±¡ªp, ·í¥H¥ô¦ó¤è¦¡§ïÅÜ record source ®É, ³£¦³®ø°£ªí®æ­««Øªº¤è®×.

¥H¤U¥Ü¨Ò¥N½X¥Î¦Cªº Comment ÄݩʫO¦s control sources ¨Ã«ì´_¥¦­Ì.

&& ³Æ¥÷¦U¦Cªº ControlSource
with {grid}
local nColumnIndex
for m.nColumnIndex = 1 to .ColumnCount
.Columns(m.nColumnIndex).Comment = .Columns(m.nColumnIndex).ControlSource
endfor
endwith

&& «ì´_¦U¦Cªº ControlSource
with {grid}
local nColumnIndex
for m.nColumnIndex = 1 to .ColumnCount
if !empty(.Columns(m.nColumnIndex).Comment)
.Columns(m.nColumnIndex).ControlSource = .Columns(m.nColumnIndex).Comment
endif
endfor
endwith

¤W­±¥N½X¤¤ªº {grid} ¬Oªí®æª«¥óªº¤Þ¥Î(¦p:Thisform.Grid ©Î
Thisform.Pageframe1.Page1.Grid1).

§â³o¨Ç¥N½X©ñ¨ìªí®æÃþªº¤@­Ó¤èªk¤¤¬O¤@­Ó¤£¿ùªº¥D·N. ³o¦b³]­p®É¦]§ïÅÜ record source ¦Ó³y¦¨ ControlSource ­È¥á¥¢®É¦bªí®æÃþªº Init ¤èªk¤¤½Õ¥¦¨Ó«ì´_ control sources ¤]¬O¤@ºØ¦n¿ìªk.

­«¤jª`·N: ¦b§¹¥þ«ì´_ control sources «e¤£­n°õ¦æ¥ô¦óªí³æ¤Wªº¥iµø±±¨î¶µ©Îªí®æªº refreshing. §_«h¦pªG§A¦bªí®æ¦C¤¤¨Ï¥Î¤F¦Û©w¸q±±¨î¶µ®É§A±N·|¹J¨ì¤@­Ó¿ù»~¸ê°T &±±¨î¶µ¤£¤ä´©¸Ó¸ê®ÆÃþ«¬&. ³o¬O¦]¬°¥¿¦p«e­±´£¤Îªº¦C¤¤¥i¯à¨Ï¥Îªº¥´¶Ã¤Fªº control sources ¤¤ªº¤£¥¿½TªºÄæ¦ìÃþ«¬³y¦¨ªº.

ªí®æ¦Û°Ê­«ºc

§A¬O§_µo²{¹L§Aªºªí®æªº¦æ¬°¤£¦A¶H§A¦b³]­p®É³]­pªº¨º¼Ëªº±¡ªp? ¦C¤¤ªº¦Û©w¸q±±¨î¶µ¥á¥¢? ¦C, ¼ÐÃD©Î±±¨î¶µ¨Æ¥ó¤¤ªº¥N½X¤£¦A¹B¦æ? ªí®æªº­«ºc¦æ¬°·|§¹¥þ²¾¥h©Ò¦³ªºªí®æ±±¨î¶µ©M¦C¨Ã¥ÎÀq»{ªº VFP ±±¨î¶µ©MÄݩʳ]¸m¦A¦¸­««Øªí®æ. ³o³y¦¨©Ò¦³¦Cª«¥ó¤¤ªº©Ò¦³¤èªk, Äݩʳ]¸m©Mª«¥ó¥á¥¢. ¦Cªº CurrentControl Äݩʭ«¸m¬°Àq»{ªº¤å¥»®Ø±±¨î¶µ. ¦Û©w¸q¼ÐÃD¥á¥¢. ³q±`³o¬O¤@ºØ¤£ª¾¹Dªí®æµo¥Í¤F¤°»ò±¡ªpªº¨aÃø. ¤U­±»¡©úºØºØ­ì¦]¤Î¸Ñ¨M¿ìªk.

1. ªí®æ¦Û¤v­«ºcÁ`¬Oµo¥Í¦b RecordSource §O¦W³QÃö³¬«á. ¦pªG³o¬O¤@­Óµø¹Ï, ³q±`¦b§A requery µø¹Ï®É­«ºc¤£·|µo¥Í. ¦pªG¥¦¬O¤@­Ó SQL »y¥y, ·í§A«ü©w¥t¤@­Ó SQL »y¥y©ÎÃö³¬ªí®æ¨Ï¥Îªº¥Î©ó«O¦s¬d¸ßµ²ªGªº§O¦W®É­«ºc´N·|µo¥Í. ·í§A¨Ï¥Î SQL Pass-Through ¨Ó¦A¦¸¬d¸ß¸ê®Æ¨ìªí®æªº record source ¨Ï¥Îªº§O¦W®É­«ºc¤]·|µo¥Í, §Y¨Ï§A¥ôµM¨Ï¥Îªº¬Oµø¹Ï.

­nÁ×§K¦b¨ê·sªí®æªº record source ªº­«ºc, §A»Ý­n¦b¤W­zªº¥ô¦óªí®æ record source ¨ê·s«e, «ü©w¤@­ÓªÅ¦ê (¤£¬O¤@­ÓªÅ®æ - " ", ¦Ó¬OªÅ¦ê - "") ¨ì Record source. Àˬd§Aªº¥N½X¬O§_¥¿½T, §A¬O§_¥H¥¿½Tªº¶¶§Ç³o¼Ë°µ¤F, ©Î¨ä¥LªF¦è¨S¦³¥´¶Ã¥¿½Tªº refreshing ³B²z¶¶§Ç. (§A¥i¥H¦bªí®æªº BeforeRowColChange ¨Æ¥ó¤¤©ñ¤J SET STEP ON ©Î³]¸m¸òÂܤ¤Â_ÂI¨Ó¸òÂÜ¥N½X). ¦b record source ¨ê·s«á, ¦A¦¸«ü©w record source ¨ìªí®æ. ¦b¦¹±¡ªp¤U­«ºc¤£·|µo¥Í, ¦ý¬O, ¦]¬°«ü©w record source , ¦C·|µo¥Í¦Û°Ê­«¸j©w. ¥H¤U¬O¦p¦ó¥Î¤@¤pÂI¥N½X¨Ó­×¥¿³oºØ±¡ªpªº¥Ü¨Ò.

* ¤UÄÑ«O¦s control sources
...........
{grid}.RecordSource = ""
* °õ¦æ record source ªº¨ê·s
...........
* «ì´_ record source
{grid}.RecordSource = "{RecordSourceName}"
* ¤UÄÑ«ì´_¦Cªº control sources
...........

¦b¤W­±¥N½X¤¤ {grid} ¬Oªí®æª«¥óªº¤Þ¥Î, {RecordSourceName} ¬O¥Î©ó record source ªº§O¦W©Î SQL »y¥y. ³q±`±¡ªp¤U¨Ï¥Î SQL »y¥y§@¬° record source §O¦W·|¨Ï¦Cªº ControlSource §ïÅÜ, ¦]¬° VFP Á`¬O§ïÅÜ¥¦¨Óªí¥Ü¬° &Alias.FieldName&®æ¦¡¦Ó¤£ºÞ¦b³]­p®É¥u«ü©w¤FÄæ¦ì¦W. ¥H¤W¤èªk¦b§ïÅÜªí®æªº SQL »y¥y®É¤]¬O¦³¥Îªº.

­«­nª`·N: ¦b»y¥y &RecordSource=""& «á¨ì§¹¥þ«ì´_ control source ¤§¶¡, ¤£­n°õ¦æ¥ô¦óªí³æ¤Wªº¥iµø±±¨î¶µ©Îªí®æªº refreshing. §_«h¦pªG§A¦bªí®æ¦C¤¤¨Ï¥Î¤F¦Û©w¸q±±¨î¶µ, §A±N¥i¯à¦¬¨ì¤@­Ó &±±¨î¶µ¤£¤ä´©¸Ó¸ê®ÆÃþ«¬& ¿ù»~.

¥t¤@ºØÁ×§Kªí®æ­«ºcªº¤èªk¬O¨Ï¥Îªí®æªº BeforeRowColChange ¨Æ¥ó. BeforeRowColChange ¨Æ¥ó¦b¨C¦¸ªí®æ±N­n­«ºc®É³Q¿Eµo. ¥¦¦b¥]¬Aªí®æ§O¦WÃö³¬®É, SQL Pass-Through ´å¼Ð­«Àò¨úµ¥®Éµo¥Í. µL½×ªí®æ¬O§_¥i¨£, ¨ã¦³µJÂI¤Îªí®æªº°t¸m. ³Ì¥O¤HÅå©_ªº¬O©ñ¸m NODEFAULT ¨ì¸Ó¨Æ¥ó¤¤¥H¨Ï¸ê®Æ§ïÅÜ®ÉÁ×§Kªí®æ­«ºc. ¦ý¬O, ¦b¦¹±¡ªp¤Uªí®æ·|Åã¥Ü¤£¥i«äijªº¿ù»~¦æ¬°.

thisform.GridRefreshing = .T. && §i¶D©Ò¦³ªí®æ±±¨î¶µ
&& ±N­«·sÀò¨úªí®æ¸ê®Æ
... °õ¦æ¸ê®Æ¬d¸ß
thisform.Grid.RecordSource = thisform.Grid.RecordSource
thisform.Refresh && ©Îªí®æ¨ê·s
DOEVENTS && ¦pªG»Ý­n - ¥u´ú¸Õ¤£­n¸Ó©R¥O
&& ¦b¦¹®Éªí®æ°±¤î¦Û¤v­«ºc>
thisform.GridRefreshing = .F.

¦bªí®æÃþªº BeforeRowColChange ¨Æ¥ó¤¤©ñ¤J¥H¤U¥N½X:

if PEMStatus(thisform,"GridRefreshing",5) AND thisform.GridRefreshing
nodefault
return
endif

¦pªG§A©ñ¸m¤W­±¥N½X¨ìªí®æÃþ¤¤³o¼Ë¸Ó¥\¯à¤@¯ë©Êªº, ¥]¬A¨Ï GridRefreshing Äݩʧ@¬°§Aªºªí®æÃþªºÄÝ©Ê. ¦³®É­n¨D³]¸mµJÂI¨ìªí®æ¥~µM«á¦A³]¸mµJÂI¦^¨ìªí®æ, ¦]¬°ªí®æ¤¤ªº·í«e³æ¤¸·|¦b¨Ï¥Î¸Ó¤èªk¨ÓÁ×§Kªí®æ­«ºc®ÉÅã¥Ü¬P¸¹ (&*******&).

¤£©¯ªº¬O, ¨S¦³¿ìªkª¾¹D BeforeRowColChange ¨Æ¥ó³Q½Õ¥Îªº­ì¦]¬O¦]¬°¥¦ªº­«ºcÁÙ¬O²¾°Êªí®æ³æ®æªºµJÂI©Î¬Oªí®æÀò±oµJÂI®É. ´N¶H¦b¥Ü¨Ò¤¤¤@¼Ë¨Ï¥Î¤@­Ó¼Ð°O. ¦pªG§A¦³®É¶¡, §A¤]¥i¥H¥Í¦¨¤@­Ó¨Ï¥Î³z©úªº§Îª¬±±¨î¶µ½Æ»\¦bªí®æ¤Wªºªí®æÃþ¨Ó®·®»©Ò¦³·Æ¹«¨Æ¥ó. ±Ä¥Î¸Ó¤èªkªí®æ±N¥i¥Hª¾¹Dªí®æªº BeforeRowColChange ¿Eµoªº­ì¦]. ¸Ó¤èªk¤]¥i¥H®·®» KeyPress ¨Æ¥ó (³Ì¦n¬O³]¸mªí³æªº KeyPreview=.T.). ³Ì«á, ªí®æÀ³¸Ó©ñ¨ì®e¾¹¤¤¨Ó®·®»ªí®æ±o¨ìµJÂI®É¨è (BeforeRowColChange ¤]±N¦bªí®æ±o¨ìµJÂI®É¿Eµo).

¨âºØ¤èªk³£¦³¤@­Ó­«¤jªº¯ÊÂI: ­n¨D¦b©Ò¦³³y¦¨­«ºcªº¦a¤è©ñ¸m¥N½X. ·í³o¼Ëªº¦a¤è¦ì©ó¦h­Óªí³æ©MÃþ¤¤®É, ¦p, ¥Î SQL Pass-Through ¥\¯à­«·s¬d¸ß¤@¨Ç§O¦Wªº®É, ­n©w¦ì©Ò¦³ªº³o¨Ç¦a¤è¬O§xÃøªº¨Ã¥B¥¦­Ì­n¨D¤@­Óªí®æªº¤Þ¥Î¨ÓÁ×§K­«ºc. ¥¦¦³®É¤]·|³y¦¨¤£§Æ±æªº¦Cªº¦Û°Ê¦A¸j©w. ªí®æ±`¥Î©óÅã¥Üµø¹Ï¤¤ªº°ÊºA¸ê®Æ, ¦]¦¹¥¦¦b requiry ®É·|³Q¨ä¥Lªº¸ê®Æ¨ê·s. ªí®æªº­«ºc¦bµø¹Ï requiry ®É¤£·|µo¥Í. ¦ý¬O, ·í²¾°Ê(¤É¯Å)À³¥Îµ{¦¡¨ì¨Ï¥Î»·ºÝµø¹Ï®Éµ{¦¡®v±`±`¨M©w¨Ï¥Î SQL Pass Through ¥\¯à¨Ó³B²z¸ê®Æ. ¦b³o¼Ëªº±¡ªp¤U¦U­Ó³Q SQL Pass-Through ¨Ï¥Îªº§O¦Wªº requery ±N³y¦¨­«ºc. ¦]¦¹, µ{¦¡®v¦b³oùتº¥D­n¿ù»~¤]¥u¬O requery µø¹Ï¨Ã¶H¥H«e¤@¼Ë©ñ¤J¥N½X¨ì³oùØ. ¥¦¬O¤@±ø³æ¤@ªº©R¥O, ¦]¦¹µ{¦¡®v±`±`¦b³\¦h¦a¤è©ñ¤J³o¼Ëªº©R¥O¦Ó¨S¦³ª`·N¨ì³o¼Ë°µªº¤£¥¿½T¤§³B. ¦b¤É¯Å¨ì¨Ï¥Î SQL Pass-Through ¥\¯à®É©Ò¦³ requery »y¥yÀ³¸Ó¥Î¾A·íªº©R¥O´À´«. ¥t¥~, ¦bµo²{­«ºc¦æ¬°®É, µ{¦¡®v¶}©l§ä©Ò¦³¸Ó§O¦W requery ªº¦a¤è. ¥¦¥i¯à¥æ¤e¦a¦s¦b¤_ªí³æ©MÃþ¤¤ªº¦h­Ó¦a¤è, ³o´N¦¨¬°¤@­Ó¤jªº°ÝÃD. ³Z¬: ©ñ¸m¸ê®Æ requery, Ãö³¬, ¥´¶}©M­«¥´¶} (¥H¤Î¨ä¥L©Ò¦³»P¸ê®Æ¦bÃöªº°Ê§@) ¦b¤@­Ó¦a¤è - Ãþªº¤èªk©Î¨ç¼Æ¤¤, ¨Ã¥Î¸ÓÃþªºª«¥ó¤Þ¥Î¨Ó½Õ¥Î¾A·íªº¥\¯à. Á`¬O°²³]©Ò¦³¸ê®Æ¥\¯à·|¦b¤µ«áªº¤@¨Çªþ¥[ªº¥N½X¤¤¶i¦æ requery, §Y¨Ï·í¥¦¥u¬O¤@­Ó²³æªºµø¹Ïªº requery. ¨Ï¥Î³oºØ¤èªk±N¦³§U©ó§A¦b§A»Ý­n­×§ï¬Y¨ÇªF¦è¦Ó¬d§ä©Ò¦³¸ê®Æ°Ê§@ªº¦a¤è®É¸`¬ù®É¶¡. ªí®æ­«ºc¬O·í¨ä¥X²{®É§A¤£¯àÁ×§Kªº³oºØ±¡ªp¤§¤@. ¨Ò¦p, ³Ð«Ø¤@­Ó¨ã¦³©Ò¦³¥²»Ýªº, ³B²z¥¦Åã¥Üªº¸ê®Æªº¤èªkªºªí®æÃþ. µM«á¨Ï¥Îªí®æÃþªºª«¥ó¤Þ¥Î. ³o¼Ë¦b©Ò¦³¦a¤èªº¸ê®Æ¨ê·s½Ð¨D±N¦¨¬°¤@­Ó³æ¤@ªº¥\¯à½Õ¥Î. ¦n¤F, ¤]³\§A«Ü¤Ö³Ð«Ø¤@­Ó¦³¦p¦¹»Ý¨DªºÀ³¥Îµ{¦¡¡K

¦]ªí®æ­«ºc¦æ¬°ªº¥¢±Ñ, µ{¦¡®v¦³®É³Ð«Ø¨ÃºûÅ@ªí®æ¨Ï¥Îªº Record Source ªº´å¼Ð, µM«á¨ê·s¥Î§R°£©M½Æ»s¨Ó¨ê·s³o¼Ëªº´å¼Ð. ¦b§A¤w¸g¦³¤F³o¼Ëªº´å¼Ðªº±¡ªp¤U, ±q´å¼Ð¤¤§R°£©Ò¦³ªº¸ê®Æ¨Ã¦A¦¸²K¥[¥¦­Ì¬O¤£§xÃøªº.

2. ­«ºcµo¥Í¦bªí®æªì©l¤Æ¥B record source Äݩʬ°ªÅ©Î record source ¤£¦s¦b®É (§O¦W¨S¦³¥´¶}). ¦b¦¹±¡ªp¤Uªí®æ¦Û¤v­«ºc¨Ã¨Ï¥Î·í«e¦s¦bªº§O¦W§@¬° record source (©ÎªÌ¦b·í«e¤u§@°Ï¤¤¨S¦³¥´¶}ªí®É«O«ù¬°ªÅ, ¦ý©Ò¦³ªº¦C³£¤£¦s¦b¤F). ¦pªG§A»Ý­n¥´¶} record source ¦b¤@¨Ç¨ä¥Lªº¨Æ¥ó¤¤(¤£¬Oªí³æªº Load ¤èªk¤¤, ¦bªí®æªì©l¤Æ«e), ¨Ï¥Î¤U­±ªº§Þ³N.

¦bªí³æªº Load ¨Æ¥ó¤¤³Ð«Ø¤@­ÓªÅªº»Pªí®æ¨Ï¥Îªº record source µ²ºc¬Û¦Pªº´å¼Ð; ªí®æªº record source ÄݩʱN¨Ï¥Î¸ÓªÅªº´å¼Ð§O¦W. µM«á, ·í§A¥´¶}¯u¥¿ªº¸ê®Æ®É, «ü©w¤@­ÓªÅªº¦ê¨ìªí®æªº record source, ¥´¶}¸ê®ÆµM«á¦A¦¸«ü©w¯u¥¿ªº¸ê®Æ§O¦W¨ìªí®æªº record source. §O¤@ºØ³B²z¤èªk¬O©ñ¸m¤@­Ó¤£¥i¨£ªº¦b¥¦ªº INIT ¨Æ¥ó¤¤³Ð«ØªÅªº´å¼Ðªº¦Û©w¸q±±¨î¶µ. ¦ý¬O, ­n«OÃÒ¸Ó±±¨î¶µªº Init ¨Æ¥ó¦bªí®æªº INIT ¤§«e¿Eµo, §_«h±N·|µo¥Í­«ºc. ²Ä¤GºØ¤èªk¬O¦b¹B¦æ®É²K¥[ªí®æ¨ìªí³æ. ³Ð«Ø¤@­Óªí®æÃþ¨Ã¤£¦b³]­p®É§â¥¦©ñ¤Jªí³æ. ¦b Init ¨Æ¥ó¥N½X¤¤©ñ¤J¤@­Ó AddObject ¤èªk½Õ¥Î¨Ó¦b­n¨Ï¥Îªº§O¦W·Ç³Æ¦n«á²K¥[ªí®æ¨ìªí³æ.

3. ªí®æªº¦Û¤v­«ºc¦b¦C¼Æ§ïÅܬ°¹s©Î -1 µo¥Í. §Ú§Æ±æ§A¤£­n³o¼Ë°µ(«ü³]¸m ColumnCount ¬° 0 ©Î -1), §A³o¼Ë°µ¤F¶Ü? Wink Á`¤§, ¥¦¥i¥H¥Î©ó²³æªº¥i¥H¥´¶}¥ô¦óªí¨Ã¦bªí®æ¤¤¬yÄý¥¦­ÌªººÞ²z©Êªí³æ. ¦ý¬O, ¥Ñ©ó­«ºcªº­ì¦], ³o¼Ëªºªí®æ¨ã¦³«Ü¤jªº¥\¯à­­¨î, ©ÎªÌ©Ò¦³ªºªí®æ¥\¯à±N©ñ¤J¨ìÃþ¤¤¨Ã¦b¹B¦æ®Éªº­«ºc«á²K¥[¨ìªí®æ.

4. ªí®æªº¦Û¤v­«ºc±N¦b record source ¶W¥X½d³ò®Éµo¥Í. ³o³q±`µo¥Í¦b·í record source «ü©w¦b¤@­Ó¸ê®Æ¤u§@´Á, ¦ýªí®æ½Tªì©l¤Æ¦b¥t¤@­Ó¸ê®Æ¤u§@´Á¤¤®É, ³o¼Ë·í¥¦¸ÕµÛ¨ê·s¦Û¤v®É, ³Q¥t¤@­Ó¸ê®Æ¤u§@´Á¨Ï¥Îªº record source ¹ï©ó·í«e¸ê®Æ¤u§@´Á¨Ó»¡¬O¤£¦s¦bªº. ¥t¤@ºØ±¡ªp¬O·íµ{¦¡®v¨Ï¥Î¤j¶qªº¸ê®Æ¤u§@´Á¨Ã¦b¨ä¶¡¤Á´«®Éµo¥Í.

­«ºc¤£¯à¥H¥Îªþ¥[ªºªí®æ¦Cªº¤Þ¥Î¨ÓÁ×§K¥¦ - ¦C»Pªí®æ¬O¤ÀÂ÷ªº. ¥t¥~, Åýªí®æ¨Ï¥Î¤w¸g¦bÃþ¤¤©w¸qªº¦C¤]¤£¯àÁ×§K­«ºc - ³o¬O·í¦bªí³æ¤W¨Ï¥Î®e¾¹Ãþ®É®e¾¹Ãþªº¤lª«¥ó¤£¯à³Q§R°£³o¤@³W«hªº¨Ò¥~.

§O¤@ºØ¬y¦æªº®ø°£ªí®æ­«ºc°ÝÃDªº¤èªk¬O°ÊºA¦a³Ð«Øªí®æ. ¥Î§Aªº©Ò¦³¦C©w¸q¥N½X³Ð«Ø¤@­Ó¦Û©w¸qªí®æÃþ. ·í requery ¸ê®Æ®É, ±qªí³æ¤¤²¾¥hªí®æ±±¨î¶µ, requery ¸ê®Æ, µM«á¦b¹B¦æ®É¦A¦¸²K¥[ªí®æ¨ìªí³æ¨Ã³]¸m¥¦ªº¦ì¸m. ³o­n¨D­º¥ý³B²zªí®æªº²K¥[, ³]¸m¤@¨Çªí®æªºÄݩʵ¥µ¥. ¦ý¬O, ¸Ó¤èªk¬O¤£¦nªº, ¦]¬°»Ý­n¬°ªí³æ¤Wªº¦Uªí®æ³Ð«ØÃþ, ª¾¹DÃþªº¦W¦r, ©Mªí®æ³£­n¦³¦Û¤vªº³B²zµ{¦¡ - ¤£¥iÁ×§K¦a³\¦h¥N½X.

¤]¥i¥H¦b¹B¦æ®É§¹¥þ¥Î¥N½X³Ð«Øªí®æª«¥ó¨Ã¥Î¦Û©w¸q±±¨î¶µ¸Ë°t¥¦. ¦ý¬O, ¦bªí®æ¦Û¤v­«ºc«á, §A»Ý­n¦A¦¸²K¥[³o¨Ç¦Û©w¸q±±¨î¶µ¨ìªí®æ¤¤. ¸Ó¤èªk¥Î©óªí®æ­«ºc¤£¥iÁ×§Kªº±¡§Î, ¨Ò¦p, ¦bºÞ²z©Êµ{¦¡¤¤ - ­n¦b¦P¤@­Óªí®æ¤¤Åã¥Ü¥ô¦óªíªº¤º®e, ¦ý¤]»Ý­n¤@¨Ç¶H¨Ï¥Î½s¿è®Ø¨Ó½s¿è³ÆµùÄæ¦ì©M³æÀ»¦CÀY±Æ§Ç³o¼Ëªº¥\¯à®É.

¤£ºÞªí®æ¦p¦ó±²°ÊÂê¦í¬Y¦C¨Ï¨äÁ`¬O¥i¨£ªº

¦b»Ý­nÂê¦í¬Y¦C¦Ó¨Ïªí®æ±²°Ê®É³£¥i¨£®É, ­n°O¦íªº²Ä¤@¥ó¨Æ¬O¨Ï¥Î split ªí®æ. ·í¥Î¤á±²°Êªí®æ®É¥ªÃ䪺¦CÁ`¬O¥i¨£ªº. ¦ý¬O, ³oÅý¥Î¤á¬Ý°_¨Ó·P¨ì¬Û·í¥j©Ç, ÃB¥~ªº±²°Ê±ø¡K µ¥µ¥µ¥µ¥.
ªí®æ¦³¤@­Ó«Ü¦nªºÄÝ©Ê LeftColumn, ¥¦¬O·í«e¥iµøªº³Ì¥ªÃä¦Cªº¦C§Ç¸¹. ·íªí®æ¾î¦V±²°Ê®É, ¸Ó­È·|§ïÅÜ. §Ú­Ì¥i¥H¦b Scrolled ¤èªk¤¤¥Î¥¦¨ÓÂê¦í¬Y¦C:

if nDirection>3
this.Columns(1).ColumnOrder = this.LeftColumn
endif

¥t¥~, ¹ï©ó¥ÎÁä½L±²°Êªí®æ, ¦b AfterRowColChange ²K¥[¤@¦æ:
this.Columns(1).ColumnOrder = this.LeftColumn
³o¼Ë²Ä¤@¦CÁ`¬OÅã¥Ü¦bªí®æªº³Ì¥ªÃä!
¡@

ªí®æ³Z¬

§Ú©Ò­n»¡ªº²Ä¤@­Ó³Z¬¤£¶È¶È¬O¬Û¹ï©óªí®æªº. ·j¯Á UT ¯¸ÂIÃö©óªí®æªº¸ê°T. §A·|§ä¨ì³\¦h¦³¥ÎªºªF¦è! ¦Ó¥BÁ`¬O¥i¥H¦b³oùØ´£¥X¥ô¦ó°ÝÃD.
¦b¨Ï¥Î SQL SELECT »y¥y§@¬° record source ®É, Á`¬O¦b»y¥yªº«á­±²K¥[ &INTO CURSOR ¡K&, §_«h±N·|¦bªí³æ¸ü¤J®É©Î¸Ó¬d¸ß¹B¦æ®ÉÅã¥Ü¤@­Ó¬yÄýµøµ¡.

¥i¥H¨Ï¥Î¹Bºâ¦¡§@¬° column source! ¥u»Ý¨Ï¦C¦¨¬°°ßŪªº¨Ã¦b¦Cªº ControlSource ¤¤¼g¤J­nÅã¥Üªº¹Bºâ¦¡. ¥i±¤ªº¬O, ªí®æ¤¤©Ò¦³¦æ¤¤Åã¥Üªº¹Bºâ¦¡ªºµ²ªG¥u¯à¬O¬Û¦P¸ê®ÆÃþ«¬; §_«h§A·|±o¨ì©_©Çªº®æ¦¡, ¬P¸¹©Î¤@¨Ç¨ä¥L©_©Çªºµ²ªG. ¹ï©ó¤£¦P¸ê®ÆÃþ«¬³Ì¦n¦bªí®æ¦C¤¤¨Ï¥Î®e¾¹¡K

­n²K¥[·s±±¨î¶µ¨ìªí®æ¦C¤¤, ¦bÄݩʵøµ¡ªº¤U©Ô¦¡¦C¥Ü¤è¶ô¤¤¿ï¾Ü¸Ó¦C, ³æÀ»¥¿¦b½s¿èªºªí³æªº¼ÐÃD¨Ó¿ï¾Ü¥¦, ¿ï¾Ü©Ò»Ýªº±±¨î¶µ¨Ã©ì°Ê¥¦¨ìªí®æ¤¤. ­n²¾¥h¸Ó±±¨î¶µ, ¦bÄݩʵøµ¡¤¤¿ï¾Ü¸Ó±±¨î¶µ, ³æÀ»ªí³æªº¼ÐÃD¨Ó¿ï¾Üªí³æ, µM«á«ö¤U &Del& «ö¶s.

¦b¨S¦³¾î¦Vªí®æ½u®É, ·í Sparse=.F. ©Î HighlightRow=.F. ®É, ´å¼Ð©Ò¦bªº³æ®æ·|Åã¥Ü¤@­Ó¦Ç¦âªº®Ø. ©ñ¸m¤@­Ó¥Õ¦âªº shape ¨ìªí®æ¤U¥i¥H®ø¥h¦Ç¦âªº®Ø.

¥i¥H¦b¦Cªº MouseMove ¨Æ¥ó¤¤³]¸m mouse pointer ¨Ó§ïÅܷƹ«´å¼Ð.


ªí®æÄµ§i

¥»³¹¬°µ{¦¡®v´£¨ÑÃö©óªí®æªºÄµ§i. ¦³«Ü¦h¡K
*********

°O¦í¦b³]­p®É§ïÅÜ record source Äݩʮɻݭn°O¦í¦U¦Cªº control source. ¦]¬°¦b record source §ïÅܫᥦ­Ì³£·|³Q²M°£! ¦b¦Cªº Comment Äݩʤ¤³Ð«Ø¤@­Ó ControlSource Äݩʪº«þ¨©¬O¤@­Ó¤£¿ùªº¿ìªk.

¦bªí®æ³Q©l¤Æ«e, ¤£­nÅý¥¦ªº Record Source Äݩʬ°ªÅ.

ªí®æ¦C¤¤ªº±±¨î¶µªº¨Æ¥ó©MÄݩʦb¦Cªº sparse Äݩʬ° .T. ®É¶È§@¥Î©ó·í«e³æ®æ. ·í Sparse ¬° .F. ®É, ÄݩʥΩóÅã¥Ü, ¦ý¨Æ¥ó¤]¶È§@¥Î©ó·í«e³æ®æ.

Scrolled ¨Æ¥ó¥u³Q scrollbars ¿Eµo. ·íªí®æ¬O³QÁä½L±²°Ê©Î¦b¯S©w±¡ªp¤U¥H½sµ{¤è¦¡±²°Ê®É, Scrolled ¨Æ¥ó¤£¿Eµo.

RelativeRow ©M ActiveRow ÄݩʶȦbªí®æ¨ã¦³µJÂI®É¥i¥Î. ¦b·í«e°O¿ý¶W¥X¥i¨£ªº°O¿ý®É ActiveRow Á`¬O¬°¹s.

*********



VFP ¤¤ªºªí®æ ²Ä¤G³¡¤À


¦b¸Ó³¡¤À¤¤, §Ú±N°Q½×Ãö©ó¦p¦ó¨Ïªí®æ¶}µo§ó§Ö³tªº¦C©M¦CÀYªºÂ¬ªù. ¤]±N°Q½×Ãö©ó½T©wªí®æ¦CÀY©M³æ®æªº½T¤Á¦ì¸m. ¶H²Ä¤@³¹¤¤¤@¼Ë, §Ú¤]¥]¬A¤F¤@¨Ç³Z¬©Mĵ§i.

ªí®æ¦C©M¦CÀYªºÂ¬ªù - ¦p¦ó¨Ïªí®æ¶}µo§ó§Ö³t

³\¦h®É­Ô·í§A¸Õ¹Ï³Ð«Ø¤@­Ó²³æªºÀ³¥Îµ{¦¡¨ÓÀˬd¬O§_¦³¨Ç¨Æ¥i¥H¥Îªí®æ¨Ó°µ©Î¥¦±N¬Ý°_¨Ó¬O¤°»ò¼Ëªº®É­Ô, §A·|µo²{»Ý­n³]¸m³\¦hªF¦è¨Ó¨Ïªí®æ±o¨ì»Ý­nªº¥~Æ[. «ü©w RecordSource, ¬°¦U¦C«ü©w ControlSource, «ü©w¦U¦CÀYªº caption µ¥µ¥. ¦³®É§A¤S»Ý­n²K¥[¤@¨Ç¥\¯à¨ìªí®æ¤¤, ¦p¶HÂùÀ»¤@­Ó¦æ¥H¼u¥X§O¤@­Óµøµ¡ - ³o¤]­n¨D²K¥[¥N½X¨ìªí®æ¦U¦C¤¤ªº±±¨î¶µ¤¤. ·í¥u¦³¤@­Ó¥u¦³¤Ö¶q¦Cªºªí®æ¦b§AªºÀ³¥Îµ{¦¡¤¤®É³o¤£¦¨°ÝÃD. ¦ý¬O, ·í§AªºÀ³¥Îµ{¦¡¤¤¦³¤j¶qªí®æ¥\ªí®æ¦³«Ü¦h¦C®É, §A·|«Ü§Ö³Q¦Uªí®æ©M¦C¤¤ªº³o¨Ç¨Æ±¡§Ë±o¯h¾Î¤£³ô.

¬°ªí®æ©Mªí®æ¤¤ªº±±¨î¶µ©w¸qÃþ¬O®e©öªº. ¸Ó¤èªk±o¨ì¤F¼sªxªºÀ³¥Î. ¦ý¬O, ÁÙ¦³§ó¦nªº¿ìªk¨Ó²Õ´§Aªº¬°ªí®æ¨Ï¥Îªº OOP ªº°òÃþ, ³o±N¨Ï±o§AªºÀ³¥Îµ{¦¡ªºªí®æ½sµ{¦³¤@­Ó¦nªº°ò¦.

­º¥ý, ©w¸q¤@­Ó´£¨Ñ©Ò¦³¥\¯à©M©â¶H¤èªkªºªí®æ°òÃþ½d¥». ª`·N§AÀ³¸Ó«O¯d§AªºÃþªº ColumnCount Äݩʬ°¹w³]­È, ¤£­n¦bªí®æ°òÃþ¤¤©w¸q¥ô¦ó¦C¼Æ, §_¦b¦bÃþª«¥ó³Q¹ê¨Ò®É±N«ÜÃø³B²z¥¦­Ì. ½Õ¾ãªí®æªº¥~Æ[¬°§AªºÀ³¥Îµ{¦¡¤¤³Ì±`¥Îªº±¡ªp. ¨Ò¦p, ¦b§ÚªºÀ³¥Îµ{¦¡¤¤³q±`§Ú¤£¦bªí®æ¤¤Åã¥Ü°O¿ý¼Ð°O (Record Marks) (¥¦­Ì¦bªí®æ¤£¾Ö¦³µJÂI¥B·í«e°O¿ý¥H¥t¤@ºØÃC¦â°ª«GÅã¥Ü®É·|¤£¥¿½T¦a¨ê·s) ©M§R°£¼Ð°O (ªí®æ³q±`¬O°ßŪªº±±¨î¶µ).

µM«á, ©w¸q¥Î©óªí®æ¦C¤¤ªº±±¨î¶µ. ³q±`¥¦¬O¤@­Ó¤å¥»®Ø, ¦ý§A¥i¯à¤]·Q¨Ï¥Î®Ö¨ú¤è¶ô, ¤U©Ô¦¡¦C¥Ü¤è¶ô, ½s¿è®Ø (¥Î©óÅã¥Ü³ÆµùÄæ¦ì¤º®e) ¥H¤Î, ¤]³\¬O¤@¨Ç¨ä¥L¤£±`¥Îªº¦Û©w¸q±±¨î¶µ. §A±N¥u¦bªí®æ¤º³¡¨Ï¥Î³o¨Ç±±¨î¶µ¦Ó¨M¤£·|¦b¨ä¥L¦a¤è¨Ï¥Î³o¨Ç±±¨î¶µ. ¦b³o¨ÇÃþ¤¤§A¥i¥H§ó¦n¦a²Õ´©Ò¦³ªí®æ¦C¤¤»Ý­nªº¥\¯à. ¥H½Õ¥Îªí®æ°òÃþ¤¤ªº©â¶H¤èªkªº¤è¦¡¨Ó³o¼Ë°µ. ¨Ò¦p, ­n½Õ¥ÎÂùÀ»¤èªk, ¦b¦Uªí®æ¦C¨Ï¥ÎªºÃþªº DblClick ¨Æ¥ó¤¤©ñ¤J¥H¤U¥N½X:

This.parent.parent.eventDblClick(this.parent)

¦b¥H¤W¥Ü¨Ò¥N½X¤¤ eventDblClick ¬Oªí®æ°òÃþ¤¤ªº¤@­Ó©â¶H¤èªk - °£±µ¨ü³æ¤@°Ñ¼Æªº &lparameters& »y¥y¥~¥¦¤£¥]§t¨ä¥L¥N½X (¸Ó°Ñ¼Æ¬O³QÂùÀ»ªº¦Cªº¹ï¶H¤Þ¥Î). ²{¦b§Ú­Ì±N±q¨ä¤¤±o¨ì¤°»ò©O? ¨S¦³³o­Ó§Ú­Ì¤£±o¤£¬°ªí®æ¥ÎÂùÀ»¥N½X¦bªí³æ¤W©w¸q·sªº¤èªk, µM«á±qªí®æ¦U¦C¤¤ªº±±¨î¶µªº DblClick ¨Æ¥ó¤¤²K¥[¸Ó¤èªk½Õ¥Î. ·í§A¦³³\¦hªº¦C®É, ³o¬O¬Û·í¥O¤H¹½·Ðªº. ±Ä¥Î³oºØ·sªº¤èªk§A¥u»Ý­n¦b§Aªºªí®æ°òÃþªº eventDblClick ¤èªk¤¤¼g§Aªº¥N½X. ¦n¤F, ³o¤]­n¨D©ñ¸m§A¦Û¤vªºÃþ¨ì¦C¤¤¨Ó¥N´ÀÀq»{ªº¤å¥»®Ø, ¦ý³o¤Ó®e©ö¤F. ©ñ¤J¥H¤U¥N½X¨ì§Aªºªí®æ°òÃþªº Init ¤èªk¤¤:

LOCAL liColIndex
FOR liColIndex=1 TO this.ColumnCount && ¹M¾ä©Ò¦³ªº¦C
WITH this.Columns(liColIndex)
IF upper(.CurrentControl) == &Text1& && ¥u´À´«¨Ï¥ÎÀq»{¤å¥»®Øªº¦C
.Text1.Visible = .F.
.AddObject(&Text2&,&{GridTextBoxClass}&)
.Text2.Visible = .T.
.CurrentControl = &Text2&
.RemoveObject(&Text1&)
.Text2.Name = &Text1&
ENDIF
ENDWITH
ENDFOR

¤W­z¥N½X¤¤ {GridTextBoxClass} ¬O§Aªºªí®æ¤å¥»®ØÃþªº¦W¦r. ª`·N¦pªG§Aªº«O¦s¸ÓÃþªºÃþ®w¨S¦³¸ü¤J°O¾ÐÅé, §A±N»Ý­n¨Ï¥Î NewObject ¤èªk¨Ó¥N´À AddObject.

¦b¶i¦æ¤F¤W­z²³æªº¹Á¸Õ«á, Åý§Ú­Ì¨Ó²K¥[§ó¦hªºªF¦è. ©w¸q§ó¦hªº³Qªí®æ¦C¤¤ªº±±¨î¶µ½Õ¥Îªº¨Æ¥ó. ²K¥[§ó¦hªº§A¥i¯à¥Î©óªí®æ¤¤ªºÃþ, µM«á¥Î²K¥[»P¦Cªº control source ªº¸ê®ÆÃþ«¬¬Û¾AÀ³ªºÃþªº±±¨î¶µ¨Ó¼W±j´À´«Àq»{±±¨î¶µªº¥N½X(§A¥i¥H¥Î type ¨ç¼Æ¨ÓÀˬd¦Cªº control source ªº¸ê®ÆÃþ«¬, ¦p: type(.ControlSource)). ³q±`®Ö¨ú¤è¶ô¥Î©óÅÞ¿èÄæ¦ì¦Ó½s¿è®Ø¥Î©ó³ÆµùÄæ¦ì.

²{¦b§Ú­Ìªºªí®æ§ó©ö©ó¦bªí³æ¤W¨Ï¥Î¤F, ¦ý¬O... ªí®æ¦CÀY«ç»ò¿ì? ¤@­Ó¦n¿ìªk¬O¬°ªí®æ¦CÀY¼g¤@¨Ç¥N½X¨Ó¦Û°Ê¦a¥Î¦Cªº control source ¨Ó¼g¤J¦CÀYªº caption ÄÝ©Ê. ¨Ò¦p, ¦bÀˬd¤F ControlSource ¬OÄæ¦ì¦Ó¤£¬O¹Bºâ¦¡«á¥Î DBGETPROP(.ControlSource, &FIELD&,&Caption&) ¨Ó±q¸ê®Æ®w¤¤Àò¨úÄæ¦ìªº caption. ªí®æªº Init ¤¤ªº¥Ü¨Ò¥N½X¦p¤U:

LOCAL liColIndex, lcCaption
FOR liColIndex=1 TO this.ColumnCount && ¹M¾ä©Ò¦³ªº¦C
WITH this.Columns(liColIndex)
&& Àˬd¦CÀY¬O¤£¨S¦³³Q¶}µoªÌ³]¸m
IF upper(.Header1.Caption) == &HEADER1&

&& Àˬd control source ¬O§_¬O¯u¥¿ªºÄæ¦ì¦Ó¤£¬O¹Bºâ¦¡
IF &.& $ .ControlSource AND ;
FSIZE(substr(.ControlSource,at(&.&,.ControlSource)+1),.parent.RecordSource) > 0

&& Àˬd§O¦W¬O¤£¬O¦b VFP ªº¸ê®Æ®w¤¤
IF !empty(cursorgetprop(&Database&,.parent.RecordSource)
lcCaption = DBGETPROP(.ControlSource,&FIELD&,&CAPTION&)
ELSE
lcCaption = &&
ENDIF
IF empty(lcCaption)
&& ¨S¦p¨S¦³¨ä¥L±¡ªp¥u«ü©wÄæ¦ì¦W
lcCaption = substr(.ControlSource,at(&.&,.ControlSource)+1)
ENDIF
.Header1.Caption = lcCaption
ENDIF
ENDIF
ENDWITH
ENDFOR

³o¬O³Ì²³æªº¤èªk. ¬°¤F¥¿½T¥Î DBGetProp Àò¨ú·í«e¸ê®Æ®w³]¸m­n¨D·í«e¦³¤@­Ó¥´¶}ªº¸ê®Æ®w¤]¬O¥²¶·ªº.
§A¥i¯à°µ±o§ó¦h. ¨Ò¦p, ¦b¨Ï¥ÎÄæ¦ì¦W§@¬°¦CÀYªº caption ®É, ¹ï¥¦­Ì¶i¦æ¤@¨Ç½ÆÂøªºÂà´«¥H¨Ï¥¦­Ì¬Ý°_¨Ó§ó¦n¤@¨Ç, ¹ïÄæ¦ì¦W¨Ï¥Î©R¥O¬ù©w. §@¬°©R¦W¬ù©wªº¥Ü¨Ò¦p¤U: ¦b¸ê®Æ®w¤¤©Ò¦³°£¥DÃöÁä¦r¬q¥~ªºÄæ¦ì¥H¸ê®ÆÃþ«¬¦r¤¸¬°­º½X. ¥DÃöÁä¦r¤¤¥Î &ID& ¨Ó¼ÐÃÑ¥¦. ¦]¦¹§Ú­Ì¥i¥H±qÄæ¦ì¦W¤¤²¾¥h²Ä¤@­Ó¦r¤¸§@¬°¦CÀYªº Caption¡]·íÄæ¦ì¦W¤¤¤£¥]§t &ID_& ©Î &_ID& ©Î¥¦¥»¨­¨Ó¬O &ID& ®É). µM«á¥Î STRTRAN ´À´«©Ò¦³¤U¹º½u¬°ªÅ®æ¨Ã¥Î &PROPER()& ¨ç¼Æ¨ÓÀò±o³Ì²×µ²ªG. ±Ä¥Î¸Ó¤èªk &cCust_Name& ±N¦b¦CÀY¤¤Åã¥Ü¬° &Cust Name&. §A¥i¥H¬°Äæ¦ì¨Ï¥Î¨ä¥Lªº©R¦W¬ù©w, ¬Ý¬Ý¬O§_¥i¥H§ï¶i¦CÀYªºÅã¥Ü. ¦pªG§A¦³ StoneField Database Toolkit (ª`:§Y²³©Ò©Pª¾ªº SDT) ©Î§A¦Û¤vªº¸ê®Æ³o¨å, §A¥i¥H¬d¸ß¸ê®Æ¦r¨å¨ÓÀò±oÄæ¦ìªº caption ©M¥ô¦ó¨ä¥Lªº§A·QÀ³¥Î©ó¦CÀYªº©M¥Î©óÅã¥Ü¸ê®ÆªºÄæ¦ìÄÝ©Ê. ¦pªGÄæ¦ì¨Ó¦Ûµø¹Ï, §A¥i¥H±qªí¤¤Àò¨ú¥¦ªº·½Äæ¦ì¨ÓÀò¨ú¥¦ªºÄÝ©Ê. §A¥i¥H±qµø¹ÏÄæ¦ì¤W¥Î "DBGETPROP(.ControlSource, &Field&, &UpdateName&)" ¨Ó±qªí¤¤Àò¨úÄæ¦ì¦W. ³o¶È¾A¥Î¤_¥i§ó·sÄæ¦ì, §@¬°¹Bºâ¦¡¥Í¦¨ªºÄæ¦ì¥Î¤W­z¤èªkªð¦^ªºµ²ªG±N¬O¤@­ÓªÅ¦ê.

¦n¤F, ¹ï©ó¦CÀYªº captions - §A¥i¥H¦bªí®æ°òÃþªº Init ¤¤³]¸m¥¦­ÌµM«á§Ñ±¼¥¦­Ì. ¦ý¬O, ÁÙ¦³¤@¨Ç¦³¥Îªº®·®»¦CÀYªº Click ©M¨ä¥L¨Æ¥ó¨Æ±¡. ¦b©ö©ó³Ð«Øªí®æ¦C±±¨î¶µÃþ®É, ³Ð«Ø header Ãþ¬O¬Û·íÃø³B²zªº. §A¥i¥H¥Î¬Û¦üªº¤èªk¦b§Aªºªí®æ°òÃþ¤¤¬°¦CÀY²Õ´¨Æ¥ó¨t²Î; ¦ý¬O, §A¥i¥H¦bµ{¦¡Àɤ¤¥Î DEFINE CLASS µ²ºc¥H²³æªº¤èªk©w¸q§A¦Û¤vªº header Ãþ, ¦p¤U©Ò¥Ü:

DEFINE CLASS MyHeaderClass AS HEADER
PROCEDURE DblClick
This.parent.parent.eventHeaderDblClick(this.Parent)
ENDPROC
ENDDEFINE

¦pªG§A¼ô±x VCX Àɵ²ºc, §A¥i¥H¦b VCX ®w¤¤²K¥[¨â±ø°O¿ý¨Ã«ü©w¨ä°òÃþ¬° header ¨Ó³Ð«Ø header Ãþ. ¦ý¬O³o¼Ë¤@¨Ó, §A°£¤F¶H½s¿è VFP ªí¤@¼Ë½s¿è¥¦¥H¥~, ±N¤£¯à¦A¥H¨ä¥L¤è¦¡½s¿è¥¦. ¦]¦¹³Ì¦nÁÙ¬O­º¥ý¦b PRG Àɤ¤©w¸q¥¦¥Î©ó¶}µo©M½Õ¸Õ. ³Ì«á, ·í¥¦´ú¸Õ§¹¦¨«á, ¦pªG»Ý­nªº¸Ü§A¥i¥H±q PRG ¤¤²¾¹B¥¦­Ì¨ì VCX ¤¤. ¬°¤°»ò§A·|­n¥¦­Ì¦b VCX Àɤ¤ªº²z¥Ñ¬O²³æªº - §A¥i¥H¦b³]­p®É±q±±¨î¶µ¤u¨ãÄæ©ì©ñ¥¦¨ìªí®æ¦C¤¤, ³o¼Ë±N¦b³]­p®É¥H·sªº header Ãþ´À´«Àq»{ªº header. §Ú¤£ª¾¹DÁÙ¦³¨ä¥Lªº²z¥Ñ¤F... ¹ï©ó¹B¦æ®É, ¥H¤U¥N½X»Ý­n²K¥[¨ì«e­zªº¹M¾ú¥N½X¤¤ (§ïÅÜÀq»{±±¨î¶µ¬°§A¦Û¤vªº±±¨î¶µ). ¤]¬°¦CÀYÃþ²K¥[¥¦­Ì:

IF upper(.Header1.Class) == &HEADER& && ¶È´À´«Àq»{ªº header Ãþ
lcOldCaption = .Header1.Caption && «O¦s caption ¥HÀ³¥Î¥¦­Ì¨ì·sªº header
.AddObject(&Header2&,&MyHeaderClass&) && ³o±N¦Û°Ê²¾°£­ì¦³ªº header
.Header2.Name = &Header1&
.Header1.Caption = lcOldCaption
ENDIF

§A¥i¯à¤]·Q½Æ»s­ìªí®æ¦CÀYªº¨ä¥LÄݩʨì§A¥Î·sÃþ³Ð«Øªº·sªº¦CÀYª«¥ó. ¤]½Ðª`·N¨ì¤£»Ý­n²¾°£­ì¦³ªº¦CÀY¦]¬° VFP ·|¦Û°Ê²¾°£¥¦ - ¨Ó«O«ù¦C¤¤¥u¦³¤@­Ó¦CÀY. ¹ï©ó AddObject ©w¸q¦CÀYÃþªº PRG ÀÉ¥²¶·¨Æ¥ý¥Î SET PROCEDURE TO ?ADDITIVE ©R¥O¸ü¤J°O¾ÐÅé, ¦ý¬O§A¥i¥H¨M©w¥Î¦Cªº NewObject ¤èªk.

¦b¤@¯ë±¡ªp¤U, «ØÄ³§â´À´«ªí®æ¤¤ªº±±¨î¶µ¬°§A¦Û¤vªºÃþªº¥N½X²¾°Ê¨ì¤@­Ó³æ¤@ªºªí®æªº¤èªk¤¤. ¬°¤°»ò»Ý­n³o¼Ë©O - ªí®æ­«ºc. ¤Ö¼Æ³õ¦X¤Uªí®æ­«ºc¬O¥²»Ýªº. ¦bªí®æ­«ºc«á§A¥i¥H½Õ¥Îªí®æªº¤èªk¨Ó¦A¦¸³]¸m§A¦Û¤vªºÃþ, ¦]¦¹§Y¨Ï·í§A¦b¬Û¦Pªºªí®æ±±¨î¶µ¤¤Åã¥Ü¤£¦Pªº¸ê®Æ®É, ¥¦¤´µM·|¥H¬Û¦Pªº¤è¦¡¹B¦æ. ³o¬O¦]¬°, ¾¨ºÞ¶i¦æ¤F­«ºc, ¨Æ¥óªº¥D­n¥N½X¬O¦bªí®æ±±¨î¶µªº¤èªk¤¤, ¦]¦¹¦b­«ºc«á¥¦­Ì¤£·|¥á¥¢. §ó¦hªº¬O, ¦b§A¹B¦æ¤F´À´«ªí®æ±±¨î¶µ¬°§A¦Û¤vªºÃþªº¥N½X«á, ªí®æ¤´µM¨ã³Æ©Ò»Ýªº¥\¯à. ¦]¦¹¥N´À¥Î¤£¦Pªº¸ê®Æ·½³Ð«Ø¦h­Óªí®æÃþ¦b¦P¤@­Óªí³æ¤¤¨ÓÅã¥Ü³o¨Ç¤£¦P¸ê®Æ·½, §A²{¦b¥i¥H©ñ¸m¤@­Ó³æ¤@ªºªí®æ¨Ã¥Î¤£·|¥á¥¢¤Ó¦h¥\¯àªº¤èªk¨Ó­«ºc¥¦; µM«á¬°¨C¤@­Ó data source ¨Ó³Ð«Ø·sªºªí®æÃþ¨Ã¼W±j¤£¦P¼Æ¶qªº record sources.

¤£¦nªº¨Æ±¡¬O¦CÀYªº Click ¨Æ¥ó¤]·|¦bªí®æ¦C resize ©Î²¾°Ê®Éµo¥Í. ¦C¨ã¦³ Moved ©M Resized ¨Æ¥ó, ¦ý¬O... ·í§A¥Î¦Û¤vªº¦CÀYÃþ´À´«¤FÀq»{ªº¦CÀYÃþ«á, «ÜÃø¨Ï¥Î¦Cªº³o¨Ç¨Æ¥ó, ¦Ó¥B¥¦­Ìªº¹B¦æ³t«×·|ÅܺC. ¦]¦¹¬Ý¨Ó¨Ï¥Î¦CÀYÃþ¨Ã¤£¦n. ¦ý¬O¦³¦nªº¸Ñ¨M¿ìªk. ¦b§Aªº·sªº¦CÀYÃþ¤¤¤ñ¸û OldColumnWidth ©M OldColumnOrder ÄÝ©Ê. µM«á¦b¦CÀYªº Init ¤¤³]¸m¥¦­Ì¬°¦Cªº Width ©M ColumnOrder Äݩʪºªì©l­È. ¦b Click ¨Æ¥ó¥N½X¤¤¤ñ¸û§Aªº¦CÀYÃþªº·í«eªº Width ©M OldColumnWidth ÄݩʭȤΠColumnOrder ©M OldCoumnOrder ÄݩʭÈ. ·í­È»P­ì­È¤£¦P®É, «h¦C¬O resized ©Î moved ¤Fªº. ¦b resized ®É, ¥u¥Î·í«e¦Cªº OldColumnWidth ¨Ó§ó·s¥¦. ·í¦C moved ®É - §A»Ý­n¬°¦CÀY§ó·sªí®æ¤¤ªº©Ò¦³¦Cªº OldColumnOrder ÄÝ©Ê. ¦n¤F, ¦b¤@©w±¡ªp¤U¦Cªº¼e«×©M¦C§Ç²{¦b¥i¥H¥Î½sµ{¤èªk¨Ó­×§ï¤F, ³Ì¦n¬O¤£­nª½±µ³o¼Ë°µ, ¦Ó¬O¨Ï¥Îªí®æÃþ¤¤ªº¤@­Ó¦Û©w¸q¤èªk½Õ¥Î, ¨Ò¦p, &ChangeColumnWidth(ColumnNumber)&, ©Î &ChangeColumnOrder(ColumnNumber)&. ±Ä¥Î¦¹¤èªk§A¥i¥H«OÃÒ OldColumnWidth ©M OldColumnOrder Á`¬O»P¦Cªº³]¸m¦P¨B. ¦Ó¥B²{¦b§A¦³¾÷·|¥Î¤W­z¤èªk¦b¦C²¾°Ê©Î resize ®É¨Ó¿Eµo§Aªºªí®æÃþªº¦Û©w¸q¤èªk¤¤ªº¥N½X¤F - ¨S¦³¯u¥¿±µÄ²¨ì¥ô¦ó¦Cªº¤èªk!

¬°¤F¥[§Ö¿é¤J¨ì¦Cªº ControlSource ¤¤, §A¥i¥H¥Î²³æªº¤èªk. ¦b§Aªºªí®æÃþ¤¤©w¸q¤@­ÓÄÝ©Ê (ControlSourceList) ¥¦¬O¥Î©ó«O¦s¦U¦C¨Ï¥ÎªºÄæ¦ì¦Wªº¥H¤À¸¹¤À¹jªº¦Cªí. ¨Ï¥Î¤À¸¹¦Ó¤£¬O³r¸¹¬O¦]¬°§A¥i¯à·|¦b¤@¨Ç control source ¤¤¨Ï¥Î¥]§t³r¸¹ªº¹Bºâ¦¡. ¦b Init ¨Æ¥ó¤¤¤À¸Ñ¸Ó¦ê¨ì¦UÄݩʤ¤(¦pªG¥¦¤£¬°ªÅ), µM«á¥Î¦ê¤¤ªº¦Cªí¤¤ªº¶µ¶ñ¥R¦U¦Cªº ContolSource ÄÝ©Ê. ª`·Nªí®æªº¥ô¦ó¨ê·s±N¤£·|¥ý©ó¸Ó¾Þ§@, ¦]¬°ªí®æªºªì©l¤Æ¦bÀq»{±¡ªp¤U¨Ï¥ÎÄæ¦ì¦bªí¤¤ªºª«²z¶¶§Ç (¦Cªº­«¸j©w - °Ñ¨£¤å³¹«e­±ªº´y­z). ·í§Aªºªí®æ¤¤¦³¦Û©w¸q±±¨î¶µ®É, ¥i¯à¦C·|¨Ï¥Î¹ï©ó¸Ó±±¨î¶µ¨Ó»¡¬O¤£¥¿½TªºÄæ¦ìÃþ«¬¨Ã¦b¨ê·s®É³y¦¨¤£¥¿½Tªº¸ê®ÆÃþ«¬¿ù»~ (Refresh ·¥¤Ö¦bªí®æªº Init ¨Æ¥ó¤¤µo¥Í, ¦ý¬O, ¦b½ÆÂøªºÃþ¥N½X¤¤¦³®É¥i¯à·|µo¥Í). ¦n¤F, ¦b³]­p®ÉÄÝ©Êªí¤¤ªºÄݩʪø«×­­¨î¬O 255 ¦r¤¸, ¦]¦¹¦bªí®æ¦³³\¦h¦C®É±N¤£¯à³o¼Ë°µ. ¦b¦¹±¡ªp¤U·í§A¦bªí³æ¤¤¨Ï¥Îªí®æ®É¥i¥H¦bªí®æªº Init ¤¤¥Î¥N½X¨Ó«ü©wªøªº¦ê¨ìÄÝ©Ê, µM«á¥Î DODEFAULT() ¨Ó½Õ¥Î¤÷Ãþ¥N½X. §A¤]¥i¥H¦b¦ê¤¤¤£¥ÎÄæ¦ì¦W«eªº§O¦W¨Ó¸`¬ùªÅ¶¡; §O¦W±N³Qªí®æ¦Û°Ê«ü©w. ¥ô¦ó±¡ªp¤U, ¦b ControlSource ¤¤ªº¹Bºâ¦¡¤¤ªºÄæ¦ì¦W¥²¶·¥]¬A§O¦W.

³Ì«á, »¡»¡¤£¦PÃþ«¬ªº record source. ·í record source ¬O§O¦W®É, ¨S¦³°ÝÃD. ¦ý¬O·í§A¥´¶}¤@­Ó¥Hªí¦W¥H¼Æ­È¶}©lªºªí record source ®É, VFP ·|¥H¥t¤@­Ó§O¦W¨Ó¥´¶}¥¦. ªí®æ¤¤ªº RecordSource ¤¤ªº SQL SELECT »y¥y¤]¦³Ãþ¦ü±¡ªp. ©¯¹Bªº¬O, ¦³¤@ºØÂ²³æªº¤èªk¨ÓÀˬdªí®æ¨Ï¥Îªº§O¦Wªº¥¿½T©Ê. §O¦W¥i¥H¥Î¥ô¦ó¦Cªº ControlSource ÄݩʨÓÀˬd. ªí®æ·|¦Û°Ê²K¥[ "{alias}." ¨ì©Ò¦³¦C¤¤ªº control sources Äæ¦ì«e. §A¥i¥H±q¦Cªº control sources ¨ú¥X§O¦W(·í¥¦­Ì¬O²³æ®æ¦¡¦Ó¤£¬O½ÆÂø¹Bºâ¦¡®É) . (¦p¦óÀˬd control source ¬O§_¬O¤@­ÓÄæ¦ì¤Þ¥Î§Ú¤w¸g»¡¹L¤F.) ¦n¤F, ·í­n¥Îªí®æÅã¥Ü¤@¨Ç¥Î SET RELATION aliases ÃöÁpªºªí®É, ³o±N¤£¯à¤u§@, ¦ý¬O, Åã¥Ü¦bªí®æ¤¤ªºÃöÁpªí³q±`¨Ï¥Î§O¦W§@¬° record source Ãþ«¬. ¨º»ò, ¦b§Ú­Ìªºµ{¦¡¤¤¥Î¤@­Ó¦Û©w¸qÄÝ©Ê (MainAlias) ¨Ó¥N´À RecordSource, ¥Î¥¦¨Ó«O¦sªí®æ¨Ï¥Îªº¯u¹êªº§O¦W. §Ú­Ì¤]ÁÙ©w¸q¤F RecordSource_Assign ¥N½X¨Ó®·®» record source ªº§ïÅܨçó·s§Ú­Ìªº¦Û©w¸qÄÝ©Ê.


½T¤Á©w¦ìªí®æ¦CÀY©M³æ®æ

ªí®æ¤¤ªº±±¨î¶µªº¥\¯à¥i¯à»Pªí®æ¥~ªº±±¨î¶µªº¥\¯à¤£¦P. ¨Æ¹ê¤WÃö©ó³o¤@ÂI VFP ¦³¤@¨Ç¤¾¾l, ­P¨Ï¤@¨Ç¥\¯à¦bªí®æ¤¤¤£¯à¥¿½T¹B¦æ. §Ú¤£¥´ºâ¦b³oùؤ@¤@¦CÁ|, ¦ý±N»¡©ú¤@ºØ¦nªº¤è®× - §â±±¨î¶µ©ñ¦bªí®æ¥~¨Ã¦bªí®æ³æ®æ¤WÅã¥Ü¥¦¨Ó¶i¦æ¸ê®Æ½s¿è. ±Ä¥Î¸Ó¤èªk±±¨î¶µ±N¶H³æ¿Wªº±±¨î¶µ¤@¼Ë½s¿è¸ê®Æ, ¦Ó¤£·|¶Hªí®æ¦C¤¤ªº±±¨î¶µ¤@¼Ë¦³¤@¨Ç¥\¯à¤£¯à¨Ï¥Î. ²{¦b¹ï¨C¤@¦C±Ä¥Î¦¹¤èªk¦Ó§A±N¤£¦A¨ü¨ìªí®æªº­­¨î. ¦ý¬O, °ÝÃD¬O½Æ»\¦bªí®æ³æ®æ¤Wªº±±¨î¶µªº¬Û¹ï¦ì¸m. ³o´N­n¨D­pºâªí®æ¤¤ªº³æ®æªº·Ç½T¦ì¸m¥H«K¥Î§Aªº±±¨î¶µ¨Ó½Æ»\¥¦. ³o­Ó¨Æ±¡¤£¤Ó¦n°µ, ¦C§Ç¥i¯à§ïÅܤF, ªí®æ¥i¯à±²°Ê¤F, ¶ÈÀò±oµJÂIªºªí®æ¥i¥H­pºâ¦æ¸¹µ¥µ¥. ¦b³oùاڻ¡©ú¤@ºØ¦p¦ó­pºâ¦ì¸mªº¤@¯ë¤èªk.

¥t¤@­Ó­n¨D­pºâ·Ç½T¦ì¸mªº²z¥Ñ¬O©ñ¸m±Æ§Ç¼Ð°O¨ìªí®æ¦C¤W¨Ó«ü©úªí®æ¬O«ö­þ¤@­Ó¦C¶i¦æ±Æ§Çªº. ¹ï©ó³o¤@ÂI°¦­n¨D­pºâ¦Cªº¦ì¸m.

¦ì¸mªº­pºâ±N¦bªí®æ±²°Ê«á, ¤@¨Ç¦C¼e§ïÅÜ«á, ¤@­Ó¦C²¾°Ê«á, °O¿ý¼Ð°O©M§R°£¼Ð°Oªº¥iµøª¬ºA§ïÅÜ«á, ¦C°ª©M¦æ°ª§ïÅÜ«á, ªí®æ³Q¤À³Î«á (ªí®æªº Partition Äݩʳ]¸m¬°«D¹s­È). §A¥i¥H®·®»³o¨Ç¨Æ¥ó:

* ªí®æ±²°Ê¦b Scrolled ¨Æ¥ó¤¤, ¦pªG¬O¥ÎÁä½L²£¥Íªº¦Û°Ê±²°Ê¦b AfterRowColChange ¨Æ¥ó¤¤. ¦]¦C²¾°Ê³y¦¨ªº±²°Ê - ®·®»¦C²¾°Ê©Î§ïÅܥΠLeftColumn ÄÝ©Ê («O¦s¥¦­Ìªº­ì­È). ¨ä¥L­ì¦]³y¦¨ªº¦Û°Ê±²°Ê«h¬Û·í¤Ö¨£.
* ¦Cªº²¾°Ê©M¼e«×½Õ¾ã¦b¦Cªº¨Æ¥ó¤¤©Î¥Î¥»¤å¤¤«e­±´y­z¹Lªº¤èªk
* °O¿ý¼Ð°O©M§R°£¼Ð°Oªº§ïÅÜ, ¥H¤Î±²°ÊÄæªº¥H½sµ{¤è¦¡ªº§ïÅÜ; §A¥i¥H¦bªí®æÃþ¤¤©w¸q¬ÛÀ³Äݩʪº Assign ¤èªk¨Ó®·®»¥¦­Ì
* Partition, RowHeight ¤Î HeaderHeight §ïÅÜ - ¦bªí®æªº MouseUp ¨Æ¥ó¤¤¥ÎÃþ¦ü©ó«e­zªº¦CÀY¤èªk¨Ó®·®»¥¦­Ì - «O¦s­ì­È¨ìªí®æÄݩʤ¤¨Ã¦b MouseUp ¨Æ¥ó¤¤¥Î·s­È¤ñ¸û¥¦­Ì¥H½T©w¬O§_µo¥Í¤FÅܤÆ.

¦]¬°­n¦b³\¦h¦a¤è­pºâ¨Ó§ó·s±±¨î¶µªº¦ì¸m, ¦b­pºâ¦Cªº¦ì¸m®ÉÀ³¸ÓºÉ¥i¯à¦a§Ö; §_«h¦bªí®æ¤¤ªº¦C¼Æ¤Î­pºâ¦ì¸mªº±±¨î¶µ«Ü¦h®É·|¤ñ¸ûºC.

¥H¤U¥N½X¤¤ªººtºâªkÀˬd¦Cªº¤j¤p©M¥kÃäªu. ¥¦¬O³Ì§Öªº¨Ã¸gªø´Á¨Ï¥Îªº¤èªk. ¥¦­pºâªí®æ°£ split ¥~ªº©Ò¦³ªí®æ³]¸m. ¥N½X¤¤ªºª`ÄÀ»¡©ú¤Fºtºâªk.

Procedure ColumnRightPosition
* returns position in pixels of right edge of column relative to the grid rectangle area
* returns 0 if column is outside of visible area of grid
* parameters:
* toColumn - reference to the column for which position should be calculated
lparameters toColumn

with this && "this" here is a grid reference
local lnIndex, lnColumn, lnColumnCountToLeft, lnPosition, lnVAreaWidth
local array laColumnsOrder(.ColumnCount)
&& fill array by column order numbers with column indexes in a single
&& array column. Note that we get only columns that could be visible and skip
&& columns that are not visible for sure (that have ColumnOrder= .LeftColumn
m.lnColumnCountToLeft = m.lnColumnCountToLeft + 1
m.laColumnsOrder[m.lnColumnCountToLeft] = ;
.Columns(m.lnColumn).ColumnOrder * 10000 + m.lnColumn
endif
endfor
m.lnPosition = 0

if m.lnColumnCountToLeft >0
&& truncate array from rest of unnessesary values
dimension laColumnsOrder(m.lnColumnCountToLeft)

&& Main trick here - use asort() VFP function. It will quickly
&& change order in array from column index to the order by
&& ColumnOrder. This will help us to reference each column
&& after LeftColumn in their visibility order.
asort(laColumnsOrder)

&& scan columns in the visibility order and increment width (result)
&& until we reach our column or right edge of the grid.
m.lnVAreaWidth = .Width - iif(.RecordMark, 10, 0) + ;
iif(.DeleteMark, 8, 0) + ;
iif(.ScrollBars>1,sysmetric(5),0) && Width of the visible portion of grid
&& note we now go through array of columns starting from left visible in order
&& of columns, i.e. first value appropriate to column .LeftColumn
for m.lnIndex = 1 to m.lnColumnCountToLeft
m.lnColumn = m.laColumnsOrder[m.lnIndex] % 10000
m.lnPosition = m.lnPosition + .Columns(m.lnColumn).Width + 1
if m.toColumn = .Columns(m.lnColumn) or m.lnPosition > m.lnVAreaWidth
&& so we will no need to scan remained columns
exit
endif
endfor

&& if we reached required column
if m.toColumn = .Columns(m.lnColumn)
&& if the column is last, its width is cut to fit into grid visible area
m.lnPosition = min(m.lnVAreaWidth,m.lnPosition)
if m.lnPosition > 0
&& add left grid edge controls width if they are shown
m.lnPosition = m.lnPosition + iif(.RecordMark, 10, 0) +;
iif(.DeleteMark, 8, 0)
endif
else
m.lnPosition = 0
endif
endif
endwith
m.toColumn = &&
return m.lnPosition

·í«eªí®æ¦æªº¦ì¸m¥u¦³¦bªí®æÀò±oµJÂI®É¥i¥HÀˬd¨ì. ³o¬O¦]¬°§Ú­Ì¥u¯à¥Îªí®æªº RelativeRow Äݩʨӭpºâ¥¦, ·íªí®æ¤£¾Ö¦³µJÂI®É­pºâ­ÈÁ`¬O¹s. ³oºØ¤èªk§ó²³æ¥B§ó¾A©ó©ñ¤J³æ­Óªº¹Bºâ¦¡:

* ­pºâªí®æ¦æ¬Û¹ï©óªí®æ¯x§Î°Ï°ìªº top ¦ì¸m, ³æ¦ì¬O pixels
* ¦pªG¦ì¸m¦b¥iµøªº°Ï°ì¥~«hªð¦^¹s
Local lnRow
m.lnRow = this.RelativeRow
m.lnRow = this.RelativeRow
if m.lnRow=0
return 0
esle
return this.HeaderHeight + this.RowHeight*(this.RelativeRow-1)
endif

ª`·N¬°¤F±o¨ì¥¿½T¥i¾aªº­È, ³B²z¤¤ªºªí®æÀò±oµJÂI RelativeRow ÄÝ©ÊÀ³¸Ó³X°Ý¨â¦¸.
¤U¹ÏÅã¥Ü¤Fªí®æÄݩʤΥ¦­Ìªº¤Ø¤o. ¦³§U©ó§ó¦n¦a²z¸Ñ¥Ü¨Ò¥N½X.


ªí®æ³Z¬

ªí®æªº Format Äݩʳ]¸m¬° &Z& ®É, ·í Sparse=.T. ®É¤£Åã¥Ü¹s­È

¬O¤£¬O¹ïªí®æ¦C¤¤Åã¥Üªº³ÆµùÄæ¦ì¬° &Memo& ·P¨ì«Ü¹½­Â? §A¥i¥H¥ÎÃþ¦ü©ó "PADR({MemoField},200)" ³o¼Ëªº¹Bºâ¦¡¨ÓÅã¥Ü³ÆµùÄæ¦ì. ¤]¥i¥H¦b¦Cªº sparse Äݩʳ]¸m¬° .F. ®É¦b¦C¤¤¥Î EditBox ¨Ó¤¹³\¹ï¥¦­Ì¶i¦æ½s¿è, EditBox ¥i¥H¤ñ¥Î¹Bºâ¦¡§@¬°¦Cªº ControlSource ®ÉÅã¥Ü§ó¦hªº¤å¥». ¦bªí®æ¤¤ªº EditBox ¤¤±²°ÊÄæ¶È¦bªí®æªº RowHeight Äݩʤj©ó¤T¦æ¤å¥»ªº°ª«×®É¤~·|Åã¥Ü.

¦bªí®æ¥i¥H§¹¾ã¦aÅã¥Ü©Ò¦³¦C¦Ó¨S¦³¾î¦V±²°ÊÄæ®É, §A¥i¥H³]¸m©Ò¦³¦Cªº¼e«×¤p¤@¨Ç¨ÓÅý©Ò¦³ªº¦C§¹¥þÅã¥Ü¦bÅã¥Ü°Ï¤¤¥HÁ×§K·í³Ì«á¤@¦C±o¨ìµJÂI®Éªí®æªº¦Û°Ê±²°Ê.


ªí®æÄµ§i

¦b¨Ï¥Î¦æ½w¦s®É¨ê·sªí®æ·|³y¦¨¸ê®Æªº¦Û°Ê´£¥æ(Update). ³o¬O¦]¬°¦b VFP ¤º³¡, ªí®æ·| scan §O¦W¤¤ªº­nÅã¥Üªº°O¿ý, ³o·|³y¦¨°O¿ý«ü¼Ðªº²¾°Ê, ¨Ã¦]¦¹³y¦¨¸ê®Æªº¦Û°Ê´£¥æ. ¦b¥Îªí®æ¤u§@®É, §O¦WÀ³¸Ó¨Ï¥Îªí½w¦s¼Ò¦¡.

¦b¯S©w±¡ªp¤U, ·í¦Cªº ControlSource ªð¦^ªº¦r¤¸ªø©ó 200 ¦r¤¸¥B¦Cªº sparse Äݩʳ]¸m¬° .T. ®Éªí®æ·|±Y¼ì©Î¤£¥¿±`¹B¦æ. ¦b¦¹±¡ªp¤U¥ÎÃþ¦ü©ó "PADR(...,200)" ³o¼Ëªºªí¹F¤u§@¬°¹Bºâ¦¡¨ÓÅã¥Ü¸ê®Æ. ¦pªG­n¦b³o¼Ëªº±¡ªp¤U½s¿è¸ê®Æ, ¦bªí®æ¦C¤¤¥Î EditBox ¨Ó¥N´À TextBox ¨Ã³]¸m¦Cªº Sparse Äݩʬ° .F.. ·í SET DELETED ¬° ON ®É, ³Q§R°£ªº°O¿ý¥u¦³¦b°O¿ý«ü¼Ð²¾°Ê«á¤~·|¤£Åã¥Ü¥X¨Ó. ¦b§R°£«á¦pªG°O¿ý«ü¼Ð¦b³Q§R°£ªº°O¿ý¤W®É, VFP «O«ù°O¿ýªº¥i¨£, ¥]¬A¦bªí®æ¤¤.


VFP ¤¤ªºªí®æ ²Ä¤T³¡¤À


¦b¸Ó³¡¤À¤¤, §Ú±N´y­zÃö©ó³æÀ»¦CÀY®Éªí®æ±Æ§Ç, ªí®æªº±Æ§Ç¼Ð°O («ü¥Ü²Å) ©MÂùÀ»¦CÀY®ÉÅýªí®æ¦Cªº¼e«×»P¦C¤¤ªº¸ê®Æ¼e«×¤@­P. «ö·ÓºD¨Ò, ±N¥]¬A¤@¨Ç³Z¬©Mĵ§i.

³æÀ»¦CÀY±Æ§Ç

¤W­±´£¨ìªº³æÀ»¦CÀY±Æ§Çªí®æ©M¦Cªí¤¤ªº¶µ¬O«Ü¬y¦æªº°µªk. ¸Ó¥\¯à¦b¦³¦¨¦Ê¤W¤dªº¦æ¦Cªí¤¤·j¯Á¬Y¨ÇªF¦è®É¯S§O¦³¥Î. VFP ªºªí®æ¨S¦³¤º¸m¸Ó¥\¯à, ¦ý¥i¥H½sµ{¤è¦¡¨Ó¹ê²{.

¦³¦hºØ²{¦sªº¤èªk¨Ó¹F¨ì¦¹¥Øªº. §Ú­Ì±N¤£¥]§t©Ò¦³³o¨Ç¤èªk, ¦Ó¥u¬O»¡©ú³Ì±`¥Î¹ï©ó³Ð«Ø¨ã¦³±Æ§Ç¥\¯àªºªí®æÃþ¦³¥Îªº¤èªk. ³o·N¨ýµÛ´y­zªº¤èªk¤¤±N¥h±¼¥¦­Ì¤¤¤Ó½ÆÂø©M¤£±`¥Îªº³¡¤À. «ØÄ³±N¦¹¥\¯à§@¬°§AªºÀ³¥Îµ{¦¡¤¤ªºªí®æ°òÃþªº¤@³¡¤À³o¼Ë§A¥i¥H¦b¦h­ÓÀ³¥Îµ{¦¡¤¤­«¥Î¥¦­Ì.

­º¥ý, ·Ç³Æ¤@­Ó¦CÀYªº Click ¨Æ¥ó¨Ó¦b¥¿½Tªº®É­Ô¿Eµo±Æ§Ç¥\¯à. Click ¨Æ¥ó¤]·|¦b¦C­«½Õ¤j¤p©M²¾°Ê®É¿Eµo, ¦]¦¹§A»Ý­n¨Ï¥Î¤@¨Ç¯S®íªºÃþ¦ü¤_¥»¤å«e­±´y­z¹Lªº¤èªk - ¨Ï¦CÀYÃþ¸òÂܦCªº­«½Õ¤j¤p©M²¾°Ê¨Ó°Ï§O¥¦¥u¬O¦b³æÀ»¦CÀY. ·íµM, ³o±N­n¨Dªí®æ¤¤©Ò¦³¨ä¥LªºªF¦è¤ä«ù¨ÃºûÅ@¥Î·sªº¦CÀYÃþ´À´«Àq»{ªº¦CÀYÃþ. µL½×¦p¦ó¦pªG§A·Q¦b¥ô¦óªí®æ¤¤¨Ï¥Î±Æ§Ç¥\¯àªº¸Ü³o¬O¥²»Ýªº. ·í¦C¬O¥i½Õ¾ã¤j¤pªº®É­Ô, ³æÀ» resize °Ï°ì¦Ó¤£½Õ¾ã¦Cªº¼e«×¤]·|³Q®·®»¨ì - ¦]¦¹¦b·Æ¹«ªº´å¼Ð¬O resizeg ½bÀY¬O¹ï¦C¶i¦æ±Æ§Ç¤£¬O¤@­Ó¦nªº¿ìªk, ³o·|§â¥Î¤á·d½k¶î (§Ú­Ì¤]¬°¥»¤åµy«á½×¤Îªº¥t¤@­Ó¥\¯à«O¯d³o¤@ÂI). ªí®æ¦CÀYªº resize °Ï°ì¬O 11 ¶H¯À¼e (¦CÀY½uªº¥ªÃä 6 ¶H¯À 4 ¶H¯À¥kÃä). ·í§A³æÀ» resize °Ï¦Ó¨S¦³¶i¦æ resize ®É, ¶ÈºÞ·Æ¹«¦¹®É¤w¸g¦b¤U¤@­Ó¦CÀY¤W, ·Æ¹«©M³æÀ»¨Æ¥ó¶È¦b¥i½Õ¼e«×ªº¦CÀY°Ï³Q¿Eµo. ¦b¥Ü¨Ò¤¤§A¥i¥H¬Ý¨ì¦b¦CÀYÃþ¤¤¬O¦p¦ó¶i¦æ¸òÂܪº - ¨Ï¥Î MouseUp ¨Æ¥ó§Ú­Ì±o¨ì·Æ¹««ü¼Ðªº®y¼Ð¨ÃÀˬd¥¦¬O§_¥u¬O¦b½Õ¾ã°Ï°ì¶i¦æ¤F³æÀ». ¦pªG¬O, ³]¸m¯S®íªº¼Ð»x³o¼Ë¦b Click ©M DblClick ¨Æ¥ó¤¤§Ú­Ì¥i¥HÀˬd·Æ¹«¬O§_¬O¦b½Õ¾ã°Ï.

¤@¦ý¯Âºéªº³æÀ»³Q±q©Ò¦³¨ä¥L°Ê§@¤¤¤ÀÂ÷¥X¨Ó«á, °õ¦æ±Æ§Ç. ¥¦¥Ñ¤T³¡¤À²Õ¦¨ - ±Æ§ÇºÞ²z¾¹, ±Æ§Ç±`¦¡©M±Æ§Ç«áªºªí®æ¨ê·s.

±Æ§ÇºÞ²z¾¹¸òÂÜ·í«e­n±Æ§Çªº¬O­þ¤@­Ó¦C, ¬°±Æ§Ç©w¸qÄÝ©ÊÃö«O¦s¤@­Ó·í«e±Æ§Çªºª¬ºA. ­n³o¼Ë°µ, ¨Ï¥Î¤F¥H¤UÄÝ©Ê:

Grid.SortedColumn - ¥]§t·í«e±Æ§Ç¦Cªº¯Á¤Þ¦pªG¨S¦³±Æ§Ç¥¦±N¬O¹s. ¯Á¤Þ±N¥Î©ó§Ö³t¸òÂÜ­þ¤@­Ó¦C¬O³Ì«á±Æ¹L§Çªº¨Ã¦b¥t¤@­Ó¦C³Q¬°±Æ§Ç¦Ó³æÀ»®ÉÃö³¬¸Ó¦Cªº±Æ§Ç (¾¨ºÞ³o¤£¬O¥²»Ýªº - ±Æ§Ç¦Cªº¯Á¤Þ±N¦b¤@¬q²³æªº¹M¾ä©Ò¦³¦C¨ÃÀˬd SortingState ÄݩʭȪº¥N½X¤¤³QÀˬd).
Grid.lAllowSorting - ¹w³]­È¬° .T. - ¤¹³\¼o¤î¹ï¾ã­Óªí®æªº±Æ§Ç.
header.lAllowSorting - ¹w³]­È¬° .T. - ¤¹³\¼o¤î¹ï¸Ó¦Cªº±Æ§Ç.
Header.SortingState - 0 - ¥¼±Æ§Ç, 1 - «öª@¾­±Æ§Ç, 2 - «ö­°¾­±Æ§Ç. ±Æ§ÇºÞ²z¾¹±N±²°Ê³o¨Ç­È¨Ã¦b»Ý­n®É½Õ¥Î±Æ§Ç±`¦¡.
Header.DefaultSorting - ¸ÓÄݩʨM©w¦b¦CÀY³Q³æÀ»®É¨Ï¥Î¤°»ò¼Ëªº±Æ§Ç. ¨Ò¦p, ­º¿ïªº¤é´Á±Æ§Ç¦bÀq»{±¡ªp¤U¬O¥Î­°¾­, ¦]¦¹§A¥i¯à·Q§ïÅܸÓÄݩʱqÀq»{ªº 1 ¨ì 2 - ³o±N±o¤£Â_³æÀ»¦CÀY®Éªº±Æ§Çªº±Æ§Ç¶¶§Ç¥Ñ {µL±Æ§Ç}->{ª@¾­}->{­°¾­} Åܬ° {µL±Æ§Ç}->{­°¾­}->{ª@¾­}.
Header.lEventSwitchOffSorting - ¤@­Ó¨Æ¥ó - ¦pªG¥ô¦ó±Æ§Çªº¯S©w³B²z³y¦¨¤F³t«×½wºC©Î¿ù»~, Ãö³¬±Æ§ÇªºÄݩʨåh±¼©Ò¦³ªþ¥[ªº¯Á¤Þ. ¥¦¦b¥H Grid.SetAll("lEventSwitchOffSorting",.T.) ªº®æ¦¡½Õ¥Î³Q¦CÀY¤¤ªº¸ÓÄݩʪº _Assign ¤èªk¸òÂÜ. ¸ÓÄݩʦbªí®æÃþ¤¤, ·í SetAll ¨ç¼Æ³Q½Õ¥Î®Éªí®æªº¦CÀYÁÙ¨S¦³·Ç³Æ¦nªº±¡ªp¤U¤]¬O»Ý­nªº (§_«h¸ÓÄݩʥ¼§ä¨ì¥ô¦ó±±¨î¶µ®É, VFP ¦³®É·|¥X²{¿ù»~´£¥Ü).
¦b³Ì½ÆÂøªº±¡ªp¤U¦C·|±q¦C®æ¤¤²¾¥h, ¦]¦¹ SortedColumn Äݩʥi¯à­n¨D¦b¶i¦æ³oºØ³B²z«á¶i¦æ§ó·s. ¦b³o¼Ëªº±¡ªp¤U, «ØÄ³¨Ï¥Îªí®æ¤¤ªº¤@­Ó¤èªk¨Ó±½´y©Ò¦³ªº¦C, ¨Ã¥Î¥¿½Tªº, ¥]§t«D¹s±Æ§Çª¬ºAªº¦Cªº¯Á¤Þ¨Ó§ó·s SortedColumn ­È. ¦n¤F, §A¥i¥H¥Î¥t¤@ºØ¤èªk¨Ó¸òÂÜ·í«e±Æ§Ç¦Cªº¯Á¤Þ - ¨Ï¥Î¤@­Óªð¦^·í«e±Æ§Ç¦Cªº¯Á¤ÞªºÂ²³æªº°j°é.

±Æ§Ç±`¦¡¬O¸Ó¥\¯àªº¥D­n³¡¤À. ¦³¦hºØ¤èªk¨Ó¹ê²{ªí®æ¤¤ªº¸ê®Æªº±Æ§Ç: - «O¦s¸ê®Æ¨ì¤@­Ó°}¦C¨Ã¦bªí®æ¤¤Åã¥Ü°}¦C¤º®e, ¥Î asort() ¨ç¼Æ¹ï°}¦C¶i¦æ±Æ§Ç. ¸Ó¤èªk¦³¦b¨Ç®É­Ô¤ñ¸ûºC¥B­­¨î¤FÅã¥Üªº°O¿ý¼Æ¬O°}¦C¤¸¯Àªº³Ì¤j­È. - ¬°±Æ§Ç¦Ó¥Î¥t¤@­Ó¿ï¶µ­«·s¬d¸ßµø¹Ï©Î SQL Pass-Through µ²ªG¶°. ¹ï©ó¤jªº¸ê®Æ¶°¨Ó»¡³o·|¤ñ¸ûºC, ¦ý³o¬O³Ì²³æªº¦h¦C±Æ§Ç¤èªk. - ¨Ï¥Î¦b¹B¦æ®É¬°µ²ªG¶°³Ð«Øªº¯Á¤Þ©Î¤w¦s¦bªº¯Á¤Þ. ¸Ó¤èªk³Ì§Ö¦]¬°¥¦¤£«O¦s¥ô¦ó¤¤¶¡ªºµ²ªG¨ì°O¾ÐÅ餤¥B¤£­n¨D¦A¦¸±q¦øªA¾¹¬d¸ß¸ê®Æ, ¦ý­n¨D½s¼g¤@¨Ç¥N½X.

¦b¥»¤å¤¤§Ú­Ì¥u°Q½×¨Ï¥Î¯Á¤Þªº¤èªk. ¨ä¥Lªº¤èªk¤]¥i¥H¥Î´À´«±Æ§Ç±`¦¡¤¤ªº¸ê®Æ¶°¨Ó¹ê²{, ¥B¸Ó¤èªk¦b±Æ§Ç«á¨ê·sªí®æ.

¦b±Æ§Ç±`¦¡¤¤¨Ï¥Î¤F¥H¤UÄÝ©Ê:

Header.CurrentTag - ¸ÓÄݩʥΩó«O¦s¤@­Ó¥Î©ó¸Ó¦C±Æ§Çªº¼ÐÃѦW.
Header.SortingExpression - ·í¸ÓÄݩʤ£¬°ªÅ®É, ¥¦ªº¹Bºâ¦¡±N¥Î©ó±Æ§Ç. ·í¥¦¬°ªÅ®É, ±Æ§Ç±`¦¡±N¥Î¦Cªº ControlSource ¨Ó³Ð«Ø±Æ§Ç¹Bºâ¦¡.
Header.SortingTag - ¦pªG¸ÓÄݩʫDªÅ, ¸ÓÄݩʤ¤ªº¯Á¤Þ¼ÐÃѦW±N³Q»{¬°¤w¦s¦b©ó record source ¤¤. ¬°¤°»ò­n¦b¸ÓÄæ¦ì¤w¸g¦s¦b¤@­Ó¯Á¤Þ®ÉÁÙ­n¦b¹B¦æ®É³Ð«Ø¤@­Ó¯Á¤Þ¼ÐÃÑ©O?
³Ì«á¨â­ÓÄݩʵ¹¤F±Æ§Ç½sµ{¥H§ó¦hªº¿ï¾Ü. ¨Ò¦p, ·í¤@­Óªí®æ¥]§t First Name ©M Last Name ¨â­Ó¦C®É, µL½×¬O­þ¤@­Ó¦C³Q³æÀ»¤F, «ö First Name + Last Name ¨Ó±Æ§Ç¬O¤@­Ó¤£¿ùªº·Qªk. ·íµM, ¥¦¥i¯à­n¨DÃB¥~ªº±Æ§Ç«ü¥Ü¾¹©M¥N½X, ·íÀq»{ªº±Æ§Ç±`¦¡¤£¯à¾A·í¦a±Æ§Ç¦C®É³Ì¦n«O«ù¸ÓÄݩʬ°ªÅ. §Ú­Ì±N¦bµy«á°Q½×¦h¦C±Æ§Ç.

±Æ§Ç±`¦¡Àˬd¬O§_ SortignTag ©Î CurrentTag ÄݩʫDªÅ, ¨Ã¨Ï¥Î³o¨Ç¼ÐÃѨӱƧÇ. CurrentTag ¦b¦Cª«¥óªº¥Í¦s´Á¶¡¤£·|³Q²M°£, ©Î¦b­n¨D§R°£¸ÓÁ{®É¼ÐÃѪº¯S®í±¡ªp¥X²{«e¤£·|³Q²M°£ (³o·|¦b³]¸m lEventSwitchOffSorting Äݩʬ° .T. ®Éµo¥Í). ³o¬O¥i­«¥Î±Æ§Ç - §Ú­Ì¥u³Ð«Ø¯Á¤Þ¤@¦¸ (³o·|ªá¤@¨Ç®É¶¡), «O¦s³Ð«Øªº¯Á¤Þ¼ÐÃѦW¨ì¸ÓÄݩʤ¤, µM«á¦b¤U¤@¦¸»Ý­n±Æ§Ç®É¥u»Ý­«¥Î¥¦¦Ó¤£¦Aªá®É¶¡. ·í CurrentTag Äݩʬ°ªÅ®É, ±`¦¡±N¬°°O¿ý·½³Ð«Ø¤@­Ó¯Á¤Þ¼ÐÃѨëO¦s¼ÐÃѦW¨ì¸ÓÄݩʤ¤.

·í«ü©w¤F¯Á¤Þ¹Bºâ¦¡®É, ±`¦¡±N¥u¨Ï¥Î¥¦¦Ó¤£¶i¦æÅçÃÒ (¦ý°ò¥»ªº¿ù»~¸òÂܤ´µM·|¶i¦æ). §_«h±Æ§Ç±`¦¡±N¸Õ¹ÏÀˬd©Ò¦³ªº¸Ô±¡¨Ó³Ð«Ø¹Bºâ¦¡, ¥]¬A NULL ­È©M SET COLLATE ³]¸m. §Ñ¦í³Ì¤j¯Á¤Þ¹Bºâ¦¡ªø«×¬° 240, ¦ý¦b SET COLLATE ³]¸m¬°«D "MACHINE" ®É¤U­°¨ì 120. ¯Á¤Þ¤£±µ¨ü NULL ­È, ¦]¦¹§Ú­Ì²K¥[ NVL() ¨ç¼Æ¨Ó°²©w¨S¦³ null ­È¥X²{¦bµ²ªG¶°¤¤. ¹ï©óªø¦r¦ê©M³ÆµùÄæ¦ì§Ú­Ì¥Î PADR() ¨ç¼Æ. ³Ì«á, ·í ControlSource ­È¥]§t¹Bºâ¦¡¦Ó¤£¬OÄæ¦ì®É, §Ú­Ì¹ï¦r¤¸­È¨Ï¥Î PADR() ¨Ó«OÃÒ¹Bºâ¦¡µ²ªGªºªø«×Á`¬O¬Û¦Pªº. ·íµM, §Ú­Ì¤£¯à¹ï³q¥ÎÄæ¦ì±Æ§Ç.

¹ï©ó¤£¦Pªº°O¿ý·½¶i¦æ¯Á¤ÞÁÙ¦³¤@­Ó­«¤j°Ï§O. ¹ï©óµø¹Ï, ´å¼Ð©M SQL Pass-Through ´å¼Ð, §Ú­Ì¥i¥H³Ð«Øµ²ºc¤Æ¯Á¤Þ¼ÐÃѦӤ£·|¦³¥ô¦ó°ÝÃD, ¦]¬°³o¨Ç¯Á¤Þ¼ÐÃѲ£¥ÍªºÀÉ·|¦b°O¿ý·½Ãö³¬®É¦Û°Ê±qºÏ¤ù§R°£. ¦ý¬O, ±aªí½w¦sªºµø¹Ï¤£¯à¥Î INDEX ©R¥O³Ð«Ø¯Á¤Þ. §Ú­Ì¥i¥H§Ö³t¦aÁ{®É¤Á´«¨ì¦æ½w¦s, ¹ïµø¹Ï¶i¦æ¯Á¤Þ, µM«á¦A¦¸³]¸m½w¦s¬°ªí½w¦s. ¦ý¬O¦pªGµø¹Ï¥]§t¥¼´£¥æªº­×§ï,§ïÅܽw¦s¼Ò¦¡·|³y¦¨¿ù»~. ¦n¤F, §A¥i¥H§i¶D¥Î¤á¸Óªí³æ¤Wªº¸Óªí®æ¦b¸ê®Æ³Q­×§ï¥B¥¼«O¦s®É¤£¯à±Æ§Ç, ©ÎªÌ¥u¦b¥´¶}µø¹Ï¥B¥Î¦U¦CÀYªº SortingTag ­È¨Ó³Ð«Ø¯Á¤Þ, µM«á³]¸m½w¦s¼Ò¦¡¬°ªí½w¦s.

¬°¤@­Óªí³Ð«Øµ²ºc¤Æ¯Á¤Þ¤£¬O¤@­Ó¦nªº¿ìªk, ¦]¬° ControlSource ¤¤ªº¹Bºâ¦¡¥i¯à¥]§t¹ï¨ä¥LÄæ¦ìªº¤Þ¥Î¨Ã¦³¥i¯à¬OÃöÁpªí¤¤ªºÄæ¦ì, ¦]¦¹¦b§Ú­Ì³Ð«Ø¯Á¤Þ«á, ¨ä¥L¥´¶}ªíªº¥Î¤á±N¦]¦¹¦Óµo¥Í¿ù»~. ¥t¥~, ³Ð«Øµ²ºc¤Æ¯Á¤Þ­n¨D¹ïªíªº¿W¦û¨Ï¥ÎÅv. ¹ï©ó³oºØ±¡ªp, §Ú­Ì¨Ï¥Î«O¦s¦bÁ{®É CDX Àɤ¤ªº«Dµ²ºc¤Æ¯Á¤Þ¼ÐÃÑ, ¨Ã¥H¬Û¦Pªº¦W¦r§@¬°¯Á¤Þ¼ÐÃÑ. ³o·|²£¥Í¤@¨Ç¨ä¥L¥i¯àªº°ÝÃD. ¦b¸ê®Æ¤u§@´Á¤¤¥]§t¤F¥´¶}¤F«Dµ²ºc¤Æ¯Á¤Þªº§O¦W®É, "BEGIN TRANSACTION" ¤£¯à±Ò°Ê¨Æ°È³B²z. ¦b¸Ó©R¥O«e§A¥²¶·Ãö³¬©Ò¦³«Dµ²ºc¤Æ¯Á¤Þ. ¥t¥~, ³Ì¦n¬O¤£­n§â¥]§t¤W¸U±ø°O¿ýªº¸ê®Æ¶°¾ã­ÓÅã¥Üµ¹¥Î¤á. ·Ç³Æ¤@­Ó¿z¿ï±ø¥ó¨Ã±q¤jªºªí¤¤¥u¿ï¾Ü¤@­Ó¤pªº¸ê®Æ¤l¶°¨ìªí®æ¤¤. ³o¼Ë·|¨Ï³t«×§ó§Ö, ¨Ã¨S¦³ª½±µ³X°Ýªíªº°ÝÃD, ¦p¶H³oºØ±¡ªp¤Uªº«Dµ²ºc¤Æ¯Á¤Þ¼ÐÃѰÝÃD. ¥t¥~, ³q¹Lºô¸ô³X°Ý¨Ó¯Á¤Þ¤jªºªí³t«×·|¬Û·íºC. Á`¤§, ¦b§A¥²¶·¹ïªí¶i¦æ±Æ§Ç®É, ºÉ¥i¯à¦a¸ÕµÛ¨Ï¥Î¤w¸g¦s¦b©óªí¤¤ªº¯Á¤Þ¼ÐÃÑ, µM«áÃö³¬ªí¤¤¨S¦³¯Á¤Þ¼ÐÃѪº¦Cªº±Æ§Ç. ¥t¤@­Ó¤è®×¬O - ¦b¶}©l¨Æ°È³B²z«e, ¨Ï¥Î Grid.SetAll("lEventSwitchOffSorting",.T.) ³o¼Ëªí®æ±N§R°£¥i¯à¦s¦bªº«Dµ²ºc¤Æ¯Á¤Þ. ³o±N­n¨D¯S§OÃöª`±q¨Ï¥Îªí®æªºªí³æ¤¤½Õ¥Îªº¤lªí³æ¤¤ªº¨Æ°È³B²z.

·í°O¿ý·½¤¤¥]§t 1000 ¥H¤Wªº°O¿ý®É, §Ú­Ì¥Î¦CÀYªº DispSortingMessage ¤èªk¨ÓÅã¥Ü¸ê°T, ¦bÀq»{±¡ªp¤U¦b±Æ§Ç´Á¶¡Åã¥Ü¤@­Ó²³æªº "WAIT WINDOW" ¸ê°T. §A¥i¯à·Ç³Æ¥Î¶i«×±ø¨ÓÅã¥Ü¯Á¤Þ¶i«×©Î¥Î¤@¨Ç¨ä¥L¤èªk¨Ó«ü©ú¯Á¤Þ(±Æ§Ç)¶i«×. ¥t¥~, ¤]¥i¥H¦b¯Á¤Þ¹Bºâ¦¡¤¤¥Î¦Û©w¸q¨ç¼Æ½Õ¥Î¨ÓÅã¥Ü±Æ§Ç¶iµ{: ¨ç¼Æ±N³Q¨C¤@­Ó³Q¯Á¤Þªº°O¿ý½Õ¥Î, ¨ç¼Æ¤¤ªº¥N½X§ó·s¹Ï§Î¤Æªº¶i«×±ø (¦b¦¹±¡ªp¤U·|µyµy­°§C¯Á¤Þ³t«×).

·í¥H¸Ó¤èªk¹ïµø¹Ï, ´å¼Ð©Î SQL Pass-Through ´å¼Ð¶i¦æ±Æ§Ç®É, ±Æ§Ç³t«×¬O¥O¤HÅå²§ªº. ·íªí¦b¥»¦aºÏ¤ù¤W®É¹ïªí±Æ§Ç¤W«Ü§Öªº, ¦ý³q±`³q¹Lºô¸ô³X°Ý¸ê®Æ®w©M¥¦ªºªí®É³t«×¬OºCªº. VFP SELECT »y¥yªºµ²ªG´å¼Ð¤]·|³Q±Æ§Ç. ¦ý¬O, ¹ïµ²ªG¶°¨Ï¥Î NOFILTER ¿ï¶µ, §_«h¦]¬°ª½±µ³q¹Lºô¸ô³X°Ýªí, ¯Á¤Þ®É·|ÅܺC (¥t¥~¨Ï¥Î«Dµ²ºc¤Æ¯Á¤Þ¤£¬O¤@­Ó¦nªº¿ìªk, ¤w¦b«e­±´y­z).

¦b±Æ§Ç«á»Ý­n¥¿½T¦a¨ê·sªí®æ. ¦³³o¼Ëªº±¡§Î, §ïÅܱƧǪº¤è¦V·|µ¹ªí®æ¦æÅã¥Ü±a¨Ó±j¯P¼vÅT. ¨Ò¦p, ¥Hª@¾­±Æ§Ç, ±N·í«e±Æ§Çµ²ªGªº²Ä¤@±ø°O¿ý©ñ¦b²Ä¤@¦æ, µM«á¦A¦¸«ö­°¾­±Æ§Ç. ³q±`ªí®æ¦b³oºØ±¡ªp¤U¥uÅã¥Ü³æ¤@ªº¦æ - ­°¾­±Æ§Çªº³Ì«á¤@¦æ, ¦b¥¦ªº¤U­±¬OªÅ¥Õªº. ¥Î¤á¦b¥ô¦ó±¡ªp¤U¥i¥H¨Ï¥Î±²°ÊÄæ¨Ó¨Ïªí®æªð¦^¨ì¦n¬Ýªºª¬ºA, ¦ý¬O, ³Ì©_©Çªº¨Æ±¡¬O, ªí®æ±`±`¦b°O¿ý·½¤¤ªº©Ò¦³ªº¦æ³£¥i¥HÅã¥Ü¤U®ÉÅã¥Ü¸Ó¦æ¬°. °²³]³o¼Ëªº±¡§Î: ·í§A¬Ýªí¸ê®Æ·½¤¤©Ò¦³ªº¦æ³£Åã¥Ü¦bªí®æ¤¤, ³æÀ»±Æ§Ç, ³o®É§A¥u¬Ý¨ì¤@¦æ... ³o³q±`·|§â¥Î¤á·d½k¶î - ¬°¤°»ò¦b©Ò¦³¤º®e³£Åã¥Ü±o¤U®Éªí®æ·|±²°Ê? ­n­×¥¿ªí®æªº¸Ó¦æ¬°, §Ú­Ì¨Ï¥Î¤@­Óªí®æªºÃB¥~ªº¨ê·s: ³]¸m°O¿ý«ü¼Ð¨ì·í«e±Æ§Çµ²ªG¤¤ªº²Ä¤@±ø°O¿ý, µM«á¦Aªð¦^¨ì·í«e°O¿ý. ³o°²©w·í«e°O¿ý¬O¦bªíªº·í«eªº¥iµø°Ï¤º©Î©Ò¦³¦æ³£Åã¥Ü¦bªí®æ¤¤. ³o¤]¥i¦³§ó¦hªº§ï¶i - ·í°O¿ý¦b·s±Æ§Çªº°O¿ý·½ªº§À³¡®É, ¥Î¸Ó¤èªkÅã¥Ü³Ì«á¤@±ø°O¿ý(·íªí®æ©³³¡¦³¤@³¡¤À¨S¦³°O¿ýªºªÅ¥Õ°Ï°ì®É). ­n³o¼Ë°µ, ¸U¤@°O¿ý¬O¦bªí®æªº©³³¡, ²¾°Ê°O¿ý«ü¼Ð¨ì³»³¡, ¦A²¾°Ê¥¦¦^¨ìªí®æ·í«e¥iµø°Ï¤¤ªº°O¿ý¼Æ´î¥bªº¦ì¸m, µM«á³]¸m°O¿ý«ü¼Ð¦^¨ì§Æ±æªº¦ì¸m. ª`·N³o¥u¦b°O¿ý«ü¼Ð¦b±µªñ³Ì«á¤@±ø°O¿ý®É¦³¥Î. ¦V«á©M¦V«e²¾°Ê°O¿ý«ü¼Ð¦b¯S©wªº°O¿ý·½¤¤¥i¯à·|¤ñ¸ûºC, ¯S§O¬O¦³«Ü¦hªº°O¿ý©Î³]¸m¤F¿z¿ïªº°O¿ý·½®É, ¦]¦¹³o¤£¬O¤@­Ó¦nªº³q±`±¡ªp¤Uªº¿ìªk.

¥H¤W¤èªk¹ï¤@«ö³æ¤@ªº¦C±Æ§Ç¬O¦nªº. ·í§A·Q«ö¦h¦C¶i¦æ±Æ§Ç®É, §A»Ý­n±q·í«e¥[¤J¨ì±Æ§Ç¹Bºâ¦¡¤¤ªº¥B±Æ§Çª¬ºA«D¹sªº©Ò¦³¦C¤¤¦¬¶°©Ò¦³ªº±Æ§Ç¹Bºâ¦¡. ³o¬O¥²»Ýªº, ¦]¬°¥Î¤á¥i¯àÃö³¬¤F¸Ó³¡¤À¦Cªº±Æ§Ç¥H«OÃÒ¨ä¥L¦Cªº¥¿½T±Æ§Ç. ¦b¦¹±¡ªp¤U, ­«¨Ï¥Î¤w¦s¦bªº¯Á¤Þ¼ÐÃѬO«D±`§xÃøªº, ¦]¬°³æ­Óªº¦C²{¦b¨Ï¥Î¤@¨Ç±Æ§Ç¹Bºâ¦¡. ³q±`³o­n¨DÂà´«©Ò¦³ªº¹Bºâ¦¡¬°¦r¤¸«¬¨Ã­­¨î¥¦­Ìªºªø«×¤£¤j©ó 240 ¦r¤¸ (©Î¦b¨Ï¥Î¤F ¤ñ¸û§Ç¦C®É¬° 120 ¦r¤¸). ¥t¥~, «ÜÃø¹ê²{¦¹ºØ±¡ªp¤Uªº¬Y¦C­n¨D­°¾­±Æ¦C¦Ó¨ä¥L¦C¨Ï¥Îª@¾­±Æ¦Cªº­n¨D. ³o­n¨D¥H­°¾­Âà´«¹Bºâ¦¡ªº­È. ¹ï©ó¤£¦Pªº¸ê®ÆÃþ«¬Âà´«¬O¤£¦Pªº. ¨Ò¦p, ¼Æ­È«¬ªº­È©e®e©ö¥Î "-" ¾Þ§@²Å¶i¦æÂà´«. ¦b§Ú­Ìªº±¡ªp¤¤±N¥u³B²z¦r¤¸«¬ªº­È. ¦b¦¹±¡ªp¤U§Ú­Ì»Ý­n§ïÅÜ "A" ¬° "z" µ¥µ¥. §A¥i¥H¥Î chrtran() ¨ç¼Æ¨Ó§Ö³t¦a¤ñ¸û¨â­Ó¦ê. ¨Ò¦p:

"Control" > "Binding"
chrtran("Control", cAllChars, cAllReverseChars) < chrtran("Binding", cAllChars, cAllReverseChars)

cAllChars and cAllReverseChars are prepared by following way:

cAllChars = ""
cAllReverseChars = ""
for nCharIndex = 0 to 255
cAllChars = cAllChars + chr(nCharIndex)
cAllReverseChars =cAllReverseChars + chr(255-nCharIndex)
endfor


¦]¦¹, ¨Ò¦p, ¯Á¤Þ¹Bºâ¦¡¬°¨â¦C Last name ©M First Name, ·í«ö Last Name ª@¾­±Æ¦C¥B First Name ­°¾­±Æ¦C®É, ±N¬Ý°_¨Ó¦p¤U:
NVL(LastName,space(35)) + chrtran(NVL(FirstName,space(35)), cAllChars, cAllReverseChars)


¦b¨Ï¥Î¤F¤ñ¸û§Ç¦Cªº±¡ªp¤U(ĶªÌª`:§Y SET COLLATE ³]¸m¬°«D "MACHINE" ®É), °ÝÃD·|§ó½ÆÂø. ¦r¤¸ªº±Æ¦C»P¦r¤¸½Xªº§Ç¦C¤£¤Ç°t, ¦]¦¹¦ê cAllChars ©M cAllReverseChars ±N¥H¤£¦P¤è¦¡²Õ¦¨. ­n§ï¥¿³o¤@°ÝÃD, ³Ð«Ø¤@­Ó¥u¦³¤@­Ó¦r¤¸Äæ¦ìªºªí¨Ã¥Î©Ò¦³ªº¦r¤¸¶ñ¥R¥¦. «ö¨Ï¥Îªº¤ñ¸û§Ç¦C¯Á¤Þ¸Óªí, ¥Î¤w±Æ§ÇªºªíŪ¨ú©Ò¦³¦r¤¸¨ì³o¨Ç¦ê¤¤ - ³o±N«OÃÒ³o¨Ç¦ê¤¤ªº©Ò¦³¦r¤¸¥H¥¿½Tªº¶¶§Ç±Æ¦C. ·í¦ê¦r¤¸¤£¬O³æ¦r¸`®É, ³o¨Ç¦êÅܱo¤Óªø(¥Î©ó¯Á¤Þ¹Bºâ¦¡¤¤), ³t«×¤]¦] chrtranC() ¦ÓºC¤U¨Ó. ¦n¤F, «ö¤£¦Pªº±Æ¤è¦V±Æ§Ç¦b¨Ï¥Îµø¹Ï©Î¬d¸ß»y¥y®É¥i¯à¥Î¬Û·í²³æªº¤èªk¹ê²{ - SELECT »y¥yªº ORDER BY ¤l¥y¤¹³\¬°¦U±Æ§Ç¤¸¯À«ü©w±Æ§Ç¤è¦V.
¥H¤U¬O¤@¤pÂI«ö¦h¦C±Æ§Çªº¤£¦P¼Ò¦¡.

©Ò¦³¦C¥æ¤eªº¦@¦P±Æ§Ç, ¦p, First Name + Last Name - ±Æ§Ç¤@­Ó¦C³y¦¨«ö²Õ¤¤ªº©Ò¦³¦C±Æ§Ç
­×¥¿: ³æÀ»¦C¨Ó±Æ§Ç¥¦. ³æÀ»²Ä¤G­Ó¦C²K¥[±Æ§Ç¨ì²Ä¤@­Ó±Æ§Ç¤¤. ¦b¦¹«á³æÀ»²Ä¤@­Ó¦C·|¥u³Ñ¤U²Ä¤G­Ó¦Cªº±Æ§Ç.
¯ÅÁp: ¨â­Ó©Î§ó¦hªº¦C¥[¤J¨ì±Æ§Ç¤¤, ·í¤@­Ó¦C(¥D¦C)±Æ§Ç®É, ²Ä¤G­Ó¦C±N»P¥D¦C¦P®É±Æ§Ç, ·í¥D¦C¥¼±Æ§Ç®É, ³æÀ»²Ä¤G¦C­P¨Ï¥D¦C¦Û°Ê±Æ§Ç. ¦b¤T¦C±¡ªp¤U²Ä¤T¦Cªº³æÀ»­P¨Ï²Ä¤G¦C©M²Ä¤@¦C(¥D¦C)¦Û°Ê±Æ§Ç. ¦³®É½ÆÂøªº¼Ò¦¡¤¹³\¤@­Ó¥H¤Wªº¤G¯Å¦C.
°ÊºA: »P­×¥¿¬Û¦ü, ¦ý©Ò¦³¦C¥[¤J¨ì¤@­Ó³æ¤@ªº±Æ§Ç³B²z¤¤, ¦]¦¹¥Î¤á¥i¥H²Õ´¥ô¦ó±Æ§Ç¦Cªº²Õ¦X.
³o¥i¥H¥Î¶H "cMultipleSortingColumns" ³o¼ËÃB¥~ªº¦CÀYÄݩʨӹê²{, ¸ÓÄݩʬO¤@­Ó¥Î©ó²Õ¦X±Æ§Çªº¦C¯Á¤Þ¦Cªíªº¦ê, ¯ÅÁp±Æ§Ç¼Ò¦¡¤]­n¾a¥¦¨Ó±Æ§Ç (Àu¥ý±Æ§Ç¸¹ - ¦b±Æ§Ç¤¤­þ¤@­Ó¬O¥D¦C, ­þ¤@­Ó¬O¦¸¦Cµ¥µ¥). ¹ï©ó°ÊºA±Æ§Ç¤£»Ý­nÃB¥~ªºÄÝ©Ê, ¥u»Ý­n¥t¤@­Ó±Æ§ÇºÞ²z.
¦h¦C±Æ§Ç¤]­n¨D¯S®íªº¤èªk¨ÓÅã¥Ü±Æ§Ç«ü¥Ü²Å. ¦b¦¹±¡ªp¤U­n¨D¤@¦¸Åã¥Ü¦h­Ó±±¨î¶µ¨Ó«ü¥X©Ò¦³¦Cªº±Æ§Ç, ©M·í«e±Æ§Çªº¦C. ¹ï©ó°ÊºA±Æ§Ç«ü¥Ü¾¹ªº¼Æ¶q±N»Pªí®æ¤¤¥i¥H±Æ§Çªº¦C¼Æ¤Ç°t.

¦b¥Ü¨Ò¤¤¨S¦³¦p¦¹½ÆÂøªº¦h¦C±Æ§ÇªºªF¦è, ¦ý¬O³oùذQ½×ªºÃö©ó±Æ§Çªº¤j¦h¼ÆªºªF¦è.

ªí®æ±Æ§Ç¼Ð°O («ü¥Ü¾¹)

¦³¦hºØ¤è¦¡¦V¥Î¤áÅã¥Üªí®æ¬O«ö­þ¤@¦C±Æ§Çªº. ³Ì²³æªº¤èªk¬O§ïÅܦCÀY caption ªº­I´º¦â©M«e´º¦â, ©ÎªÌ²K¥[¤@­Ó¯S®íªºÃþ¦ü©ó½bÀYªº¦r¤¸¨ì¦CÀYªº caption ¨Ó«ü¥X±Æ§Çªº¦C (³q±`¬O¦r¤¸ "^" (ª@¾­) ©M "v" (­°¾­). ³oºØ°µªk¬Ý°_¨Ó¬O¥i±µ¨üªº¦ý¤£¬O³Ì¦nªº. ¥i¥H¥Î¤@­Ó³æ¿Wªº±±¨î¶µ¨Ó«ü¥X±Æ§Çª¬ºA, ¦ý³o¨Ã¤£¬O¤@¥ó®e©öªº¨Æ. ¦n¤F, ¦bªí®æ¦CÀYªº header ¤W©ñ¸mÃþ¦ü©ó½bÀYªº±±¨î¶µ´N¶H©ñ¸m±±¨î¶µ¨ìªí®æ³æ®æ¤W¤@¼Ë®e©ö - ©Ò¦³¤Ø¤o¤]¾A¥Î©ó³oùØ (°Ñ¨£ VFP ¤¤ªºªí®æ²Ä¤G³¡¤À). ¦ý¬O, ¦b³\¦hÀ³¥Îµ{¦¡¤¤§A¥i¥H¦b¦CÀY¤º¬Ý¨£¤@­Ó¤pªº½bÀY. ¦b VFP ¬OÃø©ó¹ê²{³o¼ËªºªF¦è, ¨Ã¥B³o­n¨D¤@¨Ç¯S®íªº¤èªk. ³oùئ³¨âºØ¤èªk.

²Ä¤@ºØ¬O¥Î "DEFINE WINDOW ... IN WINDOW ... NAME ..." ©R¥O¨Ï¥Î³æ¿Wªºµøµ¡©w¸q¨Ã¥Î Windows API ¨ç¼Æ SetWindowRgn() ¨Ó§ïÅܵøµ¡§Îª¬¨Ó¨Ï¥¦¬Ý°_¨Ó¶H¤@­Ó½bÀY, ¨Ã¦b½bÀY¤U­±¨Ï¥Î¤@²Õ½u¬q±±¨î¶µ¨ÓÅã¥Ü¤@¨ÇªF¦è¥H¼Ò¥é¥W¥Y®ÄªG. ²Ä¤GºØ¤èªk¬O©ñ¸m¤@­Ó³q±`ªº³z©ú®e¾¹±±¨î¶µ¨ìªí®æ­±¤W¨Ã¥Î¤@²Õ½u¬q¨Ó¥Í¦¨½bÀY. ¤]¥i¥H¥Î½u¬q±±¨î¶µ, ²³æªº¦bªí³æ¤èªk¤¤¦bªíÀY¤W¤Wø¥X½bÀY, ¦ý³o­n¨D§ó¦hªº§V¤O¨Ó¨ê·s³o¼Ëªº±Æ§Ç«ü¥Ü¾¹.

¦bªí®æ¦CÀY¤W©ñ¸m¤@¨ÇªF¦èªº°ÝÃD¬O«D±`§xÃøªº - ªí®æ¦CÀYªº¦Û¤v­«Ã¸(redraw) Á`¬O¦b¨ä¥L VFP ±±¨î¶µªº¤W­±, §Y¨Ï§A¥Î¤F ZOrder ¤èªk¨Ó©ñ¸m§Aªº±±¨î¶µ¨ì©Ò¦³¨ä¥L±±¨î¶µªº¤W­±. ¦³³ø§i»¡¦b W2K §@·~¨t²Î¤W¹B¦æ VFP ªºÀ³¥Îµ{¦¡®É¤£·|¥X²{¸Ó¦æ¬°; ¦b Windows NT ¤U¥¦Á`¬O³o¼Ë. ¤@¦ý¯S©wªº­P¨Ï¦CÀY¨ê·sªº¨Æ¥óµo¥Í®É, ªí®æ¦CÀY±N¦b¨ä¥L±±¨î¶µªº¤W­±¦Û¤vø»s. ¥H¤U¬O³o¨Ç¨Æ¥ó©M­n¨D¨ê·s±Æ§Ç«ü¥Ü¾¹ªº¨Æ¥óªº²M³æ:

¦CÀYªº click (¦b¥ô¦ó±¡ªp¤U) ©M right click (©_©Ç, ¦ýªº½T¦b¥kÀ»®Éªí®æ¦CÀY²¾°Ê¨ì¨ä¥L¥ô¦ó±±¨î¶µ).
ªí®æªº refresh() ¤èªk½Õ¥Î
§ïÅÜ·í«e³æ¤¸ (AfterRowColChange ¨Æ¥ó)
ªí®æ²¾°Ê©Î­«½Õ¤j¤p©Îªí®æ¦CÀY³Q²¾°Ê©Î½Õ¾ã¤j¤p«á
ªí®æ±²°Ê
¦CÀYªº°ª«×½Õ¾ã«á (¦bªí®æªº MouseUp ¨Æ¥ó¤¤®·®»¥¦)
ªí®æ¥¢¥hµJÂI®É - ©ñ¸mªí®æ¨ì®e¾¹¤¤¨Ó®·®»¥¦
¦n¤F, ©Ò¦³³o¨ÇªF¦è, ¥¿¦p§A¥i¥H¬Ý¨ìªº¤@¼Ë, °£³Ì«á¤@­Ó¥~¨ä¥L³£¥i¥H¥Î²³æªº¤èªk®·®». ¦bªí®æ¦CÀY¨ê·s«áªí®æ¥¢¥hµJÂI¤£·|¿Eµo¥ô¦óªí®æ¨Æ¥ó. ¥¦¥i¥H§âªí®æ©ñ¤J¤@­Ó®e¾¹¤¤¨Ó®·®»¥¦, ¦b¤@¨Ç±¡ªp¤U³o¼Ë°µ¨Ã¤£¦n, ¤×¨ä¹ï©ó¤@¯ëªºªí®æÃþ.

¦pªG¤£·|³y¦¨¼Ò¦¡µøµ¡ªº½Ä¬ð, µøµ¡¤Æªº«ü¥Ü¾¹¬O¤ñ¸û¦nªº. ¦b¤@¨Ç±¡ªp¤U, ¦b¼Ò¦¡ªí³æ¤¤ªº¥t¤@­Ó¥Î "DEFINE WINDOW ... IN WINDOW" ©w¸qªºµ¡¤f·|³y¦¨³\¦h¤è­±ªº¼vÅT. ¯S§O§xÃøªº¬O³o¼Ëªºµøµ¡¤£¿Eµo¥ô¦ó¨Æ¥ó¤£¯à¥¿½T¦a³Q·Æ¹«³æÀ» (ªí®æ¦CÀYªº±Æ§Ç«ü¥Ü¾¹»Ý­n·Æ¹«³æÀ»). ¹ï©óµL¼Ò¦¡ªí³æ³o¼Ëªºµøµ¡Àò±oµJÂI, ¤]¤£¬O¦n¨Æ±¡, ¦]¬°·|¿Eµo³\¦h¨Æ¥ó¦Ó¥B³o»Ý­n¯S®íªº³B²z.

¦b¥N½X¤¤±q¦h­Ó¦a¤è¨ê·s±Æ§Ç«ü¥Ü¾¹, ¨Ï¥Î¤F³æ¿Wªºªí®æÃþªº¤èªk. ¨ê·s­pºâ¥¿½Tªº«ü¥Ü¾¹¦ì¸m¨Ã©ñ¸m¥¦. ¥¦¥]§t¤F¨ê·s«ü¥Ü¾¹ªº¤èªk - «ü©ú¤£¦Pªº±Æ§Ç¤è¦V, ¨Ã¾A·í¦a³]¸m½bÀYªºÃC¦â¬°¦CÀYªº­I´º¦â. ÃC¦â­pºâ¨Ï¥ÎÃC¦â«G«×ÄݩʦʤÀ¤ñ¨Ó¹ê²{Åã¥Ü½u¬q¨Ó¼Ò¥é¥Y°_®ÄªG. ¥¦¤]«OÃÒ¦CÀYªº­I´º¦â«Ü²L©Î«Ü²`®É½bÀY¤]¬O¥i¨£ªº.

¥u¦b¹B¦æ®É¨Ï¥Î«ü¥Ü¾¹±±¨î¶µ¬O­Ó¤£¿ùªº¿ìªk. ¦bªí®æ¤¤, ¥¦³Ð«Ø©ó Init ¨Æ¥ó¨Ã¦bªí®æªº Destroy ¨Æ¥ó¤¤²M°£. ¹ï©ó¦h¦C±Æ§Ç§A¥i¯à­n¨Ï¥Î¤@­Ó°}¦C, ¥Î©ó«O¦s¬°±Æ§Ç¦C³Ð«Øªº©Ò¦³«ü¥Ü¾¹±±¨î¶µªº¤Þ¥Î, ©Î¦b¦CÀY¤¤«ö±Æ§Ç¤Þ¥Î¬°¦U¦C³Ð«Øªº«ü¥Ü¾¹.

¦bÂùÀ»®É¥H¸ê®Æ¼e«×­«½Õªí®æ¦C¼e

§A¥i¥H¦b±a¦³ªí®æ©Î¦CªíªºÀ³¥Îµ{¦¡¤¤¬Ý¨ì¤@­Ó¦³¥Îªº¥\¯à - ÂùÀ»¦CÀYªº resize °Ï¦Û°Ê½Õ¾ã¦C¼e¬°¦C¤¤Åã¥Üªº¸ê°Tªº¼e«×. ¦b¥Ü¨Ò¤¤§A¥i¥H¬Ý¨ì¦b¦CÀYªº DblClick ©M MouseUp ¨Æ¥ó¤¤§Ú­Ì¦p¦ó¦b¦CÀYªº resize °Ï±q¨ä¥Lªº¨Æ¥ó¤¤°Ï¤À¶}ÂùÀ». ³o·|¿Eµo auto-resizing ºtºâªk. ¥¦±q controlsource ¤¤±o¨ìÄæ¦ì¤j¤p, ¨Ã¥Î­«½ÆÄæ¦ì¤j¤p¦¸¼Æªº¦r¤¸ &O&(¥¦¾Ö¦³¦r¤¸ªº¥­§¡¼e«×)©M TxtWidth() ¨ç¼Æ­pºâ¦Cªº¶H¯À¼e«×. ¯S®íÄæ¦ì¦p³ÆµùÄæ¦ì©M±a¦³ªøªÅ®æªº¦r¤¸Äæ¦ì. ¥t¥~, ¦Cªº ControlSource ¹Bºâ¦¡¤£¯àµ¹¥X­nÅã¥Üªº³Ì¤j¦r¤¸¼Æ. ¤£ÂX®i¦C¼e¬°³Ì¤j¤j¤p¬O¤@­Ó¦nªº¿ìªk, ¥uÂX®i¬°¦C¤¤¤w¦³¸ê°Tªº¼e«× - ­n¾AÀ³¤j¦h¼Æ¦æ¸ê°T¦Ó¤£¦û¥Î§ó¦hªº¦C¼e. ¹ï©ó³oºØ±¡ªp, ±½´y·í«e°O¿ý¦ì¸mªþªñªº°O¿ý¨Ã­pºâ TxtWidth() ¨ç¼Æªð¦^ªº¹Bºâ¦¡µ²ªGªº³Ì¤j­È. ¸Ó­È±N¦¨¬°¦Cªº¼e«×. ¦ý¬O, ¦pªG·í«e°O¿ýªþªñªº©Ò¦³¦æªº­È³£¬OªÅ­È, ³Ì¦n«ü©w¤@­ÓÀq»{ªº¦C¼e, ¦p, ¦b¦CÀYªº DefaultWidth Äݩʤ¤ (¥¦¤]¥i¥Î©ó¤@¨Ç¨ä¥L³õ¦X).

ªí®æ³Z¬

§A¥i¥H¥Î®e¾¹±±¨î¶µ¦bªí®æ³æ®æ¤¤Åã¥Ü¥ô¦óªF¦è. ­n¨ê·s¦U¦æ¤¤ªº®e¾¹, ¦b Dynamic* Äݩʪº¹Bºâ¦¡¤¤§A¥i¥H¨Ï¥Î¨ç¼Æ½Õ¥Î. ¨ç¼Æ±N³Q¦Uªí®æ¦æ½Õ¥Î, ¦]¦¹¦b¸Ó¨ç¼Æ¥N½X¤¤§A¥i¥H­×§ï®e¾¹¤¤ªº¥ô¦óªF¦è¨Ã¨ê·s¥¦. ¦b½Õ¥Î³o¼Ëªº¨ç¼Æ®É°O¿ý·½¤¤ªº°O¿ý«ü¼Ð¬O¦b¥¿½Tªº¦ì¸m¤W.

­n²£¥Í¦h¦æªíÀY, ¦b VFP7 ¤¤¨Ï¥Î¦CÀYªº WordWrap ÄÝ©Ê. ¦b VFP6 ¤¤¦h¦æªíÀY¥i¥H¥Î½Æ»\¦b¦CÀY¤Wªº¼ÐÅÒ¥N´À, ©ÎÃþ¦ü©óªí®æ¦CÀYªº®e¾¹±±¨î¶µ (¥i¥H¦b Universal ªº¤U¸ü¸`¤¤¤U¸ü³o¼Ëªº¥Ü¨Ò).

­n¬°ªí®æªº¤£¦P³¡¤ÀÅã¥Ü tooltip, ¦b timer ¨Æ¥ó¤¤¥Î MROW() ©M MCOL() ¨ç¼ÆÀˬd·Æ¹«¦b¯S©w®É¶¡¤º¬O§_¨S¦³²¾°Ê¨ÃÅã¥Ü§A¦Û¤vªº±±¨î¶µ. ªí®æªº³¡¤À¥i¥H¥Îªí®æªº GridHitTest ¤èªk¨ÓÀˬd. (¦h¦æ/©_¯S ToolTip ±±¨î¶µ¥H¸Ó¤è¦¡³B²z, §A¥i¥H¬°¸Ó¥Î³~­×§ï¥¦; ¥i¥H¦b Universal ªº¤U¸ü¸`¤¤¤U¸ü³o¼Ëªº¥Ü¨Ò).

ªí®æÄµ§i

¤£­n¥Îªí®æ¦C±±¨î¶µªº "Value" Äݩʶi¦æ­pºâ. ­n±q­pºâ¤¤±o¨ì¸ê®Æ, ª½±µ³X°Ýªí®æªº§O¦W. ³o¬O¦]¬°¦b«D¬¡°Ê¦C¤¤ªº±±¨î¶µ³q±`¥Î©óªí®æ¥~Æ[ªº¨ê·s, ¨Ã¦]¦¹¥¦ªº Value Äݩʹï©ó·í«e¦æªº­È¬O¤£¥¿½Tªº.

¦CÀYÁ`¬Oªí³æ¤Wªº¨ä¥L VFP ±±¨î¶µ¤W¦Ó¤£ºÞ¥¦¬O³Q¦p¦ó¦w±Æ©Î©ñ¸mªº. ¨Ï¥Î³æ¿Wªºµøµ¡±±¨î¶µ¤]¦³¤@¨Ç¯ÊÂI.

¥Î RecCount() ©M·í«e RecNo() ­pºâÁa¦V±²°ÊÄæ¦ì¸m, ¤£·|¯u¥¿¦aÅã¥Ü°O¿ý¼Æ. ·í°O¿ý·½¬O¸g¿z¿ïªº©Î¥]§t¤j¶q¦³§R°£¼Ð°Oªº°O¿ý®É, ±²°ÊÄæ±`±`·|¥H¤£¥¿½Tªº¦ì¸mÅý¥Î¤á½k¶î. ¦b¦¹±¡ªp¤U«ØÄ³¨Ï¥Î¬d¸ß©Îµø¹Ï.

_________________
#############################
§Ö¼Ö¶ý«}¨t¦C©¯ºÖ¦v°t,³Ü¤Q¥þÂû´ö~­ì¨Ó©¯ºÖ¨º»ò²³æ!!

¾Ç·|VFP¨Ï¥ÎªÌªÀ°Ïªº·j´M,Code¤~·|§ó¦³½ì~
#############################
¦^³»ºÝ
À˵ø·|­û­Ó¤H¸ê®Æ µo°e¨p¤H°T®§
±q¤§«eªº¤å³¹¶}©lÅã¥Ü:   
µoªí·s¥DÃD   ¦^ÂÐ¥DÃD    VFP ·R¥ÎªÌªÀ°Ï ­º­¶ -> VFP °Q½×°Ï ©Ò¦³ªº®É¶¡§¡¬° ¥x¥_®É¶¡ (GMT + 8 ¤p®É)
²Ä1­¶(¦@1­¶)

 
«e©¹:  
±z µLªk ¦b³o­Óª©­±µoªí¤å³¹
±z µLªk ¦b³o­Óª©­±¦^ÂФ峹
±z µLªk ¦b³o­Óª©­±½s¿è¤å³¹
±z µLªk ¦b³o­Óª©­±§R°£¤å³¹
±z µLªk ¦b³o­Óª©­±¶i¦æ§ë²¼
±z µLªk ¦b³o­Óª©­±ªþ¥[ÀÉ®×
±z µLªk ¦b³o­Óª©­±¤U¸üÀÉ®×


Powered by phpBB © 2001, 2005 phpBB Group
¥¿Å餤¤å»y¨t¥Ñ phpbb-tw ºûÅ@»s§@