Popupmenü: Hintergundbild?
-
Hi!
Wie kann ich in einem Popupmenü ein hintergrundbitmap zeichnen?MfG
Matthias
-
ich hab dir da mal was zusammengebastelt
es funzt, aber es gibt sicherlich noch eine clevere Lösungweise die methode jedem Menüeintrag (OnDrawItem) zu und setz die eigenschaft OwnerDraw vom popupmenü auf true
das hintergrundbild hole ich mir aus Image1, dass solltest du dann deinem programm anpassen (sprich, dass hintergrundbild aus einem TBitmap holen, da du ja sicherlich nicht das bild irgendwo auf der form zu liegen hast)void __fastcall TForm1::DrawItem(TObject *Sender, TCanvas *ACanvas, TRect &ARect, bool Selected) { TMenuItem *MenuItem = (TMenuItem*)Sender; // MenuItem aus dem Sender auflösen Graphics::TBitmap *Bmp = new Graphics::TBitmap; Bmp->Width = ARect.Width(); Bmp->Height = ARect.Height(); Bmp->Canvas->CopyRect(Bmp->Canvas->ClipRect, Image1->Canvas, ARect); // Bildstück aus Original kopieren ACanvas->Brush->Style = bsClear; // Brushstyle auf bsClear, da sonst der Text nicht Transparent ist ACanvas->Draw(ARect.Left, ARect.Top, Bmp); // Teilstück des Hintergrundbildes auf Popup-Menü zeichnen ACanvas->TextRect(ARect, 6, ARect.Top, StringReplace(MenuItem->Caption,"&","", TReplaceFlags() << rfReplaceAll)); // Text anzeigen delete Bmp; }
falls du dann noch die schriftart bzw farbe ändern willst (kommt aufs hintergrundbild an), dann kannst du dass vor "TextRect" noch vereinbarn
an dem wert selected kannst du dann noch feststellen, ob der zu zeichnende menüeintrag gerade ausgewählt ist oder nicht (ist nützlich, wenn man dass aussehen des selektierten eintrages anders gestallten möchte)