 |
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¸ü.
|
¤W¤@½g¥DÃD :: ¤U¤@½g¥DÃD |
µoªí¤H |
¤º®e |
Ruey
µù¥U®É¶¡: 2003-03-12 ¤å³¹: 1698 ¨Ó¦Û: tunglo
²Ä 1 ¼Ó
|
µ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À³¥Îµ{¦¡¦³¤@Óªí®æ§@¬°¤@Ó¥Dnªº±±¨îªí³æ - ½ÆÂøªº±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ªGn¥´¯} 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±Nn¨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§An³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¤Wz¦óºØ±¡ª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¤Wzªº¥ô¦óªí®æ 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¦¸ªí®æ±Nn«º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ùتº¥Dn¿ù»~¤]¥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½Õ¥Î¨Ó¦bn¨Ï¥Îªº§O¦W·Ç³Æ¦n«á²K¥[ªí®æ¨ìªí³æ.
3. ªí®æªº¦Û¤v«ºc¦b¦C¼Æ§ïÅܬ°¹s©Î -1 µo¥Í. §Ú§Æ±æ§A¤£n³o¼Ë°µ(«ü³]¸m ColumnCount ¬° 0 ©Î -1), §A³o¼Ë°µ¤F¶Ü? Á`¤§, ¥¦¥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. ³on¨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¤JnÅã¥Üªº¹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
¤Wz¥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¤Wz²³æªº¹Á¸Õ«á, Åý§Ų́Ӳ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³]¸mn¨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ºâ¦¡¥Í¦¨ªºÄæ¦ì¥Î¤Wz¤èª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¥[¨ì«ezªº¹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, ¨Æ¥óªº¥Dn¥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¦³¾÷·|¥Î¤Wz¤èª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±ªº´yz). ·í§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´Nn¨Dpºâªí®æ¤¤ªº³æ®æªº·Ç½T¦ì¸m¥H«K¥Î§Aªº±±¨î¶µ¨Ó½Æ»\¥¦. ³oӨƱ¡¤£¤Ó¦n°µ, ¦C§Ç¥i¯à§ïÅܤF, ªí®æ¥i¯à±²°Ê¤F, ¶ÈÀò±oµJÂIªºªí®æ¥i¥Hpºâ¦æ¸¹µ¥µ¥. ¦b³oùاڻ¡©ú¤@ºØ¦p¦ópºâ¦ì¸mªº¤@¯ë¤èªk.
¥t¤@Ón¨Dpºâ·Ç½T¦ì¸mªº²z¥Ñ¬O©ñ¸m±Æ§Ç¼Ð°O¨ìªí®æ¦C¤W¨Ó«ü©úªí®æ¬O«öþ¤@Ó¦C¶i¦æ±Æ§Çªº. ¹ï©ó³o¤@ÂI°¦n¨Dpºâ¦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±´yz¹Lªº¤èªk
* °O¿ý¼Ð°O©M§R°£¼Ð°Oªº§ïÅÜ, ¥H¤Î±²°ÊÄæªº¥H½sµ{¤è¦¡ªº§ïÅÜ; §A¥i¥H¦bªí®æÃþ¤¤©w¸q¬ÛÀ³Äݩʪº Assign ¤èªk¨Ó®·®»¥¦Ì
* Partition, RowHeight ¤Î HeaderHeight §ïÅÜ - ¦bªí®æªº MouseUp ¨Æ¥ó¤¤¥ÎÃþ¦ü©ó«ezªº¦CÀY¤èªk¨Ó®·®»¥¦Ì - «O¦sìȨìªí®æÄݩʤ¤¨Ã¦b MouseUp ¨Æ¥ó¤¤¥Î·sȤñ¸û¥¦Ì¥H½T©w¬O§_µo¥Í¤FÅܤÆ.
¦]¬°n¦b³\¦h¦a¤èpºâ¨Ó§ó·s±±¨î¶µªº¦ì¸m, ¦bpºâ¦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ªGn¦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´yzÃö©ó³æÀ»¦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¨ýµÛ´yzªº¤èª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±´yz¹Lªº¤èªk - ¨Ï¦CÀYÃþ¸òÂܦCªº«½Õ¤j¤p©M²¾°Ê¨Ó°Ï§O¥¦¥u¬O¦b³æÀ»¦CÀY. ·íµM, ³o±Nn¨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¾¹¸òÂÜ·í«en±Æ§Çªº¬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¸Ó¥\¯àªº¥Dn³¡¤À. ¦³¦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°£, ©Î¦bn¨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±Nn¨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±´yz).
¦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±`³on¨DÂà´«©Ò¦³ªº¹Bºâ¦¡¬°¦r¤¸«¬¨Ã¨î¥¦Ìªºªø«×¤£¤j©ó 240 ¦r¤¸ (©Î¦b¨Ï¥Î¤F ¤ñ¸û§Ç¦C®É¬° 120 ¦r¤¸). ¥t¥~, «ÜÃø¹ê²{¦¹ºØ±¡ªp¤Uªº¬Y¦Cn¨D°¾±Æ¦C¦Ó¨ä¥L¦C¨Ï¥Îª@¾±Æ¦Cªºn¨D. ³on¨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¦CP¨Ï¥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¤Un¨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³on¨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, ¦ý³on¨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¨Ç¨Æ¥ó©Mn¨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. ¨ê·spºâ¥¿½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ºâ¦¡¤£¯àµ¹¥XnÅã¥Üªº³Ì¤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±qpºâ¤¤±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¤~·|§ó¦³½ì~
############################# |
|
¦^³»ºÝ |
|
 |
|
|
±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§@
|