我有一个 delphi 应用程序,它使用 LoadImage(Hinstance, PWideChar(Name), IMAGE_CURSOR, 0, 0, LR_DEFAULTCOLOR);
加载自定义鼠标光标。这些自定义光标的大小为 32x32、48x48 或 64x64,具体取决于用户的选择。如果我加载自定义光标并将鼠标移到应用程序之外,光标将更改为 Windows 默认(箭头)光标。但是这个箭头现在在光标的底部有瑕疵。
此外,工件会根据先前加载的自定义光标及其包含在例如中的大小而变化。 64x64 矩形。
我试图截取屏幕截图,但上面没有出现伪影。所以我画了这个现象来给你一个线索它看起来像什么。
到目前为止我发现了什么。必须应用以下列表中的所有要点:
- 只有当自定义鼠标光标大于 32x32 时才会发生。
- 它只发生在纵向模式的显示器设置上。
- 仅当鼠标阴影处于事件状态时才会发生。
- 只有在鼠标轨迹关闭时才会发生。
- 只有在拥有 NVIDIA 显卡时才会发生这种情况。
- 仅当 DPI 设置为 100% 时才会发生。
以下代码示例显示了光标的问题。新建一个VCL Form工程,添加到对应单元即可。
unit Unit6;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs;
const
crMyCursor = 1;
type
TForm6 = class(TForm)
procedure FormShow(Sender: TObject);
end;
var
Form6: TForm6;
implementation
{$R *.dfm}
procedure TForm6.FormShow(Sender: TObject);
begin
Screen.Cursors[crMyCursor] := LoadImage(Hinstance, PWideChar('MAINICON'), IMAGE_ICON, 0, 0, LR_DEFAULTCOLOR);
Screen.Cursor := crMyCursor;
end;
end.
更新: 它曾经是与 NVIDIA 显卡相关的问题。以下显卡出现伪影:GeForce 9600 GT、GeForce GT 630 和 GeForce GTX 660。我还测试了 Intel 板载显卡和 ATI 显卡,这些设置没有出现伪影。
那么谁能告诉我为什么会出现这些工件以及我如何摆脱它们?
最佳答案
这是由于图形驱动程序中的错误和 similar things occur for some ATI users还有。
但是,这不是 Delphi 或自定义鼠标的问题。
我遇到了完全相同的现象(鼠标光标下有奇怪的线条伪影),但就在桌面上,在我这边,纵向翻转的显示器(注意我运行的是 gtx680,所以你的列表不是'也不详尽)。
问题与阴影有关。 answers here工作,但显然,如果您喜欢阴影,则当前最佳答案(将显示器翻转回横向,然后在 Keep these settings?
提示处恢复)会更适合您。
关于windows - 为什么我在纵向显示器设置上有鼠标光标伪影?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26910546/