![]() |
LIstview Eintrag aber nicht Icon markieren
In einem Listview wird beim Markieren der jeweilige Eintrag eingefärbt (zum Beispiel blauer Hintergrund mit weißer Schrift). Hat dieser Eintrag nun ein Icon, so wird das Icon ebenfalls eingefärbt. Aber auch nicht immer! Manche Icons werden eingefärbt, andere nicht. :gruebel:
Ich will nun dass nur die eigentlichen Einträge (also der Text) gefärbt wird und die Icons sollen NICHT gefärbt werden. Ich habe nun selbst etliches ausprobiert, von den Einstellungen des ImageList bishin zum Einrichten einer eigenen Spalte nur für die Icons. Hierbei soll jedoch auch beim Klicken auf das Icon der (Text-) Eintrag markiert werden. In der DP habe ich nun gesucht unter dem Stichwort "Listview". Es wurden 1.312 Thread aufgezeigt, wovon ich 1.313 :wink: durchgelesen habe. Lediglich bei der Eingrenzung mit "Icon" war ein 'halber' Treffer dabei: ![]() Wie kann ich also erreichen, dass beim Markieren eines Listview-Eintrags nur der Text und nicht das Icon gefärbt wird? Guido. |
Re: LIstview Eintrag aber nicht Icon markieren
hi...
hast du ein gewisses Muster erkannt, wann das Icon markiert wird und wann nicht?? Am besten stellst du gleich ma das ganze Projekt hoch, dann kann ich ja mal (in ner freien Minute) einen Blick drauf werfen?! falls es nicht zu gross ist... Gruss enemyleft |
Re: LIstview Eintrag aber nicht Icon markieren
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo enemyleft.
Ich dachte schon, es würden garkeine Antworten mehr kommen. :wink: Oder dass dieses Problem zu popelig ist!? :stupid: Doch nun im Ernst: Zitat:
Zitat:
Viel Erfolg beim Testen und Finden einer Lösung! Guido. |
Re: LIstview Eintrag aber nicht Icon markieren
Liste der Anhänge anzeigen (Anzahl: 1)
Guten Morgen
Also ich entwickle mit BDS2006 und habe das mal so kompiliert wie ichs erhalten habe! Ich habe die Ausführbare Datei mal hochgestellt... Also ich sehe bei mir kein Problem?! :gruebel: Einzig bei Item 1 (unter Item von Item 0) ist kein Icon dran. Schau dir doch bitte mal meine Exe an, ist da das Problem auch vorhanden oder nicht? :dance: |
Re: LIstview Eintrag aber nicht Icon markieren
Hallo enemyleft.
Zitat:
Zitat:
Zitat:
Es ist allerdings bei allen Icons so, dass sie mitgefärbt werden. Nur bei einigen sieht man es mehr, bei anderen weniger. Wie zum Beispiel beim Item 1 (also das mit dem "SubItem-Pfeil-Imitat" :wink: ) Guido. |
Re: LIstview Eintrag aber nicht Icon markieren
Zuerst schreibst du:
Zitat:
Zitat:
verwirrt. :freak: Jetzt wäre noch Problem 2, das einzige Problem das du hast oder? Du willst, dass die Icons nicht mitmarkiert werden. Also ich schau mal was ich rauskriege, ich denke aber einfach wird das nicht, weil das so nicht vorgesehen ist. Du müsstes wahrscheinlich, bei einer Markierung den Eintrag ganz selber Zeichnen, Mit allem drum und dran. Also: Icon, Text und Textmarkierung... das kann ja noch heiter werden :stupid: Bis denne |
Re: LIstview Eintrag aber nicht Icon markieren
Also ich habe bis jetzt herumgepröbelt... leider aber nichts brauchbares gefunden.
Ich habs mal so probiert... Aber ehrlich gesagt weiss ich nicht warum das nicht geklappt hat?!
Delphi-Quellcode:
erstens verändert sich aus irgendeinem Grund die Schriftart, dann
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); begin DefaultDraw := true; bmp := TBitMap.Create; if cdsSelected in State then begin Imagelist1.GetBitmap(Item.Index,bmp); gr := TGraphic(bmp); ListView1.Canvas.Draw(Item.Position.X,Item.Position.Y,gr); end; end; wird das Gezeichnete wieder überladen und und und... Also ich würde jezt, wenn ich du wäre, eine Neue Komponente erstellen. Direkt ableiten von TListView und die nötigen Proceduren anpassen, respektive overriden! > Anstatt die Idee mit der Komponente, kannst du auch alles selber Zeichnen, ist vielleicht einfacher?! Ich sollte mich jetzt mal hinter meine Arbeit klemmen, sonst hat mein Chef nicht freude... Also schöne Ostern allerseits PS: versuche mal meine Funktion mit DefaultDraw := false, dann siehst du das ich gar nicht soweit von der Lösung entfernt war. (in meinen Gedanken auf jedenfall :stupid: ) |
Re: LIstview Eintrag aber nicht Icon markieren
Hallo enemyleft.
Zitat:
Zitat:
Aber mal im Ernst! Vielen Dank für deine Bemühungen. Deine obige Funktion habe ich getestet. Ist halt noch nicht "ausgereift". Investier nicht zu viel Zeit dafür, sonst ist dein Chef vielleicht wirklich irgendwann sauer. :dancer2: Viele Grüße, Guido. |
Re: LIstview Eintrag aber nicht Icon markieren
Hallo, könnte das ganz/teilweise einfärben mit der Transparenz zusammenhängen? Nur so n Querschuss, ohne den Thread aufmerksam gelesen zu haben ;-)
|
Re: LIstview Eintrag aber nicht Icon markieren
Liste der Anhänge anzeigen (Anzahl: 1)
Moin
@Guido Dein Code habe ich jetzt ein "bisschen" umgeschrieben, das Icon wird jetzt nicht mehr mitmarkiert. EDIT: Der Code wurde nochmal ein bisschen überarbeitet. |
Re: LIstview Eintrag aber nicht Icon markieren
Liste der Anhänge anzeigen (Anzahl: 1)
@DGL-luke
Zitat:
@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. |
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. |
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. |
Re: LIstview Eintrag aber nicht Icon markieren
Zitat:
Delphi-Quellcode:
Brush.Color := clBtnFace; Font.Color:= clBtnText; Zitat:
Wenn ich noch was herausfinde melde ich mich. |
Re: LIstview Eintrag aber nicht Icon markieren
Zitat:
Zitat:
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. |
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. |
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. |
Re: LIstview Eintrag aber nicht Icon markieren
ist es auch möglich den hintergrund des icons einzufärben?
mfg |
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? |
Re: LIstview Eintrag aber nicht Icon markieren
nja ich mein das nicht generell sondern nur beim selektieren.
mfg |
Re: LIstview Eintrag aber nicht Icon markieren
Liste der Anhänge anzeigen (Anzahl: 2)
Sicherlich geht es irgendwie, ich habe nun noch ein neues Bild angehängt, wo der Hintergrund nur beim Selektieren eingefärbt wird.
|
Re: LIstview Eintrag aber nicht Icon markieren
ja genau wie beim hintergrund 2. wie hast du das geproggt?
|
Re: LIstview Eintrag aber nicht Icon markieren
Liste der Anhänge anzeigen (Anzahl: 1)
Moin Moin,
die Variante finde ich aber nicht so gut, denn wenn der Eintrag markiert ist kann man das Icon nur schlecht erkennen. Aber das ist wohl Geschmacksache. |
Re: LIstview Eintrag aber nicht Icon markieren
ich finds perfekt!
großes dankeschön! EDIT: kann man die icons irgendwie noch richtig alphatransparent ausgeben? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:31 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