lostbalance 发表于 2013-8-18 23:37:33

求帮忙把修改表格文字的对齐点

以下是明经上分享的一个源码,作用是表格内的文字居中或左中对齐。
(地址http://bbs.mjtd.com/forum.php?mod=viewthread&tid=85506&page=1#pid453110)
因为不是免费共享的,我就不贴完整的源码了。
程序本身没有bug,但在实际使用中,发现左中对中太靠边了,就看了下程序。因为本人接触lisp没多久,所以有什么说的不对的望大家见谅。
程序在处理时,把文字作为vla对象处理。但我发现vla对象的左中定位点和文字的左中插入点不是同一位置。我试着把move中的(vlax-3d-point (getmlp e)) 改为文字本身的左中插入点,但不知道是函数写错了,还是其他的原因,没有成功。
希望有人帮忙修改下。
另外,还有个问题,repeat函数后面的(setq m……请稍候……")),这一段函数删了之后,就报错,这是为什么


;;主程序
(defun C:zdq()
(setq sSet (ssget '((0 . "*TEXT"))))
(repeat (setq m (sslength sSet))
    (princ (strcat "\n已完成" (itoa (1+ n)) "/" (itoa m) ",请稍候……"))
    (setq ename (ssname sSet n))
    (setq e (vlax-ename->vla-object ename))
    (vl-cmdf "boundary" "a" "o" "p" "" (getmcp e) "")
    (setq box (entlast))                  
    (vlax-put-property e 'Alignment acAlignmentMiddleLeft)
    (vla-move e (vlax-3d-point (getmlp e)) (vlax-3d-point (getmlp box)))
    (entdel box)
    (setq n (1+ n))
);end repeat
;;子程序
;;功能:通获取对象左中点
(defun getmlp (e / p1 p2 x1 y1 z1 x2 y2 z2 plist)
(if (= (type e) 'ename)
    (setq e (vlax-ename->vla-object e))
)
(vla-getboundingbox e 'p1 'p2)
(setq p1 (vlax-safearray->list p1))
(setq p2 (vlax-safearray->list p2))
(setq x1 (car p1)
      y1 (cadr p1)
      z1 (caddr p1)
)
(setq x2 (car p2)
      y2 (cadr p2)
      z2 (caddr p2)
)
(setq plist (list x1 (/ (+ y1 y2) 2.0) (/ (+ z1 z2) 2.0)))
)
;;子程序getmcp

ZZXXQQ 发表于 2013-8-19 07:51:03

进入循环前要对循环变量赋初值(setq n 0)

lostbalance 发表于 2013-8-19 19:33:52

ZZXXQQ 发表于 2013-8-19 07:51 static/image/common/back.gif
进入循环前要对循环变量赋初值(setq n 0)

感谢版主回复
赋值是附过了,因为版权(?)的问题,所以我把相关的代码贴出来,但还有些辅助的代码(比如文本提示之类的)就没贴,赋值这条漏贴了。
程序本身是可以运行的,没有bug。
个人感觉,文字作为vla对象是,定位点会变化。比如下图中,文字本身的定位点是蓝点。但用上述程序左对齐的时候,效果会和图中一样,是x本身的最左边点定位到线上。
所以,如何修改程序,才能使程序根据文字本身的定位点来定位。

gqh123456 发表于 2014-3-20 14:07:36

学习学习!
页: [1]
查看完整版本: 求帮忙把修改表格文字的对齐点