The*_*ven 2 windows delphi winapi delphi-2010
以下代码是关闭我的应用程序.
procedure TfrmMain.btnClose1Click(Sender: TObject);
var
i : Integer;
begin
for i := 255 downto 0 do begin
frmMain.AlphaBlendValue := i;
application.ProcessMessages;
end;
Close;
end;
Run Code Online (Sandbox Code Playgroud)
将Windows性能设置为"让Windows选择......"
如果我将性能选项设置为"调整以获得最佳性能"
我在Delphi 2010和DelphiXE2上测试了这个,结果是一样的.这在Windows 7 Ultimate 64bit上进行了测试,如果这有任何区别的话.
至少可以说这种行为让我很困惑.
因此,就这一点而言,我不确定这是一个Windows 7错误,Delphi错误还是我缺乏知识.
至于修复...有没有办法判断Windows是否在垃圾图形/最大性能模式下运行,以便我可以在我的应用程序中禁用Alpha淡入淡出效果?
为清晰起见编辑:虽然我想修复淡入淡出我真正想要的是一种确定Windows性能设置的方法.
我正在寻找如何确定特定的Windows设置 - 当您进入Windows性能选项时,有3个选项卡.在第一个"视觉效果"选项卡上,有3个固定选项和第4个"自定义"选项.最小的我试图确定所选的选项是否是"调整以获得最佳性能",如果我可以更好地确定此选项卡上的设置.
感谢任何帮助.
您的代码的根本问题在于,无论机器的性能特征如何,您都在强制进行256次不同的更新.您不必使用255和0之间的每个alpha混合值.您可以跳过某些值并仍然具有平滑淡入淡出.
您需要考虑机器的实际图形性能.由于您无法预测,您应该在淡入淡出代码中考虑实时.无论机器的性能特性如何,这样做都能为您提供一致的褪色速率.
所以,这是一个简单的例子来演示将淡入淡出率与实时联系起来:
procedure TfrmMain.btnClose1Click(Sender: TObject);
var
Stopwatch: TStopwatch;
NewAlphaBlendValue: Integer;
begin
Stopwatch := TStopwatch.StartNew;
while True do
begin
NewAlphaBlendValue := 255-(Stopwatch.ElapsedMilliseconds div 4);
if NewAlphaBlendValue>0 then
AlphaBlendValue := NewAlphaBlendValue
else
break;
end;
Close;
end;
Run Code Online (Sandbox Code Playgroud)
褪色持续时间为1秒.您可以随时调整数学,以根据您的要求修改持续时间.即使在低性能机器上,此代码也会产生平滑的淡入淡出效果.
我还要评论你不应该drmMain在TfrmMain方法中使用全局变量.该TfrmMain方法已经可以访问该实例.是的Self.当然你可以省略Self.更ProcessMessages糟糕的呼吁是坏的.这允许重新处理排队的输入消息.你不希望这种情况发生.所以删除对的呼叫ProcessMessages.
您实际上询问有关检测调整以获得最佳性能的设置.但我认为那是错误的问题.首先,您应该修复淡入淡出代码,以使淡入淡出持续时间与图形性能无关.
完成后,如果用户要求较低质量的外观设置,您可能仍希望禁用淡入淡出.我认为你不应该寻找你提到的3个罐装选项中的一个.它们很可能是特定于Windows版本的.我个人会在最小化和最大化设置时将行为基于Animate窗口.我的理由是,如果用户不希望最小化和最大化动画,那么可能他们不希望窗口接近褪色.
以下是如何阅读该设置:
function GetWindowAnimation: Boolean;
var
AnimationInfo: TAnimationInfo;
begin
AnimationInfo.cbSize := SizeOf(AnimationInfo);
if not SystemParametersInfo(SPI_GETANIMATION, AnimationInfo.cbSize,
@AnimationInfo, 0) then
RaiseLastOSError;
Result := AnimationInfo.iMinAnimate<>0;
end;
Run Code Online (Sandbox Code Playgroud)
我认为您可能还会阅读大多数您可能关注的其他设置SystemParametersInfo.您应该能够通过遵循文档来了解如何执行此操作.
| 归档时间: |
|
| 查看次数: |
686 次 |
| 最近记录: |