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 // 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 // uncomment only when needed for registration
//////////////////////////////////////////////////// ////////////////////////////////////////////////////
LCLType, Graphics, GraphType, ImgList, Menus, Forms, LCLType, Graphics, GraphType, ImgList, Menus, Forms,
@ -908,24 +908,22 @@ function MenuItemSize(AMenuItem: TMenuItem; AHDC: HDC): TSize;
var var
CC: TControlCanvas; CC: TControlCanvas;
begin begin
Result.cx := 0;
Result.cy := 0;
CC := TControlCanvas.Create; CC := TControlCanvas.Create;
try try
CC.Handle := AHDC; CC.Handle := AHDC;
Result.cx := 0; if IsVistaMenu then
Result.cy := 0;
if not AMenuItem.MeasureItem(CC, Result.cx, Result.cy) then
begin begin
if IsVistaMenu then if AMenuItem.IsInMenuBar then
begin Result := VistaBarMenuItemSize(AMenuItem, AHDC)
if AMenuItem.IsInMenuBar then
Result := VistaBarMenuItemSize(AMenuItem, AHDC)
else
Result := VistaPopupMenuItemSize(AMenuItem, AHDC);
end
else else
Result := ClassicMenuItemSize(AMenuItem, AHDC); Result := VistaPopupMenuItemSize(AMenuItem, AHDC);
end; end
else
Result := ClassicMenuItemSize(AMenuItem, AHDC);
AMenuItem.MeasureItem(CC, Result.cx, Result.cy);
finally finally
CC.Free; CC.Free;
end; end;