【问题标题】:How Do I Add A TLabel To The Menu Bar in Delphi?如何在 Delphi 的菜单栏中添加 TLabel?
【发布时间】:2010-12-18 03:39:30
【问题描述】:

我使用Beyond Compare(一个很棒的程序),当它在菜单栏上显示“新版本可用”标签时给我留下了深刻的印象。我点击它,弹出一个安装新版本的框,它安装了,程序自己重启了,有新版本,没有标签了。

我认为这是一个很棒的功能。标签位于菜单栏的显眼位置,用户不会错过它。我已经有了更新程序,所以我所要做的就是添加标签。这应该很容易。

这是我想要的标签:
(来源:beholdgenealogy.com

... 错了。我不知道如何在那里添加标签。菜单栏及其上方的控制区域似乎是可视组件的放手区域。我无法在其中放置一个。

但我知道这是可以做到的,因为 Beyond Compare 是一个 Delphi 程序。

谁能告诉我我必须做些什么才能将 TLabel 放在我的菜单栏中,或者至少让它看起来在菜单栏上的正确位置?

作为参考,我使用的是 Delphi 2009。


结论:Christopher 似乎正确地理解了 Beyond Compare 人所做的事情。我决定实现菜单项,但没有定制他的“所有者绘制”解决方案。所以我没有得到蓝色粗体下划线超链接外观,但我也不会丢失所有者绘制跳过的所有自动内容(如 Vista 样式)。

为了将菜单项放在右侧,我在“帮助”之后添加了一个项目,该项目的标题为“ ”并且被禁用。

谢谢,克里斯托弗。我一直认为它一定是一个标签,但你看到了。

【问题讨论】:

  • 您确定 Beyond Compare 使用的是原生菜单 (TMainMenu)。也许是一些第三方菜单(Toolbar2000、DevEx、...)。
  • Ulrich:我不知道 Beyond Compare 使用什么。我只知道它是用 Delphi 开发的。
  • 如果它是用delphi制作的,通过检查资源应该很容易找到使用的组件。
  • 好主意。我应该看看我尊重使用的其他一些 Delphi 程序的组件。我可能会从中得到一些想法。
  • 如果我很好奇,我会使用 EDA/EN_DIS_ABLE(可在 heise.de/software/download/enable_disable_en_dis_able/7279delphipraxis.net/topic166020,0,asc,0.html 获得)。 :-)

标签: delphi user-interface label vcl


【解决方案1】:

你确定这是一个标签吗?

我没有使用过该程序,但它可能只是一个菜单项,设置为“所有者绘制”并绘制为看起来像一个链接?

http://sirmonkeys.com/images/updatelink.png
(在 Delphi 7 中完成)

procedure TForm1.MYITem1DrawItem(Sender: TObject; ACanvas: TCanvas;
  ARect: TRect; Selected: Boolean);
begin
  acanvas.Font.Style := [fsUnderline,fsbold];
  acanvas.Font.color := clblue;
  acanvas.Brush.Style := bsClear;
  acanvas.TextOut(arect.left+1,arect.top+1,'Link to Update...');
end;

procedure TForm1.MYITem1MeasureItem(Sender: TObject; ACanvas: TCanvas;
  var Width, Height: Integer);
begin
  width := 100;
end;

然后将 ImageList 分配给 MainMenu1.Images 或将MainMenu1.OwnerDraw 设置为true

【讨论】:

  • 这也许是可能的。我会试试的。
  • 现在我确定你是对的。谢谢。 P.S.,我的加速器(字母下的下划线)消失了。但是你的例子有他们。我如何让他们回来。我已经将 & 作为其标题的一部分。
  • 当您像要使用键盘来激活菜单时,加速器会自动出现,这意味着按下 Alt 键。 Christopher 可能按下了 Alt+PrntScr 来制作图像,因此出现了加速器指示器。大约 10 年来,这一直是 Windows 的默认行为。如果您希望它们始终可见,请在操作系统控制面板中调整显示设置。
  • Christopher 解决方案是如此精确的复制品,甚至重现了擦除菜单项显示区域上的菜单背景的错误(?)功能(?)。
  • @lkessler:除非修复了杀死加速器的 VCL 错误(请参阅您自己的问题 stackoverflow.com/questions/280247/…),否则您无法恢复加速器。
【解决方案2】:

Beyond Compare 的实现实际上是一个 TLabel。我们的菜单和工具栏使用 Toolbar 2000,因此支持直接在菜单上嵌入控件(具有正确的背景),并且它具有支持右对齐菜单项的优势。

【讨论】:

  • 谢谢,克雷格。所以它实际上是一个标签。从技术上讲,您有正确的答案(使用 Toolbar 2000),但我已经将它实现为一个未着色的菜单项,所以我将把接受的答案留给 Christopher。不知道你在 StackOverflow。爱你的超越比较。我用它来比较我的版本、更新我的网站和做我的备份。
猜你喜欢
  • 2015-02-17
  • 1970-01-01
  • 2014-06-23
  • 2016-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-03
  • 1970-01-01
相关资源
最近更新 更多