Einzelnen Beitrag anzeigen

Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
445 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: TMainMenu Darstellung in IDE und zur Laufzeit unterschiedlich

  Alt 23. Okt 2013, 21:29
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...
Angehängte Dateien
Dateityp: 7z VCL_MenuProblem.7z (2,7 KB, 4x aufgerufen)
Whookie

Software isn't released ... it is allowed to escape!
  Mit Zitat antworten Zitat