【问题标题】:Changing Popup Row Height after Font Size在字体大小后更改弹出行高度
【发布时间】:2014-07-08 17:24:58
【问题描述】:

我需要我的视障用户能够选择字体大小,并且大多数情况下我都可以正常处理,但弹出菜单无法正常工作,因为行高没有随字体大小而改变。

使用这个...

puMenuMain.OwnerDraw:=True;
Screen.MenuFont.Size:=18;  // Actually selected from list by User or Helper

适用于字体大小,但不会更改行高。在 TDBGrid 等其他组件中,Font.Size 更改也会更改行高。

如何让弹出菜单调整所选 Font.Size 的行高?

【问题讨论】:

    标签: delphi fonts delphi-5 popupmenu


    【解决方案1】:

    OwnerDrawdocumentation 属性为 TPopupMenu 状态:

    当 OwnerDraw 为真时,菜单项会收到一个 OnMeasureItem 和一个 需要在屏幕上呈现时的 OnDrawItem 事件。

    因此,在设计时或运行时为弹出菜单项的OnMeasureItem 分配一个处理程序:

    puMenuMain.OwnerDraw:=True;
    Screen.MenuFont.Size:=18; 
    for i := 0 to puMain.Items.Count - 1 do
      puMain.Items[i].OnMeasureItem := PopupMeasureItem;
    

    PopupMeasureItem 可以这么简单

    procedure TMyForm.PopupMeasureItem(Sender: TObject; ACanvas: TCanvas;
      var Width,   Height: Integer); 
    begin
      Height := ACanvas.TextHeight('.') + 2;
    end;
    

    或者您可以在用户从列表中选择时确定必要的高度,以保存每次绘制项目时调用TextHeight

    【讨论】:

      【解决方案2】:
      1. 在表单中添加一个空的ImageList 组件。
      2. 将其Height 属性设置为您需要的值。
      3. 将您的PopupMenuImages 属性与此ImageList 关联。
      4. 利润! :)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-22
        • 1970-01-01
        • 1970-01-01
        • 2015-07-04
        相关资源
        最近更新 更多