AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Transparente Bitmap im Listvie-Header?

Ein Thema von Mattze · begonnen am 20. Feb 2015 · letzter Beitrag vom 21. Feb 2015
Antwort Antwort
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#1

Transparente Bitmap im Listvie-Header?

  Alt 20. Feb 2015, 09:38
Hi,

Bitmaps kriege ich ja inzwischen problemlos in den Header einer Listview gezeichnet. (Den Sortierpfeil.)

Ich kriege diese Bitmap im Header aber nicht transparent. Habe alles mögliche probiert.
Per Google habe ich da bisher auch keine Lösung gefunden.
Evtl. geht das ja nicht, was ziemlich unangenehm wäre...

Weiß jemand, wie man eine Bitmap im oder in den Listview-Header transparent reinbekommt?

Gruß
Mattze
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.196 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Transparente Bitmap im Listvie-Header?

  Alt 20. Feb 2015, 10:10
Ist doch immer linke obere Ecke ist die Farbe die dann "durchsichtig" ist, oder? Ich habe nur einfach mal eine ImageList mit so einem kleinen Bild bestückt und im ListView SmallImages auf diese ImageList gesetzt.
Sieht aus wie im Anhang (16px).
Angehängte Grafiken
Dateityp: png Unbenannt.png (3,1 KB, 23x aufgerufen)

Geändert von Der schöne Günther (20. Feb 2015 um 10:14 Uhr) Grund: Anderes Bild
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#3

AW: Transparente Bitmap im Listvie-Header?

  Alt 20. Feb 2015, 11:03
Hi,

1. Soweit ich mich erinnere, geht das per Imagelist tatsächlich. Ich schrieb aber nichts von einer Imagelist, sondern einer Bitmap, die ich in den Header einfüge. Das geht auch und zwar direkt (per API). Für diese Bitmap kriege ich die Transparenz im Listview-Header nicht hin. Eine Imagelist ist hier nicht möglich, da es sich um eine Komponente handelt und die Zuweisung der Imagelist natürlich auch noch extern möglich sein sollte. (Das Umkopieren der Imagelist wäre zwar wahrscheinlich möglich, aber nicht so schön!)
2. Die gleiche Bitmap transparent auf den Canvas der Form gemalt - zum Test - funktioniert.
3. Falls Transparentcolormode der Bitmap auf tmFixed gesetzt ist, ist Transparentcolor immer die Farbe des Pixels in der "unteren linken Ecke".

Also, nochmal, wie kriegt man die Transparenz einer Bitmap im Listview-Header hin, die NICHT per Imagelist eingebaut wurde, sonder direkt per Header_SetItem(...) (aus der API)?

Gruß
Mattze
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#4

AW: Transparente Bitmap im Listvie-Header?

  Alt 20. Feb 2015, 11:52
Geht scheinbar nicht direkt.
a) Komplett selber zeichnen (Owner Draw).
b) Der Komponente eine zusätzliche versteckte Imageliste spendieren, in der die Bitmaps abgelegt werden.
c) Den Hintergrund vorher über die transparenten Teile der Bitmap mahlen (oder eine Kopie) und dann erst zuweisen.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Transparente Bitmap im Listvie-Header?

  Alt 20. Feb 2015, 11:55
Es geht mit Sicherheit. Die VCL wird mit Sicherheit auch nur das Image aus der Imagelist holen und die gleiche API intern aufrufen.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#6

AW: Transparente Bitmap im Listvie-Header?

  Alt 20. Feb 2015, 13:47
Hi,

@Neutral General: Ich glaube ja auch, dass es geht, aber wie? Per Google ist dazu nichts zu finden.

@Blup:
ad a)
Komplett selber zeichnen geht leider nicht, da sich die Hintergrundfarbe des Listview-Headers ändert, wenn man mit der Mouse da drauf ist. Und dann der Farbverlauf...
Da wäre der Aufwand einfach zuuu groß.
ad b)
Das geht leider auch nicht. Da die Listview und der Header die gleiche Imagelist verwenden, würde man bei einer "Runtimeänderung" nicht mehr zurecht kommen. (Ich meine, wenn ich zur Laufzeit noch Bilder in die Imagelist aufnehme oder ändere.)
Halt! Mal was probieren... Vielleicht funktioniert es, wenn man zur Laufzeit die entsprechenden Bilder in die externe Imagelist von der Komponente aus reinbringt oder, falls keine externe vorhanden ist, eine interne ("versteckte") benutzt. Mal sehen...
Ist aber sicher auch einiges an Aufwand...
ad c)
Siehe ad a). Sobald es da Farbänderungen gibt, wird es unübersichtlich.

Trotzdem: Eine direkte Methode wäre mir natürlich lieber und, wie Neutral General schreibt, ist es durchaus wahrscheinlich, dass es da was gibt. Mit der Imagelist kann es doch die Listview.

Gruß
Mattze
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:02 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