VBA UserForm Listview控件-鼠标点击坐标和定位

问题描述 投票:0回答:1

VBA 用户窗体,尤其是列表视图,在空间距离和坐标方面非常棘手。我试图解决的问题是: mousedown 事件给出像素中的坐标 - 如何将其转换为重新定位另一个用户控件所需的单位,并合并用户控件的宽度属性。

给出非常具体的问题: 我有一个包含多列和水平滚动条的列表视图。我想获取鼠标单击的选定行和列,然后将框架重新定位到鼠标单击的点。

谷歌搜索只得到了部分答案——没有解决完整的问题。

vba listview position userform
1个回答
0
投票

共有三种不同的测量单位。像素、缇和英制点。

  • 缇和英制点之间的转换很容易 - 1 英制 点是 20 缇。
  • 像素和缇之间的转换更困难 - 尽管许多解决方案很容易通过谷歌搜索到。它取决于 屏幕的像素密度。

一旦您获得了在像素、缇和英制点之间进行转换的函数/子函数,您就可以为每个不同的任务使用正确的坐标单位:

  • MouseDown
    事件给出以像素为单位的坐标。
  • HitTest
    (返回所选行的列表视图函数 - 尽管不是选定的列)采用缇为单位的坐标。
  • 列宽和所有其他用户控件宽度均为英制 点。
  • GetScrollPos
    (返回滚动条的Windows API函数 位置)给出一个以像素为单位的值。
  • 在用户窗体上重新定位用户控件需要英制点。
© www.soinside.com 2019 - 2024. All rights reserved.