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ösung

    weise 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)


Anmelden zum Antworten