excel VBA 应该问题,想画一条线,显示在图片上,但现在只显示一下

weixin_45903952 2020-01-04 12:00:36

想在图中点三个点,坐标直接读取到表格内,并画线,现在读取坐标和画线也能成,只不过线显示一下就不见了
想法:
1、把画的线显示在最前端
2、按动按钮后,清除已画的线

https://www.lanzous.com/i8duv1i
...全文
353 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_45903952 2020-01-06
  • 打赏
  • 举报
回复
引用 5 楼 舉杯邀明月 的回复:
如果是插入到工作表中的“对象”,那必然在鼠标点击时会被选定。  用这种方案要想“不影响鼠标点击”是不现实的。 若你真想“完全受自己控制”,用VB6写 桌面应用算了,别用VBA。
看来要是用VBA想实现这种想法是不太可能了
舉杯邀明月 2020-01-06
  • 打赏
  • 举报
回复
如果是插入到工作表中的“对象”,那必然在鼠标点击时会被选定。
 用这种方案要想“不影响鼠标点击”是不现实的。

若你真想“完全受自己控制”,用VB6写 桌面应用算了,别用VBA。
weixin_45903952 2020-01-06
  • 打赏
  • 举报
回复
引用 1 楼 舉杯邀明月 的回复:
你用 GDI32的API画线?还“ GetDC(0) ”???
你知道这样画的线是画到哪去了吗…………那不消失才怪! 


既然是在 Excel中,那这些线就应该用“线条对象”插入到工作表中。
(都是Shape,其Type属性值 决定它显示为线、矩形、圆形等)

你的“想法1”有歧义,最前端指的是在哪些对象的“前”?
 如果是“特定表内的其它对象之前”用Shape对象自然没问题;
 但是要想在“所有表”、或所有工作簿,甚至“所有进程窗口”之前,那就只能是“直接画桌面之上”了。
不过这样有什么意义呢!(牵涉的其它方面问题太多,懒得说了)

想法2 也很简单呀,你自己“画”了哪些线,要管理起来呀!
 把这些“对象”管理起来了,要清除(删除、擦除)哪条线不是轻而易举的事吗!


还请大佬指导,我是想画在那个图片上,显示在图片上就行,再点左面的按钮就清除得了
weixin_45903952 2020-01-05
  • 打赏
  • 举报
回复
引用 1 楼 舉杯邀明月 的回复:
你用 GDI32的API画线?还“ GetDC(0) ”??? 你知道这样画的线是画到哪去了吗…………那不消失才怪!  既然是在 Excel中,那这些线就应该用“线条对象”插入到工作表中。 (都是Shape,其Type属性值 决定它显示为线、矩形、圆形等) 你的“想法1”有歧义,最前端指的是在哪些对象的“前”?  如果是“特定表内的其它对象之前”用Shape对象自然没问题;  但是要想在“所有表”、或所有工作簿,甚至“所有进程窗口”之前,那就只能是“直接画桌面之上”了。 不过这样有什么意义呢!(牵涉的其它方面问题太多,懒得说了) 想法2 也很简单呀,你自己“画”了哪些线,要管理起来呀!  把这些“对象”管理起来了,要清除(删除、擦除)哪条线不是轻而易举的事吗!
我的想法就是画一条线,最好是只显示在图上,但不影响鼠标点击,如果是用形状画线,点击到线条上,会把线条选中
weixin_45903952 2020-01-05
  • 打赏
  • 举报
回复
引用 1 楼 舉杯邀明月 的回复:
你用 GDI32的API画线?还“ GetDC(0) ”??? 你知道这样画的线是画到哪去了吗…………那不消失才怪!  既然是在 Excel中,那这些线就应该用“线条对象”插入到工作表中。 (都是Shape,其Type属性值 决定它显示为线、矩形、圆形等) 你的“想法1”有歧义,最前端指的是在哪些对象的“前”?  如果是“特定表内的其它对象之前”用Shape对象自然没问题;  但是要想在“所有表”、或所有工作簿,甚至“所有进程窗口”之前,那就只能是“直接画桌面之上”了。 不过这样有什么意义呢!(牵涉的其它方面问题太多,懒得说了) 想法2 也很简单呀,你自己“画”了哪些线,要管理起来呀!  把这些“对象”管理起来了,要清除(删除、擦除)哪条线不是轻而易举的事吗!
要怎么处理呢,代码都是抄下来的,还不是太理解
舉杯邀明月 2020-01-04
  • 打赏
  • 举报
回复
你用 GDI32的API画线?还“ GetDC(0) ”???
你知道这样画的线是画到哪去了吗…………那不消失才怪! 


既然是在 Excel中,那这些线就应该用“线条对象”插入到工作表中。
(都是Shape,其Type属性值 决定它显示为线、矩形、圆形等)

你的“想法1”有歧义,最前端指的是在哪些对象的“前”?
 如果是“特定表内的其它对象之前”用Shape对象自然没问题;
 但是要想在“所有表”、或所有工作簿,甚至“所有进程窗口”之前,那就只能是“直接画桌面之上”了。
不过这样有什么意义呢!(牵涉的其它方面问题太多,懒得说了)

想法2 也很简单呀,你自己“画”了哪些线,要管理起来呀!
 把这些“对象”管理起来了,要清除(删除、擦除)哪条线不是轻而易举的事吗!
让用户可以随时查找曲线上任意点的坐标(函数值) 附件的 .mht文件,是一个简单介绍贝塞尔三次插值的文档,可以用IE打开,更多贝塞尔插值的算法,可以用搜索引擎找 附件的 .xls文件,打开以后,会看见三个工作表,分别演示了 找一个数值在曲线上的一组对应点 找一个数值在曲线上的所有对应点 和贝塞尔曲线是怎样在通过每两个节点的(每一对输入的X-Y数值代表平面坐标系的一个点,称为节点,Excel的平滑曲线通过每一个节点) 要在其他Excel文档使用 BezireInt() 函数,需要按Alt+F11,双击模块一 复制所有文字 然后打开其他Excel文档按Alt+F11,插入---模块,然后粘贴所有文字 自定义函数的使用方法是: 在空白单元格输入 =BezierInt(X坐标的范围,Y坐标的范围,待查的数值) 函数就会返回一个包含六个元素的数组,分别是三个点的X,Y坐标 如: 你根据 a1:a4的数值作为X值,b2:b4的数值作为Y值,画了一个平滑线散点图 想查找c1的数值是不是在这条曲线上 就可以输入 =Index( BezierInt(a1:a4,b1:b4,c1) ,1,1) 得到曲线上第一个 X值=C1数值的点的X坐标 =Index( BezierInt(a1:a4,b1:b4,c1) ,1,2) 得到曲线上第一个 X值=C1数值的点的Y坐标 =Index( BezierInt(a1:a4,b1:b4,c1) ,1,3) 得到第2个 X值=C1数值的点的X坐标 =Index( BezierInt(a1:a4,b1:b4,c1) ,1,4) 得到第2个 X值=C1数值的点的Y坐标 =Index( BezierInt(a1:a4,b1:b4,c1) ,1,5) 得到第3个 X值=C1数值的点的X坐标 =Index( BezierInt(a1:a4,b1:b4,c1) ,1,6) 得到第3个 X值=C1数值的点的Y坐标 如果有多段曲线上的点包含C1的数值,那么可以增加输入参数,指定从哪个节点开始查找 =Index( BezierInt(a1:a4,b1:b4,c1,3),1,1) 得到从第三组X-Y数据开始查找, 返回第一个符合C1数值的点的X坐标 =Index( BezierInt(a1:a4,b1:b4,c1,3),1,2) 得到从第三组X-Y数据开始查找,返回第一个符合C1数值的点的Y坐标 函数默认输入数值是X值,要根据Y值找点的话,还可以增加输入参数, 指定输入的是Y值 =Index( BezierInt(a1:a4,b1:b4,c1,1,"Y"),1,1) 得到返回曲线上第一个 Y值=C1数值的点的X坐标如此类推......

1,488

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧