Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi LIstview Eintrag aber nicht Icon markieren (https://www.delphipraxis.net/89444-listview-eintrag-aber-nicht-icon-markieren.html)

Guido Eisenbeis 6. Apr 2007 06:14

Re: LIstview Eintrag aber nicht Icon markieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
@DGL-luke

Zitat:

Zitat von DGL-luke
Hallo, könnte das ganz/teilweise einfärben mit der Transparenz zusammenhängen?

Die Sachen mit Transparenz, Mask, usw. hatte ich schon alle ausprobiert, bevor ich hier gepostet habe. Dennoch danke!


@bitsetter

Problem gelöst! Dein Code funktioniert wunderbar! :thumb:

Ich hatte mittlerweile zwar selbst eine Lösung gefunden, wobei ich StateImages statt SmallImages benutzte. Deine Lösung ist jedoch besser! Es wird damit gezielt genau das Gewünschte erreicht, nämlich dass die Icons nicht mitmarkiert werden. Und sie ist sauberer, denn die StateImages stehen damit für ihren normalen Zweck zur Verfügung.

In deinem Code war ein winziger Fehler drin, wobei in GetBitmap() Item.ImageIndex verwendet werden muss statt Item.Index. Ansonsten ist der Code genau das, was ich gesucht habe!

Desweiteren, wenn man im ListView eine andere Farbe als Weiß eingestellt hat, wurden die Icons trotzdem weiß hinterlegt. Damit sie transparent gemalt werden, habe ich DrawIconEx benutzt. Dies und ein paar kleine Feintunig-Änderungen befinden sich im angehängten Downlod. Den habe ich entsprechend der Lösung umbenannt in "Icon wird NICHT mitmarkieren (Demo) 4".


Vielen Dank an dich für die Lösung! Und an alle anderen für ihre Hilfestellung.

Guido.

Edit: Schreibfehler im Beitrag korrigiert.

bitsetter 6. Apr 2007 11:18

Re: LIstview Eintrag aber nicht Icon markieren
 
@Guido

Ein bisschen Arbeit wollte ich ja auch noch für dich übriglassen. :)

Dank deiner Änderungen funktioniert es natürlich jetzt noch besser, wieder was dazugelernt.

Guido Eisenbeis 7. Apr 2007 04:32

Re: LIstview Eintrag aber nicht Icon markieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo bitsetter.

Hier eine überarbeitete Version, bei der die Darstellung für inaktive ListItems implementiert ist. Vielleicht kannst du sie dir mal anschauen und sagen, ob du Verbesserungsvorschläge hast. Zum Beispiel ob es eine bessere Farb-Variable für "inaktiv" gibt. Derzeit verwende ich btnFace.

Dann fehlt jetzt nur noch eine Möglichkeit, die ListItems in der Höhe zu vergrößern, ohne dass die Schrift größer wird (und eine schöner Schrift wäre nicht schlecht :-D ).
Wie könnte ich das denn bewerkstelligen?

Gruß,
Guido.

bitsetter 7. Apr 2007 21:07

Re: LIstview Eintrag aber nicht Icon markieren
 
Zitat:

Zitat von Guido Eisenbeis
Zum Beispiel ob es eine bessere Farb-Variable für "inaktiv" gibt. Derzeit verwende ich btnFace.

btnFace ist korrekt
Delphi-Quellcode:
       
Brush.Color := clBtnFace;
Font.Color:= clBtnText;
Zitat:

Zitat von Guido Eisenbeis
Dann fehlt jetzt nur noch eine Möglichkeit, die ListItems in der Höhe zu vergrößern, ohne dass die Schrift größer wird (und eine schöner Schrift wäre nicht schlecht :-D ).
Wie könnte ich das denn bewerkstelligen?

Das wir wohl so einfach nicht möglich sein, wozu brauchst du das, etwa für größere Bilder?
Wenn ich noch was herausfinde melde ich mich.

Guido Eisenbeis 7. Apr 2007 22:00

Re: LIstview Eintrag aber nicht Icon markieren
 
Zitat:

Zitat von bitsetter
btnFace ist korrekt
Delphi-Quellcode:
       
Brush.Color := clBtnFace;
Font.Color:= clBtnText;

Alles klar, danke.

Zitat:

Zitat von bitsetter
Zitat:

Zitat von Guido Eisenbeis
... eine Möglichkeit, die ListItems in der Höhe zu vergrößern, ohne dass die Schrift größer wird ...

... wozu brauchst du das, etwa für größere Bilder?

Aus zwei Gründen:
1. evtl. für größere Bilder (zweitrangig)
2. vor allem um die Abstände zwischen den Reihen "luftiger" darzustellen. So dass die Icons nicht so aneinander kleben.

Mein Ansatz: die Schriftgröße des ListViews größer stellen (z. B. auf 14) und dann eine Möglichkeit finden, den Item-Text mit einer kleineren Schriftgröße ins Canvas zu zeichnen. Leider habe ich noch keine Möglichkeit gefunden, Text ins Canvas zu zeichen, mit einer Schrift die kleiner als die im ListView eingestellte ist. Schalte ich kurzzeitig um und wieder zurück, gerät die DrawItem-Routine in eine Endlosschleife.

Mal sehen, was sich da so findet.

Gruß,
Guido.

bitsetter 7. Apr 2007 23:54

Re: LIstview Eintrag aber nicht Icon markieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin,

das mit der Item Höhe habe ich jetzt mit einer Pseudo Imagelist gelöst, die Höhe der Liste ist die Item Höhe.
Was anderes fällt mir auch erst mal nicht ein.
Vom Prinzip her, könntest du jetzt auch größere Icone nehmen, musst vorher aber die Höhe und Breite der Imageliste anpassen. Das Gute ist, jetzt kannst du das Aussehen deines Listviews selber bestimmen.

Guido Eisenbeis 9. Apr 2007 19:29

Re: LIstview Eintrag aber nicht Icon markieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo bitsetter.

So, es ostert sehr! Deshalb hat meine Antwort auch ein bisschen gedauert. :)

Deinen obigen Code habe ich mir angesehen. Leider kann ich irgendwie nicht nachvollziehen, was das ListView anstellt, wenn man im ReportMode mit LargeImages arbeitet. Ich dachte, die hätten dann keine Auswirkung. Das ListView ist ein komisches Ding!

Das tut der Sache jedoch keinen Abbruch, dass dein Code funktioniert. Dafür meinen Dank!

Ich habe parallel dazu einen Code entwickelt, der eine andere mystische Kraft des ListViews nutzt. Ich stelle die Schriftgröße des ListViews zum Beispiel auf 14, fügt dann die ListItems hinzu und stelle hinterher die Schriftgröße wieder kleiner, zum Beispiel auf 8. Funktioniert nur beim Erstellen des ListViews und bei OwnerDraw:= true.

Nun behält das ListView die größere Zeilenhöhe bei, auch wenn zur Laufzeit weitere ListItems hinzugefügt werden. Die Zeichen-Routine im DrawItem-Event habe ich komplett überarbeitet. Sie funktioniert nun wirklich gut! Um das Zeichnen flackerfrei durchzuführen, benutze ich ein unsichtbares Bitmap. In diesem Bitmap werden zunächst die einzelnen Zeichenaktionen durchgeführt und danach in einem Rutsch ins ListView übertragen.

Wenn du willst schau's dir mal an. Wie gehabt: Über Verbesserungsvorschläge freue ich mich!

Gruß,
Guido.

PS: Da das Problem mit der Zeilenhöhe ein anderes ist, als das ursprüngliche dieses Topics, werde ich jetzt erstmal recherchieren und falls dann noch nötig, einen Thread zum Thema ListView-Zeilenhöhe öffnen.

Timi-loader 3. Mai 2007 19:42

Re: LIstview Eintrag aber nicht Icon markieren
 
ist es auch möglich den hintergrund des icons einzufärben?

mfg

bitsetter 3. Mai 2007 20:46

Re: LIstview Eintrag aber nicht Icon markieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

wie meinst du das mit dem Hintergrund des Icons einfärben, etwa so wie im Bild?

Timi-loader 3. Mai 2007 21:03

Re: LIstview Eintrag aber nicht Icon markieren
 
nja ich mein das nicht generell sondern nur beim selektieren.

mfg


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:03 Uhr.
Seite 2 von 3     12 3      

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