lcl menus: fix regression and bugs from r51466 #62ef2702b3. remove OnDrawItem and keep OnAdvancedDrawItem only. Issue #26969

git-svn-id: trunk@51467 -
This commit is contained in:
ondrej 2016-02-01 07:13:06 +00:00
parent 62ef2702b3
commit bd20aff9d3
2 changed files with 17 additions and 12 deletions

View File

@ -842,12 +842,18 @@ var
ParentMenu: TMenu;
begin
ParentMenu := AMenuItem.GetParentMenu;
if (ParentMenu<>nil) and ParentMenu.OwnerDraw and Assigned(AMenuItem.OnMeasureItem) then
if (ParentMenu<>nil) and ParentMenu.OwnerDraw
and (Assigned(ParentMenu.OnMeasureItem) or Assigned(AMenuItem.OnMeasureItem)) then
begin
CC := TControlCanvas.Create;
try
CC.Handle := AHDC;
AMenuItem.OnMeasureItem(AMenuItem, CC, Result.cx, Result.cy);
Result.cx := 0;
Result.cy := 0;
if Assigned(ParentMenu.OnMeasureItem) then
ParentMenu.OnMeasureItem(AMenuItem, CC, Result.cx, Result.cy);
if Assigned(AMenuItem.OnMeasureItem) then
AMenuItem.OnMeasureItem(AMenuItem, CC, Result.cx, Result.cy);
finally
CC.Free;
end;
@ -861,7 +867,7 @@ begin
Result := VistaPopupMenuItemSize(AMenuItem, AHDC);
end
else
ClassicMenuItemSize(AMenuItem, AHDC);
Result := ClassicMenuItemSize(AMenuItem, AHDC);
end;
function IsFlatMenus: Boolean; inline;
@ -1210,6 +1216,7 @@ var
B: Bool;
ParentMenu: TMenu;
CC: TControlCanvas;
ItemDrawState: LCLType.TOwnerDrawState;
begin
ASelected := (ItemState and ODS_SELECTED) <> 0;
ANoAccel := (ItemState and ODS_NOACCEL) <> 0;
@ -1222,15 +1229,16 @@ begin
ParentMenu := AMenuItem.GetParentMenu;
if (ParentMenu<>nil) and ParentMenu.OwnerDraw
and (Assigned(AMenuItem.OnDrawItem) or Assigned(AMenuItem.OnAdvancedDrawItem)) then
and (Assigned(ParentMenu.OnAdvancedDrawItem) or Assigned(AMenuItem.OnAdvancedDrawItem)) then
begin
CC := TControlCanvas.Create;
try
CC.Handle := AHDC;
if Assigned(AMenuItem.OnDrawItem) then
AMenuItem.OnDrawItem(AMenuItem, CC, ARect, ASelected);
ItemDrawState := ItemStateToDrawState(ItemState);
if Assigned(ParentMenu.OnAdvancedDrawItem) then
ParentMenu.OnAdvancedDrawItem(AMenuItem, CC, ARect, ItemDrawState);
if Assigned(AMenuItem.OnAdvancedDrawItem) then
AMenuItem.OnAdvancedDrawItem(AMenuItem, CC, ARect, ItemStateToDrawState(ItemState));
AMenuItem.OnAdvancedDrawItem(AMenuItem, CC, ARect, ItemDrawState);
finally
CC.Free;
end;

View File

@ -108,8 +108,6 @@ type
mihtDestroy
);
TMenuDrawItemEvent = procedure(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; ASelected: Boolean) of object;
TAdvancedMenuDrawItemEvent = procedure(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; AState: TOwnerDrawState) of object;
TMenuMeasureItemEvent = procedure(Sender: TObject; ACanvas: TCanvas;
@ -131,7 +129,6 @@ type
FOnAdvancedDrawItem: TAdvancedMenuDrawItemEvent;
FOnChange: TMenuChangeEvent;
FOnClick: TNotifyEvent;
FOnDrawItem: TMenuDrawItemEvent;
FOnMeasureItem: TMenuMeasureItemEvent;
FParent: TMenuItem;
FMenuItemHandlers: array[TMenuItemHandlerType] of TMethodList;
@ -293,7 +290,6 @@ type
property Visible: Boolean read FVisible write SetVisible
stored IsVisibleStored default True;
property OnClick: TNotifyEvent read FOnClick write FOnClick;
property OnDrawItem: TMenuDrawItemEvent read FOnDrawItem write FOnDrawItem;
property OnAdvancedDrawItem: TAdvancedMenuDrawItemEvent read FOnAdvancedDrawItem write FOnAdvancedDrawItem;
property OnMeasureItem: TMenuMeasureItemEvent read FOnMeasureItem write FOnMeasureItem;
end;
@ -312,7 +308,6 @@ type
FItems: TMenuItem;
FOnAdvancedDrawItem: TAdvancedMenuDrawItemEvent;
FOnChange: TMenuChangeEvent;
FOnDrawItem: TMenuDrawItemEvent;
FOnMeasureItem: TMenuMeasureItemEvent;
FOwnerDraw: Boolean;
FParent: TComponent;
@ -368,6 +363,8 @@ type
property Items: TMenuItem read FItems;
property Images: TCustomImageList read FImages write SetImages;
property OwnerDraw: Boolean read FOwnerDraw write FOwnerDraw;
property OnAdvancedDrawItem: TAdvancedMenuDrawItemEvent read FOnAdvancedDrawItem write FOnAdvancedDrawItem;
property OnMeasureItem: TMenuMeasureItemEvent read FOnMeasureItem write FOnMeasureItem;
end;