From e6e2178ca7019b8f7c95e77844984c9382e1b4ff Mon Sep 17 00:00:00 2001 From: wp_xyz Date: Wed, 27 Oct 2021 23:26:44 +0200 Subject: [PATCH] LCL/Menus: Fix owner-drawn menu having zero item size if not specified by OnMeasureItem. Issue #35972, patch by dmz73. --- lcl/interfaces/win32/win32wsmenus.pp | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/lcl/interfaces/win32/win32wsmenus.pp b/lcl/interfaces/win32/win32wsmenus.pp index 021f6a524d..a119a95bb7 100644 --- a/lcl/interfaces/win32/win32wsmenus.pp +++ b/lcl/interfaces/win32/win32wsmenus.pp @@ -25,7 +25,7 @@ uses //////////////////////////////////////////////////// // I M P O R T A N T //////////////////////////////////////////////////// -// To get as little as posible circles, +// To get as little as possible circles, // uncomment only when needed for registration //////////////////////////////////////////////////// LCLType, Graphics, GraphType, ImgList, Menus, Forms, @@ -908,24 +908,22 @@ function MenuItemSize(AMenuItem: TMenuItem; AHDC: HDC): TSize; var CC: TControlCanvas; begin + Result.cx := 0; + Result.cy := 0; + CC := TControlCanvas.Create; try CC.Handle := AHDC; - Result.cx := 0; - Result.cy := 0; - - if not AMenuItem.MeasureItem(CC, Result.cx, Result.cy) then + if IsVistaMenu then begin - if IsVistaMenu then - begin - if AMenuItem.IsInMenuBar then - Result := VistaBarMenuItemSize(AMenuItem, AHDC) - else - Result := VistaPopupMenuItemSize(AMenuItem, AHDC); - end + if AMenuItem.IsInMenuBar then + Result := VistaBarMenuItemSize(AMenuItem, AHDC) else - Result := ClassicMenuItemSize(AMenuItem, AHDC); - end; + Result := VistaPopupMenuItemSize(AMenuItem, AHDC); + end + else + Result := ClassicMenuItemSize(AMenuItem, AHDC); + AMenuItem.MeasureItem(CC, Result.cx, Result.cy); finally CC.Free; end;