我想要一些关于在高分辨率屏幕上调整工具栏大小的指导

时间:2017-12-08 17:45:57

标签: delphi

我想在运行时更改工具栏的大小,以适应不同的屏幕分辨率。

我的工具栏位于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”布尔值分配图像。我还应该做些什么来让工具栏和控制栏调整到小图像尺寸?

1 个答案:

答案 0 :(得分:0)

正如您已经发现的那样, ToolBar ControlBar 会将自己调整为 Imagelist 大小,如果它们已经不适合的话。这就是为什么在分配较小的 Imagelist 时它们不会缩小的原因。当您触发 AutoSize 时,即使工具栏也应调整其宽度,方法是将其设置为 False True

Imagelist 大小的此反应会对 ScaleBy 功能产生影响,该功能在控件对DPI更改做出反应时使用。分配较大的图像列表会放大工具栏,以下ScaleBy将使用错误的基本尺寸。反过来,当DPI减少工具栏时,只要仍然分配了大的图像列表,它就无法相应减小其大小。

这需要以正确的顺序分配 Imagelist

  • 在将控件缩放到更大尺寸
  • 后,必须分配更大的 Imagelist
  • 必须先分配较小的 Imagelist ,然后再将控件缩放到较小的尺寸