我想在运行时更改工具栏的大小,以适应不同的屏幕分辨率。
我的工具栏位于TControlBar上,工具栏和ControlBar设置为自动调整大小。我有4个不同大小的TImagelists 16 * 16到48 * 48,我可以分配给工具栏。我发现当我分配较大的图像列表时控制栏和工具栏的高度增加但是当我选择较小的图像列表时不会缩小。我还发现工具栏的长度不会扩大,以适应更宽的图像。这是预期的行为吗?
我还发现在设计时我的最大图像列表48 * 48实际上已经加载了32 * 32图像。所有图像都来自一组图标,这些图标可以保存64 * 64,48 * 48 ......至16 * 16的图像。图像列表可以存储的图像大小是否有限制。每个图像列表包含36张图像。
procedure TfmIDEMain.SetIconSize(Large: Boolean);
begin
if Large then
case screen.PixelsPerInch of
96..111: ilTBIcons := ilMedIcons; // Large Icons - Low res
112..120: ilTBIcons := ilLargeIcons; // Large Icons - Hi Med
121..144: ilTBIcons := ilExLargeIcons; // Large Icons - hi res
end
else
case screen.PixelsPerInch of
96..111: ilTBIcons := ilSmallIcons; // Small Icons - Low res
112..120: ilTBIcons := ilMedIcons; // Small Icons - Med res
121..144: ilTBIcons := ilLargeIcons; // Small Icons - hi res
end;
tbFiles.Images := ilTBIcons;
tbEdit.Images := ilTBIcons;
tbBookmarks.Images := ilTBIcons;
tbCodeFolding.Images := ilTBIcons;
end;
上述例程根据屏幕分辨率和“Large”布尔值分配图像。我还应该做些什么来让工具栏和控制栏调整到小图像尺寸?
答案 0 :(得分:0)
正如您已经发现的那样, ToolBar 和 ControlBar 会将自己调整为 Imagelist 大小,如果它们已经不适合的话。这就是为什么在分配较小的 Imagelist 时它们不会缩小的原因。当您触发 AutoSize 时,即使工具栏也应调整其宽度,方法是将其设置为 False 和 True 。
对 Imagelist 大小的此反应会对 ScaleBy 功能产生影响,该功能在控件对DPI更改做出反应时使用。分配较大的图像列表会放大工具栏,以下ScaleBy将使用错误的基本尺寸。反过来,当DPI减少工具栏时,只要仍然分配了大的图像列表,它就无法相应减小其大小。
这需要以正确的顺序分配 Imagelist :