caoyin 发表于 2008-8-7 09:41:00

[求助]列表框数据超过256行怎么获取

在DCL对话框中,列表框超过256行,只能读取0~255行的数据,怎样读取256行及后面的数据??

ZZXXQQ 发表于 2008-8-7 11:36:00

<p>列表框是list_box吧。当数据量超过表高时表的右侧会出现流动条,我曾经用过三千多行数据没出问题。</p>

caoyin 发表于 2008-8-7 13:40:00

本帖最后由 作者 于 2008-8-8 8:51:46 编辑 <br /><br /> <p>;;LSP</p><p>(defun c:TT (/ id i lst flag)<br/>&nbsp; (if (and (&gt; (setq id (load_dialog "c:\\TEST.dcl")) 0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (new_dialog&nbsp;"TEST" id)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;;创建1000个测试数据<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (repeat (setq i 1000)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq lst (cons (itoa (setq i (1- i))) lst))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;;写入列表框<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (start_list "list")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (mapcar 'add_list lst)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (end_list)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (action_tile "accept" "(done_dialog 1)")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (action_tile "list" "(setq lin $value)")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq flag (start_dialog))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (unload_dialog id)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (= flag 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (mapcar '(lambda (x) (nth x LST)) (read (strcat "(" Lin ")")))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp; )<br/>)</p><p>//DCL</p><p>//多选列表框</p><p>TEST<br/>&nbsp; : dialog {<br/>&nbsp;&nbsp;&nbsp; : list_box {key= "list"; multiple_select=true; }<br/>&nbsp;&nbsp;&nbsp; ok_only;<br/>&nbsp; }</p><p>测试:</p><p>运行 TT 命令</p><p>将列表中数据全选,点确定,返回如下</p><p>命令: tt<br/>("0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14" "15" "16" <br/>"17" "18" "19" "20" "21" "22" "23" "24" "25" "26" "27" "28" "29" "30" "31" "32" <br/>"33" "34" "35" "36" "37" "38" "39" "40" "41" "42" "43" "44" "45" "46" "47" "48" <br/>"49" "50" "51" "52" "53" "54" "55" "56" "57" "58" "59" "60" "61" "62" "63" "64" <br/>"65" "66" "67" "68" "69" "70" "71" "72" "73" "74" "75" "76" "77" "78" "79" "80" <br/>"81" "82" "83" "84" "85" "86" "87" "88" "89" "90" "91" "92" "93" "94" "95" "96" <br/>"97" "98" "99" "100" "101" "102" "103" "104" "105" "106" "107" "108" "109" <br/>"110" "111" "112" "113" "114" "115" "116" "117" "118" "119" "120" "121" "122" <br/>"123" "124" "125" "126" "127" "128" "129" "130" "131" "132" "133" "134" "135" <br/>"136" "137" "138" "139" "140" "141" "142" "143" "144" "145" "146" "147" "148" <br/>"149" "150" "151" "152" "153" "154" "155" "156" "157" "158" "159" "160" "161" <br/>"162" "163" "164" "165" "166" "167" "168" "169" "170" "171" "172" "173" "174" <br/>"175" "176" "177" "178" "179" "180" "181" "182" "183" "184" "185" "186" "187" <br/>"188" "189" "190" "191" "192" "193" "194" "195" "196" "197" "198" "199" "200" <br/>"201" "202" "203" "204" "205" "206" "207" "208" "209" "210" "211" "212" "213" <br/>"214" "215" "216" "217" "218" "219" "220" "221" "222" "223" "224" "225" "226" <br/>"227" "228" "229" "230" "231" "232" "233" "234" "235" "236" "237" "238" "239" <br/>"240" "241" "242" "243" "244" "245" "246" "247" "248" "249" "250" "251" "252" <br/>"253" "254" "255")</p><p></p>

xxsheng 发表于 2008-8-8 08:48:00

本帖最后由 作者 于 2008-8-8 8:53:34 编辑

字符串的限制吧?

caoyin 发表于 2008-8-8 08:53:00

楼上能否说详细一点,谢谢

caoyin 发表于 2008-8-8 09:00:00

本帖最后由 作者 于 2008-8-8 9:07:09 编辑 <br /><br /> <p><font face="Verdana" color="#141452">(defun c:TT (/ id i lst lin flag)<br/>&nbsp; (if (and (&gt; (setq id (load_dialog "c:\\TEST.dcl")) 0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (new_dialog "TEST" id)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;;创建1000个测试数据<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (repeat (setq i 1000)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq lst (cons (itoa (setq i (1- i))) lst))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;;写入列表框<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (start_list "list")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (mapcar 'add_list lst)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (end_list)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (action_tile "accept" "(done_dialog 1)")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (action_tile "list" "(setq lin $value)")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq flag (start_dialog))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (unload_dialog id)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (= flag 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;;(mapcar '(lambda (x) (nth x LST)) (read (strcat "(" Lin ")")))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lin<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp; )<br/>)</font></p><p><font face="Verdana" color="#141452">好像跟 (read (strcat "(" Lin ")")) 没关系,好像是 $value 的值返回问题,上面的例子仍然返回</font></p><p>"0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 <br/>27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 <br/>53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 <br/>79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 <br/>104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 <br/>124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 <br/>144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 <br/>164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 <br/>184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 <br/>204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 <br/>224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 <br/>244 245 246 247 248 249 250 251 252 253 254 255"</p><p><font face="Verdana" color="#141452"></font></p>

byghbcx 发表于 2008-8-8 11:18:00

<p>用(setq lin (get_tile \"list\"))可以超过256</p>

caoyin 发表于 2008-8-8 11:33:00

byghbcx发表于2008-8-8 11:18:00static/image/common/back.gif用(setq lin (get_tile \\"list\\"))可以超过256

<p></p>不行啊,CAD 出错退出!!

caoyin 发表于 2008-8-8 13:54:00

顶上去

carrot1983 发表于 2008-8-8 14:24:00

<p>1.看不懂,你都有了lst,你就知道了列表0~999的内容了。还搞最后一句,</p><p><font face="Verdana" color="#141452">(if (= flag 1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;;(mapcar '(lambda (x) (nth x LST)) (read (strcat "(" Lin ")")))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lin<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )</font><br/>&nbsp; 看不懂</p><p>2.(action_tile "list" "(setq lin $value)") $value的意思是当你点到列表的时候的返回值,你没去点$value就是默认值</p><p>3.&nbsp;如果想要获取列表框中,你所选的值就是(nth lin lst),这个楼主知道。</p><p>4.<font face="Verdana" color="#141452">&nbsp;&nbsp; ;;写入列表框<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (start_list "list")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (mapcar 'add_list lst)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (end_list)</font></p><p><font face="Verdana" color="#141452">&nbsp;&nbsp;&nbsp;&nbsp; 行数是没有限制的。。。刚刚测了1万行,OK</font></p>
页: [1] 2
查看完整版本: [求助]列表框数据超过256行怎么获取