LCL/Menus: Fix owner-drawn menu having zero item size if not specified by OnMeasureItem. Issue #35972, patch by dmz73.

(cherry picked from commit e6e2178ca7)
This commit is contained in:
wp_xyz 2021-10-27 23:26:44 +02:00 committed by Maxim Ganetsky
parent 6bad22c954
commit 08c83b5352

View File

@ -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;