是否有TBitBtn的替代方案可以在更高的屏幕分辨率下正确缩放-还是替代了一段可解决此问题的代码?

时间:2019-02-03 11:19:01

标签: delphi

我正在用自定义位图动态创建许多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;

1 个答案:

答案 0 :(得分:2)

尽管您没有提供示例,这给我们带来了很多猜测,但是我可以在您的代码中看到两个问题。

  1. 缩放到当前PPI是在分配给Parent的内部完成的。
  2. 如果“开始”是现有控件,则其“左”和“上”属性已经缩放,而使用的偏移以及“宽度”和“高度”的值可能没有。

为解决这两个问题,我建议使用以下代码序列:

  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;

顺便说一句,请避免 with