Nach all den Hinweisen hier - und einem leeren
VCL Projekt, dass auch keine Probleme gezeigt hat - habe ich das Programm einmal zerlegen und bin nun zu folgendem (mehr oder wenig zufriedenstellendem) Ergebnis gekommen:
Der Bösewicht heißt GetOrdProp() und ausgelöst wird das Ganze durch die Multilizer
VCL-Komponenten. Sie übersetzen das gesamte Projekt zur Laufzeit in verschiedene Sprachen und machen das mehr oder weniger automatisch, indem sie alle Objekte rekursiv durchlaufen und über GetOrdProp() feststellen ob ein String vorhanden ist, der übersetzt werden muss.
Dabei gelangen sie auch an die Bitmap-Eigenschaft des Menü-Items und in GetOrdProp wird festgestellt, das eine Klasse mit statischer GetProc vorhanden ist und diese aufgerufen. Das führt dann unweigerlich zum Aufruf von:
Code:
function TMenuItem.GetBitmap: TBitmap;
begin
if FBitmap = nil then FBitmap := TBitmap.Create;
FBitmap.Transparent := True;
Result := FBitmap;
end;
in
Vcl.Menus und damit wird jetzt eine TBitmap erzeugt (wohl gemerkt nur die Klasse - Height und Width bleiben 0), was dann in späterer Folge, wegen der Art und Weise wie Delphi zum Neuberechnen der Hotkeys gezwungen wird, zu meinem Problem führt.
Zum Glück kann man das Verhalten durch setzen von MainMenu.AutoHotKey := maManual umgehen.
Für alle die sich das trotzdem gerne einmal ansehen möchten habe ich ein kleines Demoprogramm angehängt, vielleicht gibt es ja eine elegante Methode AutoHotKey auf amAutomatic lassen zu können...
Das Programm muss nur compiliert werden ... "Burn!" alleine richtet keinen Schaden an, "Prepare hell.." auch nicht. Wird "Burn!" jedoch
nach "Prepare hell.." angeklickt ist das "datei"-menü gefährlich breit geworden...