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

3 delphi fonts popupmenu delphi-5

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

使用这个...

puMenuMain.OwnerDraw:=True;
Screen.MenuFont.Size:=18;  // Actually selected from list by User or Helper
Run Code Online (Sandbox Code Playgroud)

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

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

Ser*_*yuz 5

文档OwnerDraw属性TPopupMenu状态:

当 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;
Run Code Online (Sandbox Code Playgroud)

哪里PopupMeasureItem可以简单到

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

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