在字体大小后更改弹出行高

时间:2014-07-08 17:24:58

标签: delphi fonts delphi-5 popupmenu

我需要我的视觉障碍用户才能选择字体大小,大多数情况下我处理好了,但弹出菜单效果不佳,因为行高不会因字体大小而改变。

使用此...

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

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

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

2 个答案:

答案 0 :(得分:4)

OwnerDraw州的TPopupMenu属性的documentation

  

当OwnerDraw为true时,菜单项会收到一个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

答案 1 :(得分:1)

您还可以在表单中添加空白ImageList。将其Height属性设置为您需要的值。并将Images的{​​{1}}属性与此PopupMenu相关联。利润:)