在多监视器系统上,"空白"VCL应用程序可以最大化,但启用了样式的相同应用程序(以及一个默认选择的应用程序)最大化不正确.我所看到的是窗口的右侧边缘延伸到第二台显示器(我的主要位于左侧).当我开始与其他Windows应用程序进行比较时,我注意到在Windows 7(至少)下,最大化的窗口甚至在左侧,右侧或底侧都没有非客户端边框.事实上,标准VCL(非样式)应用程序的行为方式相同,没有非客户端边界.
我该如何解决?我注意到TFormStyleHook有一个WMNCCalcSize的处理程序,我还没有解剖,但让我想知道VCL是否可能错误地处理这个消息以获得最大化的窗口.
启用toThemeAware时,VirtualTrees.pas 5.0.0版中的复选框处理显示已损坏.csUncheckedNormal的节点被绘制为checked + hot.
要使用DrawElement正确绘制未经检查的主题复选框,Details记录必须为:Element = teButton,Part = 3,State = 5.但是,当节点设置为csUncheckedNormal时,VirtualTrees.pas最终调用DrawElement,State = 1 .
似乎在VirtualTrees中声明了大量的间接和额外的常量,所以我不确定如何最好地解决这个问题.想法欢迎......
(甚至在屏幕上获取TVirtualStringTree并填充一些数据的最小代码在这里发布也有点冗长.除了基础知识之外,重现这一点所需要的只是在TreeOptions.MiscOptions中启用toCheckSupport,并设置Node.CheckType: = InitNode回调中的ctTriStateCheckBox.)
delphi virtualtreeview delphi-xe2 tvirtualstringtree vcl-styles
有没有办法阻止Indy在任何/所有HTTP状态上引发异常?
我对IgnoreReplies数组的理解是,它会阻止这些状态再次出现,但这不是我想要的.我希望所有状态都回来,而且没有一个可以引发异常.例如,有大量REST服务返回404,这被认为是完全"有效"的响应.
我真的不想在异常处理程序中使用我的代码的1/2,所以有没有办法让当前的Indy只返回一切?
在绘制 VCL 样式的窗口元素时,我遇到了绘制不正确的角的问题。在具有圆角的样式上,我在控件的边界矩形和样式的圆角窗口角之间的空间中得到一个白色背景。

上图是使用 Aqua Light Slate 运行的,但任何带有圆角的样式都会出现同样的问题。我错过了什么?
type
TSample = class(TCustomControl)
protected
procedure Paint; override;
end;
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
var
R: TRect;
S: TSample;
begin
R := ClientRect;
InflateRect(R, -20, -20);
S := TSample.Create(Application);
S.Parent := Self;
S.BoundsRect := R;
end;
{ TSample }
procedure TSample.Paint;
var
Details: TThemedElementDetails;
begin
Details := StyleServices.GetElementDetails(twCaptionActive);
StyleServices.DrawParentBackground(Self.Handle, Canvas.Handle, Details, False);
StyleServices.DrawElement(Canvas.Handle, Details, ClientRect);
end;
Run Code Online (Sandbox Code Playgroud)