Immer diese Transparenz :D



  • also ich hab ne ListBox und im Hintergrund eine PictureBox.
    Ich wüsste wie ich mir den Windows Desktop anzeigen lassen kann (:D) aber nicht wie ich das Bild im Hintergrund sehen kann ?

    Frage ist glaube ich klar.



  • Frage ist nicht klar

    greetz KN4CK3R



  • ehrlich nicht ? OK

    Ich will den Hintergrund einer ListBox Transparenz machen, damit ich die Picture Box dahinter sehen kann, es nervt einfach, wenn das Bild verdeckt wird.
    Wenn ich die Playlist allerdings, was weiß ich schwarz mache und die Schrift weiß und dann alles schwarze Transparent, dann sehe ich den Despktop als "Hintergrund".
    Ganz abgesehen davon, dass alles andere Schwarze auch durchsichtig wird.
    Wie bewerkstellige ich das denn nun.



  • Schau dir mal die Eigenschaften 'TransparentColor', 'AlphaBlend' und 'AlphaBlendValue' bei der TForm an.



  • ok Alpha Blend kannte ich nicht werd ich machen, TransparentColorValue kannte ich.
    Ich probiers gleich aus.



  • Ist zwar auch gut aber nicht genau das was ich brauche.
    Kann ich der Liste nicht einfach eine "Transparent" Farbe zuweisen ?
    Ja Toll mit TransparentColorValue, aber dann seh ich ja den Desk, wie ich oben schon beschrieb.



  • Was du willst ist m.E. über Transparenz etc. nicht möglich.
    Du musst den ListBox-Canvas mit dem gewünschten Hintergrund "bemalen" und die ListBox-Items mittels CustomDraw selber zeichnen.



  • @Jansen, genau so sehe ichs auch 😃 .

    Alternativ und quick'n'dirty legt man diese ListBox auf ein eigenes transp. Formular ( meintest du das , Th69) ?

    Hatte ich schon getestet und läuft ganz gut...



  • kpeter schrieb:

    Alternativ und quick'n'dirty legt man diese ListBox auf ein eigenes transp. Formular ( meintest du das , Th69) ?

    hmm ja, das ist zwar umständlich und haut alles übern Haufen, aber evtl. mach ichs so, obwohl... hmmm ne ich glaub ich bleib bei dem völligen verstecken der Playlist. (ListBox)
    Aber ich könnte doch ein Haufen Labels zu Laufzeit erstellen, wenn ich sie verstecken.

    Wie mach ich das denn ?, wie weise ich da die Position und Aufschrift auf den erstellten Label zu, und wie lösch ich die wieder ?



  • Die Frage wird auch sein, ob deine Liste dann lesbar ist, wenn ein Hintergrund (PictureBox) die Schrift
    teilweise schlecht lesbar macht. Weiss ja nicht, wie deine Hintergründe gestaltet sind.
    Musst du entscheiden.

    Jansens Vorschlag bringt Programmieraufwand mit sich, ist aber echt machbar. Aber wenn das Ergebnis nicht befriedigt (s.o.), hast du einen Haufen Arbeit umsonst.

    edit: Zum Thema Labels zur Laufzeit mach am besten einen neuen Thread auf 😉



  • nun ich glaub das mit Canvas ist mir etwas zu schwer. Ich habe Canvas NOCH NIE benutzt.
    wie sollt ich das denn machen, bzw was gibts da für Member die das bringen was ich will ? (F1 ja ja, aber das sagt ja nicht: "Wollen sie den Hintergrund... ")

    EDIT: und diese möglichkeit hört sich im Falle eines resize o.ä sehr Fehleranfällig an

    EDIT 2: Canvas->BrushCopy ?

    EDIT 3: Oder ich hau ein Bild in den ListBox1 Hintergrund, das komplett schwarz ist und mach das Schwarz Transparent, dir Hilfe sagt mir glaub ich wie :).
    Doch das muss ich mir mit Canvas noch ansehen

    EDIT 4: Möglicherweise zu großes gefrickel, weil die Hintergrundbilgröße Variable ist und die ListBoxgrüße auch, abegesehen davon, das das ständig neugezeichnet werden muss.

    EDIT 5: "ListBox1->Canvas->Brush->Style = bsClear;"
    bringt kein Ergebnis, wird nur Kompiliert



  • Hier mal ein Ansatz, abgeleitet aus unserem FAQ-Eintrag zur farbigen ListBox.

    void __fastcall TForm1::ListBox1DrawItem(TWinControl *Control, int Index, TRect &Rect,
    		  TOwnerDrawState State)
    {
    	TRect R;
    	R.Top = ListBox1->Top;
    	R.Bottom = ListBox1->Top + ListBox1->Height;
    	R.Left = ListBox1->Left;
    	R.Right = ListBox1->Left + ListBox1->Width;
    	ListBox1->Canvas->CopyRect(ListBox1->ClientRect, Image1->Picture->Bitmap->Canvas, R);
    	ListBox1->Canvas->TextRect(Rect, Rect.Left, Rect.Top, ListBox1->Items->Strings[Index]);
    }
    

    Da sind noch Detailanpassungen erforderlich, aber das bekommst du schon hin.



  • Danke, aber das hat leider keine Wirkung, wann wird das OnDrawItem denn ausgelöst ?
    Weil ich hintergrundbild und Playlistfarbe zum Start laden lasse.
    Wie ruf ich das Event auf ? (Click Events sind ja einfach, das nicht so sehr)



  • Tim06TR schrieb:

    wann wird das OnDrawItem denn ausgelöst ?

    Wenn (in diesem Fall die ListBox) eine der Eigenschaften Style->OwnerDraw... hat.



  • ... wie in o.g. FAQ-Eintrag beschrieben.
    Ein bisschen Eigeninitiative ist doch noch drin, oder? 😉



  • Nun detailierte Informationen helfen beim Debug, vielleicht liegt es ja auch
    am anfänglichen Wechsel, aber ja ich beschäftige mich erst mal mit anderen Problemen, die keine Hilfe benötigen, ujnd ohne weiteres durchführbar sind.


Log in to reply