gpt4 book ai didi

delphi - 如何清除 TCanvas?或任何其他解决方案

转载 作者:行者123 更新时间:2023-12-03 19:05:45 27 4
gpt4 key购买 nike

我正在使用这个 TCanvas 为我的鼠标绘制光标

Canv := TCanvas.Create;
Canv.Handle := GetWindowDC(0);

……
对于每个老鼠事件,请执行以下操作
Bitmap:=TBitmap.Create;
CursorInfo.cbSize := sizeof(CursorInfo);
GetCursorInfo(CursorInfo);

Bitmap.Width := 32;
Bitmap.Height := 32;
Bitmap.Transparent:=true;

DrawIconEx(Bitmap.Canvas.Handle, 0,0, CursorInfo.hCursor, 32,32, 0,0, DI_NORMAL) ;

Bitmap.Canvas.Brush.Color := RGB(250,250,250);
Bitmap.Canvas.FloodFill(31,0, clWhite, fsSurface);
Bitmap.Canvas.FloodFill(0,0, clWhite, fsSurface);

currentX:=getcurrentxpos;
currentY:=getcurrentypos;

Canv.Draw(currentX,currentY,Bitmap);
Bitmap.Free;

问题不只是显示单个光标,它使 mouse trails .我可以在鼠标移动时清除整个 Canvas 吗? (虽然听起来不是一个好主意)。也许我可以清除我以前的 Canv.Draw通过执行该代码的相反操作(如果可能的话)?关于如何显示光标的任何建议?

编辑:
尝试插入另一个 Canv.Draw(currentX,currentY,Bitmap);就在设置位图宽度和高度之后……现在的问题是我有一条白色的轨迹(而不是鼠标轨迹),干净得多,但仍然不好。

最佳答案

你在桌面上绘图,这是你永远不应该做的事情,因为它不可靠。据我了解,您希望找到一种在桌面上绘制鼠标光标的方法,当鼠标再次移动时,“撤消”您的最后一次绘制并在新坐标处重新绘制鼠标。想象一下:您将鼠标移到备忘录框上的某个位置,将手移到键盘上,键入内容,然后再次移动鼠标。老鼠下的形象变了!

你可以做什么:创建一个鼠标光标形状的表格,有已知的技术可以做到这一点。让你的伪光标保持在顶部(你也会遇到一些问题,因为 Windows 不再喜欢保持在顶部的东西)。这不会是一件容易的事,但它是可以管理的,而且是按照规则来玩的。

对您到目前为止所获得的内容进行一点代码审查,因为我发现了我认为这是一个错误的地方,您应该知道。修复此问题不足以解决您的问题,您需要停止在桌面上绘图:

不要释放保存透明光标图像的位图,如果在应用程序的生命周期内保留:您将节省 RAM 和 CPU。这对于需要对老鼠的运动使用react的东西至关重要。

关于delphi - 如何清除 TCanvas?或任何其他解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3226310/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com