有没有在更高的屏幕分辨率正确地扩展到TBitBtn一个选择 - 或替代的一段代码,修复这个问题?

问题描述 投票:0回答:1

我动态创建多个TBitBtn的自定义位图。作品不错,但如果屏幕高分辨率 - 这会导致定位和大小改变。窗体上的其他控件不会受到影响。

不知道什么尝试。

  BitBbegersopp:= TbitBtn.Create(Form2);
  with BitBbegersopp do
   begin
    Parent:=Form2;
    Glyph.LoadFromFile('beger.bmp');
    OnClick:= BitBbegersoppClick;
    Left:= Start.Left + HDistStartB + 0*HSpacingBitB;
    Height:= HSizeBitB;
    Width:= VSizeBitB;
    Top:= Start.Top + VDistStartB + 0*VSpacingBitB;
    Hint:= 'Begersopp, sporer på oversiden';
    ShowHint:= True;
    Tag:= 1;
   end;
delphi
1个回答
2
投票

你虽然没有提供一个例子,这给我们留下了很多猜测,我可以看到在你的代码的两个问题。

  1. 缩放到当前的PPI被分配给母公司内部完成。
  2. 如果开始是现有的控制,它的左和Top属性已经缩小,同时使用以及宽度和高度值的偏移量也有可能不是。

要解决这两个问题,我建议下面的代码序列:

  BitBbegersopp:= TbitBtn.Create(Form2);
  with BitBbegersopp do
   begin
    Glyph.LoadFromFile('beger.bmp');
    OnClick:= BitBbegersoppClick;
    { use unscaled values }
    Left:= HDistStartB + 0*HSpacingBitB;
    Height:= HSizeBitB;
    Width:= VSizeBitB;
    Top:= VDistStartB + 0*VSpacingBitB;
    { this will scale the control }
    Parent:=Form2;
    { Now uses scaled values }
    Left:= Start.Left + Left;
    Top:= Start.Top + Top;
    Hint:= 'Begersopp, sporer på oversiden';
    ShowHint:= True;
    Tag:= 1;
   end;

顺便说一句,请避免!

© www.soinside.com 2019 - 2024. All rights reserved.