我可以在列表视图中制作鼠标选择矩形,就像在SysListView32中一样吗?

有没有办法使用SysListView32并在Delphi中使用它?
谢谢!
我使用WebBrowser-Control来查看文件夹的内容.
在窗口10上有一个Display-Bug,在重新排序内容后,当所选项目从下到上移动时.
让我们重现:
添加代码以导航到您的自定义文件夹,例如:
public Form1()
{
InitializeComponent();
webBrowser1.Navigate(@"C:\tmp\yourfolder\");
}
按名称列排序,选择第一个条目
按名称列排序以将项目移动到结尾
你会看到,滚动条,窗口和列表不同步.滚动条向上移动,但项目未移动到列表中的第一个位置.此项目仅在鼠标悬停后可见.还拖动滚动条一点,不能治愈这种不端行为.
有人知道如何克服这个问题吗?我想通过调用InvalidateRect或向挂钩的SysListView32发送WM_PAINT消息来强制shellfolderview重绘,但没有成功.
是的,我想用详细信息显示列表 - 查看:-).
怎么解决这个?
.net webbrowser-control syslistview32 shell32.dll windows-10
我有一个SysListView32应该托管数百万行,三列文本A,B,C每个<256个字符.
假设列B有很多次重复(例如:列A是文件名,列B是路径,每行是文件系统的文件),并且只有100k不同的值(而不是几百万).
是否可以避免ListViewGUI元素B列内容的RAM重复?
我们可以ListView只填充指向数组元素的指针(取自列B的不同值的100k元素数组),而不是重复数据吗?
如何修改它以使其工作?
LV_ITEM item;
item.mask = LVIF_TEXT;
item.pszText = "Hello";
...
ListView_SetItem(hList, &item);
Run Code Online (Sandbox Code Playgroud) 我有一个带有ListView('SysListView32')控件的应用程序,我想从中提取数据。该控件有4列,仅文本数据。
我一直在玩以下几行(在网上某处找到):
VALUE_LENGTH = 256
bufferlength_int=struct.pack('i', VALUE_LENGTH)
count = win32gui.SendMessage(TargetHwnd, commctrl.LVM_GETITEMCOUNT, 0, 0)
for ItemIndex in range(count):
valuebuffer = array.array('c',bufferlength_int + " " * (VALUE_LENGTH - len(bufferlength_int)))
ListItems = win32gui.SendMessage(TargetHwnd, commctrl.LVM_GETITEMTEXT, ItemIndex, valuebuffer)
Run Code Online (Sandbox Code Playgroud)
[上面的代码可能不是完全可执行的,因为我从不相关的内容中删除了它。但要旨肯定在这里。]
这似乎运行良好,但是我必须做错了-作为回报,我得到了各种几乎为零的数据缓冲区,而我没有寻找任何实际的文本内容。
有什么建议么?
谢谢,
Yonatan
这是我的代码:
public static string ReadListViewItem(IntPtr lstview, int item)
{
const int dwBufferSize = 1024;
int dwProcessID;
LV_ITEM lvItem;
string retval;
bool bSuccess;
IntPtr hProcess = IntPtr.Zero;
IntPtr lpRemoteBuffer = IntPtr.Zero;
IntPtr lpLocalBuffer = IntPtr.Zero;
IntPtr threadId = IntPtr.Zero;
try
{
lvItem = new LV_ITEM();
lpLocalBuffer = Marshal.AllocHGlobal(dwBufferSize);
// Get the process id owning the window
threadId = GetWindowThreadProcessId(lstview, out dwProcessID);
if ((threadId == IntPtr.Zero) || (dwProcessID == 0))
throw new ArgumentException("hWnd");
// Open the process with all access
hProcess = …Run Code Online (Sandbox Code Playgroud)