Das mit der WncProc müsste tun, aber du musst den Code natürlich deinen Bedürfnissen anpassen. Das SystemParametersInfo kannst du dir komplett sparen, weil du die Anzeige ja (vorerst) erzwingen willst. Du müsstest den Code so gestalten, dass pauschal ODS_NOACCEL aus dem Set pDIS^.itemState entfernt wird. Vielleicht so:
Delphi-Quellcode:
procedure TYourForm.WndProc(var Message: TMessage);
const
ODS_NOACCEL = $100;
var
pDIS: PDrawItemStruct;
begin
if (Message.Msg = WM_DRAWITEM) then begin
pDIS := PDrawItemStruct(Message.LParam);
if (pDIS^.CtlType = ODT_MENU) then begin
pDIS^.itemState := pDIS^.itemState and not ODS_NOACCEL;
end;
end;
inherited;
end;
ODT_MENU steht allerdings für Owner-drawn menu. Insofern kann es sein, dass das genau wie der Weg via AdvancedDrawItem nur funktioniert, wenn OwnerDraw:= True ist. Weiß nicht, was MS als Owner-drawn bezeichnet, und ob das von dem abweicht, was die
VCL als Owner-drawn sieht.
Grüße
Dalai