【问题标题】:Why does scaling of controls differ between PC's?为什么 PC 之间控件的缩放比例不同?
【发布时间】:2012-06-06 03:04:05
【问题描述】:

我试图通过隐藏一些元素来给用户一个“干净简单”的界面。只有一个小箭头表示他可以展开主菜单栏的某些部分。全部关闭后是这样的:

打开后是这样的:

每个箭头都是一个位于面板左侧的 SpeedButton。通过单击按钮,宽度在 Speedbutton 的宽度(关闭)和设计时面板的宽度(打开)之间切换。设计时面板的宽度存储为常数。过程 show_hide_controls 处理这个:

procedure TCompose_Main.show_hide_controls (key: string; Button: TSpeedButton; Panel: TPanel; width: Int32);
begin
   if GPA.iKey [key] = 1
      then Panel.Width := width         // show panel, set panel to design width
      else Panel.Width := Button.Width; // hide panel, set with to button width
   Button.Glyph.Assign (nil);
   Images_Left_Right.GetBitmap (GPA.iKey [key], Button.Glyph);
end; // show_hide_controls //

这个例程调用如下:

show_hide_controls ('Show Play Controls', // index to panel to show/hide
                    Enlarge_Play,         // Speedbutton requesting the enlargement/hide
                    Panel_Play,           // Panel to show/hide   
                    cPlayWidth);          // Width of panel when shown 

现在有几个用户报告说面板的一部分被隐藏了,比如:

操作系统(Windows 7)似乎在缩放方面发挥了一些作用。我无法复制此错误。有谁明白这里发生了什么?是否有一种巧妙的方法可以以独立于设置的方式对此进行编程?

更新 正如 GDF 在他的回答中正确指出的那样,它与字体的缩放有关(控制面板 > 显示)。这在我的机器上表现得有些奇怪。将其更改为 150% 会产生轻微影响,而将其更改为 125% 会产生重大影响。正如您可能已经猜到的那样,我测试了第一个缩放比例而不是第二个缩放比例。只有当用户报告从 125% 缩减到 100% 时,我才能在我的机器上复制他的错误。

我找不到字体和我遇到的问题之间的关系,正如几位受访者所建议的那样。我的系统仍然受到我对 Courier(不是新的)、Segoe UI、Tahoma 和 MS Sans Serif 所做的所有测试的影响:-D。可能是间接的,因为控件可能会调整大小以适应文本。

如何处理?我不知道,我会开始试验,如果我发现了什么,会告诉你。

感谢大家的帮助!

【问题讨论】:

  • 我真的认为字体大小是主要因素,因为没有与之关联的文本的控件(例如左侧的图像按钮)似乎没有受到影响。我建议你使用面板的“Anchors”属性来保持它们的相对空间在左边,这样你至少可以减少视觉冲击。
  • @Jeferson - 我尝试了不同的字体大小,但无法复制问题。黄色三角形没有文字但消失了。
  • +1 和 Star,这个问题在我们的 Delphi 开发中很普遍,任何想要在 Delphi 中构建真正兼容的 GUI 的人都应该知道这个问题。
  • 我过去曾遇到过按钮从客户端 PC 上的打印预览窗口消失的经验。原来是客户端使用的 comm ctrl dll (ComCtl32.dll) 的版本是旧版本。为用户提供新的解决了这个问题。
  • 这只是我的客人,它与正在使用的 ComCtl32.dll 相关。也许向您的客户询问 dll 值得一试。谁知道也许某些 Service Pack 或 Hotfix 会更改此 dll?请参考link[/link]

标签: delphi windows-7 panel delphi-xe


【解决方案1】:

如果您的问题是我所相信的,那么您只是说出了答案。 Windows 7 使用缩放某些字体。当您在 PC 上安装 Win7 时,它会检查您的显示器尺寸,并根据您的显示器尺寸将“默认”比例设置为 100% 或 125%。问题是它同时将字体文件安装到计算机上。它为某些字体使用不同的“默认”字体文件。

我的猜测是您的应用正在使用 MS Sans Serif...这是根据 Win7 使用的(默认)比例获得不同字体文件安装的字体之一。

要验证这一点,让您的用户告诉您希望将比例设置为默认值,您可以通过右键单击桌面并选择“个性化”然后选择左下角的“显示”来查看。

以下链接向您展示如何将 in-use-font 文件更改回原始文件 http://www.rlvision.com/misc/windows_7_font_bug.asp

但是,我会尝试摆脱这种字体并更新布局元素以在 Win7 以及过去的操作系统上按需要工作

鉴于您提供的信息量有限,我认为您正在处理的事情......

更新 因为你在提到 125% 和 150% 之间的不同外观时提醒了我。我只是想确保您知道两个不同的 MS 无衬线文件在不同的比例下看起来更好。其中一个字体文件在 100% 和 150% 时看起来很棒,但在 125% 时看起来很糟糕。另一个字体文件在 125% 时看起来很棒,但在 100% 和 150% 时看起来很糟糕。

我不太记得哪个字体文件是哪个,但我知道这两个罪魁祸首是 1) SSERIFF.FON 2) SSERIFE.FON

【讨论】:

  • 谢谢。我会试试这个,然后回来找你。
  • GDF:应该使用什么默认字体?
  • @WarrenP:Tahoma、Verdana、Segoe UI 等等,任何 True Type 矢量字体(无需“阶梯”即可缩放)。更好的是:始终使用操作系统默认字体(从那以后就不是 MS Sans Serif 了……哦,我不记得了,Win 3.1?)
  • @WarrenP 我们 Delphi 人经常遇到的问题字体,至少我遇到的问题是 MS Sans Serif。 Windows 使用 2 种不同的字体文件,具体取决于默认的 Windows 系统比例。这两个文件都安装在系统上,但只有一个文件被设置为使用。请按照我在答案中包含的链接了解更多详细信息。
  • 当我们试图放弃 MS 无衬线字体时,在我工作的一个地方遇到了一些客户的回击,因为当通过终端服务器会话访问时,所有的真字体看起来都太可怕了。 MS Sans Serif 是一种经典的无提示非缩放固定大小字体,在低带宽远程桌面情况下看起来不错,而其他看起来像垃圾。叹息。
猜你喜欢
  • 2014-04-20
  • 1970-01-01
  • 1970-01-01
  • 2023-02-02
  • 2011-07-11
  • 2011-02-26
  • 1970-01-01
  • 2020-05-18
  • 1970-01-01
相关资源
最近更新 更多