Changing Popup Row Height after Font Size

delphi, delphi-5, fonts, popupmenu

Solution

The documentation for `OwnerDraw` property for `TPopupMenu` states:

When OwnerDraw is true, menu items receive an OnMeasureItem and an OnDrawItem event when they need to be rendered on screen.

So assign a handler for `OnMeasureItem` of the items of the popup menu either at design time, or at run time:

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

where `PopupMeasureItem` can be as simple as

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

or you can determine the necessary height as the user selects from the list to save calling `TextHeight` each time an item is to be drawn.

Problem

I need my Visually impaired User to be able select a font size and mostly I have it handled OK, but Popup Menu is not working well as the Row height is not changed with Font Size. Using this... ``` puMenuMain.OwnerDraw:=True; Screen.MenuFont.Size:=18; // Actually selected from list by User or Helper ``` Works well for the Font Size, but the Row height is not changed. In other Components such as TDBGrid, a Font.Size change also changes the Row Height. How can I get the Popup Menus to adjust the Row Height for the selected Font.Size?

Original source