Kosmetischer Fehler bei zur Laufzeit erstellten Menü mit Einträgen und Seperator (Vista)
-
Turbo 2006 (Explorer)
-
*letzter Versuch*
-
Maverick schrieb:
Turbo 2006 (Explorer)
Das könnte daran liegen, daß die VCL in dieser Version den Menueintrag selbst zeichnet, wenn du Icons verwendest. Die erste ausdrücklich für Vista präparierte Version war C++Builder 2007, entsprechend wird das Problem in neueren Versionen vermutlich nicht mehr auftreten.
-
audacia schrieb:
Maverick schrieb:
Turbo 2006 (Explorer)
Das könnte daran liegen, daß die VCL in dieser Version den Menueintrag selbst zeichnet, wenn du Icons verwendest. Die erste ausdrücklich für Vista präparierte Version war C++Builder 2007, entsprechend wird das Problem in neueren Versionen vermutlich nicht mehr auftreten.
Gibt es dafür ein Workaround?
-
audacia schrieb:
Die erste ausdrücklich für Vista präparierte Version war C++Builder 2007, entsprechend wird das Problem in neueren Versionen vermutlich nicht mehr auftreten.
Stimmt scheinbar nicht. Habe heute Nacht die 2009 Trial ausprobiert, da gab es den selben Effekt. Selber Code (siehe erstes Post).
Gibt es ausser TMenuItem noch etwas um Menüeinträge zur Laufzeit hinzuzufügen?
-
In der Win32-API sind die Routinen zu finden, mit denen man auch ein Menü erzeugen kann.
Link: http://msdn.microsoft.com/en-us/library/ms647624(VS.85).aspx
Hast du mit dem Event OnDrawItem/OnMeasureItem schon probiert, das Problem zu lösen?
-
kpeter schrieb:
Hast du mit dem Event OnDrawItem/OnMeasureItem schon probiert, das Problem zu lösen?
Nein, das habe ich noch nie verwendet. Werde mir das mal durchlesen.
-
Aalso, hatte die 2009 Trial nochmal installiert. Also wenn man beim 2009 den obigen Code benutzt, kommt der "Optikfehler" ebenfalls, aber sobald man den Seperator erzeugt hat (ohne NewLine) und ihm dann nen ImageIndex zuweisst stimmt die Welt wieder. Dann sieht der erzeugte Menüeintrag nebst Einträgen wieder so aus, als wären sie im OI angelegt
Ich habe jetzt allerdings beim 2006 das Problem, dass, wenn ich dem Menü eine Imageliste zuweise die Optik unter Vista flöten geht. Weise ich keine Imageliste zu, siehen die Menüs (abgesehen ohne Icons) wieder aus wie "immer". (siehe Image Link im 2ten Post).
Ich weiss nicht was ich anders gemacht habe, habe allerdings eine Weile keine ImageList zugewiesen gehabt aus obigen Grund
-
Maverick schrieb:
Weise ich keine Imageliste zu, siehen die Menüs (abgesehen ohne Icons) wieder aus wie "immer". (siehe Image Link im 2ten Post).
Ich weiss nicht was ich anders gemacht habe, habe allerdings eine Weile keine ImageList zugewiesen gehabt aus obigen Grund
Alternativ zur ImageList kannst du den Items direkt die Bitmaps zuweisen, dazu musst du natürlich die Eigenschaft Images des Mainmenu ohne Eintrag
lassen.Bezogen auf deinen Code :
MainMenu->Images = NULL; // keine ImageList verwenden MainMenu->OwnerDraw = false; TMenuItem *Menu = new TMenuItem(MainMenu); TMenuItem *Entry = new TMenuItem(Menu); TMenuItem *Sep = new TMenuItem(Menu); TMenuItem *Entry2 = new TMenuItem(Menu); Menu->AutoLineReduction = maAutomatic; Menu->Caption = "Menu1"; Entry->Caption = "Eintrag1"; Sep->Caption = "-"; Entry2->Caption = "Eintrag2"; Entry->ImageIndex = -1; Entry->Bitmap->LoadFromFile("jp.bmp"); // od. LoadFromResourceName... MainMenu->Items->Insert(0, Menu); Menu->Insert(0, Entry); Menu->Insert(1, Sep); Menu->Insert(2, Entry2);
Zuletzt gibts immer noch die Option, OwnerDraw auf true zu setzen und alles selbst in das Event zu coden.
mfg
kpeter
-
kpeter schrieb:
Alternativ zur ImageList kannst du den Items direkt die Bitmaps zuweisen, dazu musst du natürlich die Eigenschaft Images des Mainmenu ohne Eintrag lassen.
Geht trotzdem nicht, tritt der selbe Effekt auf
kpeter schrieb:
Zuletzt gibts immer noch die Option, OwnerDraw auf true zu setzen und alles selbst in das Event zu coden.
Gibt es ein Tutorial dafür bzw. kannst du eines empfehlen?
-
Hi,
Maverick schrieb:
Gibt es ein Tutorial dafür bzw. kannst du eines empfehlen?
mir fällt da nur die BCB-Doku zu diesem Thema ein... Ansonsten die übliche Info-Beschaffung
Aber zur ganzen Problematik lies bitte mal nachfolgendes : http://msdn.microsoft.com/en-us/library/bb757020.aspx
Mit GetMenuItemInfo und SetMenuItemInfo kannst du das Aussehen des Menüs beeinflussen.
Leider hab ich kein Vista auf der Maschine...Hoffe, das hilft erst mal weiter.
mfg
kpeter
-
kpeter schrieb:
Aber zur ganzen Problematik lies bitte mal nachfolgendes : http://msdn.microsoft.com/en-us/library/bb757020.aspx
Danke! Gut ist, dass in dem Artikel auch dabei steht WARUM das Menü Theming unter Vista zerstört wird