![]() |
MenuItem Bitmap ändern geht nicht
Hallo community,
ich verwende dxgettext zum Übersetzen meines Programms. Nachdem ich mich mehrere Tage mit den Versuchen zur Lösung dieses Bugs beschäftigt habe, muss ich die Icons in meinem MainMenu explizit über die TMenuItem.Bitmap lösen; TImageList scheidet aus. TL;DR: MainMenu-Items sind *viel* breiter als sonst, alles sieht komisch aus. Es liegt definitiv an der TImageList des MainMenus. Auch die u.g. Lösung brachte keine Besserung. Auch TP_GlobalIgnoreClass von TMainMenu, TImageList etc bringen keine Besserung. (Bitte diesen Bug jetzt nicht hier diskutieren, danke!) Ich kann also keine ImageList in TMainMenu verwenden ohne das Problem! Anderes Thema, nur zum Hintergrund warum/DASS ich keine TImageList verwenden kann! Zitat:
Delphi-Quellcode:
Die erneute Zuweisung Breite/Höhe nur, dass es nicht daran scheitert, dass das Bild in einer falschen Größe wäre... Bitte einfach ignorieren, ist nur zum testen...
procedure TForm1.FormCreate(Sender: TObject);
begin Bmp1 := TPicture.Create; Bmp1.LoadFromFile('c:\test.bmp'); Bmp1.Bitmap.Width := GetSystemMetrics(SM_CXMENUCHECK); Bmp1.Bitmap.Height := GetSystemMetrics(SM_CYMENUCHECK); SetMenuItemBitmaps(MainMenu1.Handle, 0, MF_BYPOSITION, Bmp1.Bitmap.Handle, Bmp1.Bitmap.Handle); Hier ist es auch egal, ob ich MainMenu1.Handle verwende oder MeinMenuItem1.Handle. Es wird nichts sichtbar. Wenn ich im Objektinspektor zur Designzeit das Bitmap zuweise, geht es direkt. Woran liegt's, was kann man tun. Wie gesagt, ImageList scheidet aus. Danke! Edit:
Delphi-Quellcode:
So würde es gehen, da das Bild wohl nur mit dem Parent.Remove/Insertgeladen wird? Geht das nicht auch "richtig", ohne WorkArounds oder OwnerDraw?
procedure TGraphicResourceProvider.SetIconOnMenuItem(_ResourceName: string; _MenuItem: TMenuItem);
var bmp: Graphics.TBitmap; pic: TPicture; tmpParent: TMenuItem; tmpPos: integer; begin if not assigned(_MenuItem) then Exit; _ResourceName := trim(_ResourceName); pic := GetResourcePNGImageFromRCDATA(_ResourceName); if (not assigned(pic)) or (_ResourceName = '') then begin Exit; end; bmp := graphics.TBitmap.create; bmp.SetSize(GetSystemMetrics(SM_CXMENUCHECK), GetSystemMetrics(SM_CYMENUCHECK)); bmp.Canvas.Draw(0, 0, pic.Graphic); _MenuItem.Bitmap.Assign(bmp); FreeAndNil(bmp); tmpParent := _MenuItem.Parent; if assigned(tmpParent) then begin tmpPos := tmpParent.IndexOf(_MenuItem); tmpParent.Remove(_MenuItem); tmpParent.Insert(tmpPos, _MenuItem); end; |
AW: MenuItem Bitmap ändern geht nicht
Zitat:
Irgenwer hatte dazu gepatchte VCL-Units zur Verfügung gestellt. @UweRaabe warst Du das? Edit: Ja es war Uwe: ![]() Die sind allerdings nur für Delphi 10.2. Ich erinnere mich allerdings nicht mehr, was ich genau gemacht habe, um das Problem zu lösen, die gepatchten Units alleine funktionierten bei mir nicht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz