Haben die da was geändert?
Im XE sieht es so aus:
Delphi-Quellcode:
procedure TMenuItem.SetImageIndex(Value: TImageIndex);
begin
if Value <> FImageIndex then
begin
FImageIndex := Value;
MenuChanged(True);
end;
end;
procedure TMenuItem.MenuChanged(Rebuild: Boolean);
var
Source: TMenuItem;
begin
if (Parent = nil) and (Owner is TMenu) then
Source := nil else
Source := Self;
if Assigned(FOnChange) then FOnChange(Self, Source, Rebuild);
end;
Demnach bekommt niemand mit, wenn sich der ImageIndex ändert.
Der Teil wird hierbei leider nicht ausgeführt.
Delphi-Quellcode:
procedure TMainMenu.MenuChanged(Sender: TObject; Source: TMenuItem; Rebuild: Boolean);
var
NeedUpdate: Boolean;
begin
if (FWindowHandle <> 0) then
begin
NeedUpdate := UpdateImage; // check for changes before CM_MENUCHANGED does
if Source = nil then
SendMessage(FWindowHandle, CM_MENUCHANGED, 0, 0);
if NeedUpdate then
DrawMenuBar(FWindowHandle);
end;
inherited MenuChanged(Sender, Source, Rebuild);
end;
Nach der Änderung manuell das
Protected MenuChanged aufrufen oder direkt
Delphi-Quellcode:
//MainMenu.UpdateImage; // ist Private, aber geht vielleicht auch ohne
SendMessage(MainMenu.WindowHandle, CM_MENUCHANGED, 0, 0);
DrawMenuBar(MainMenu.WindowHandle);