![]() |
Lösung TListview eigene Farbe andere Icons für Aktive Items
Liste der Anhänge anzeigen (Anzahl: 2)
:mrgreen: hallo zusammen
Da ich nirgends eine Listviewkomponente gefunden habe bei der man das Erscheinungsbild der fokusierten Items (wird ja von Windows gesteuert clHighlight bzw grau wenn kein focus) einstellen kann habe ich mal selbst handangelegt. Da ich schon einige fragen zu diesem thema im forum gefunden habe aber wie gesagt keine antwort fand möchte ich euch meine Lösung nicht vorenthalten. Funktionen: (Siehe Anlagen) Andere Icons für markierte Items Die Markierung wird in einer gewünschten Farbe gezeichnet (auch wenn item fokusiert) um die Markierung wird ein Rand in einer anderen Farbe gezeichnet. Der Code müsste für jede TListview bei Viewstyle vsicon und vsreport funktionieren :coder: :coder:
Delphi-Quellcode:
//------------------------------------------------------------------------------
procedure TFmDesigner.lvGruppenCustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); var aIconRect, aTextRect:TRect; begin if (Item.Index=TListView(Sender).ItemIndex) or (TListView(Sender).ItemFocused=Item) or (Item.selected) then begin DefaultDraw:=False; aIconRect:=Item.DisplayRect(drBounds); aTextRect:=Item.DisplayRect(drLabel); if TListView(Sender).ViewStyle=vsIcon then begin with Sender do begin Canvas.Pen.Color := $008FC2B3; Canvas.Brush.Color := $00CDEFE9; Canvas.Rectangle(aTextRect); Windows.DrawText(Canvas.Handle, @Item.Caption[1], Length(Item.Caption), aTextRect, DT_CENTER+DT_WORDBREAK); Canvas.Brush.Color:=$008FC2B3; Canvas.FrameRect(aTextRect); TListView(Sender).LargeImages.Draw(Canvas,aIconRect.Left+((aIconRect.Right-aIconRect.Left) div 2)-TListView(Sender).LargeImages.Width div 2 ,aIconRect.Top+2,1); end; end; if TListView(Sender).ViewStyle<>vsIcon then begin with Sender do begin Canvas.Pen.Color := $00CDEFE9; Canvas.Brush.Color := $00CDEFE9; Canvas.Rectangle(aTextRect); aTextRect.Left:=aTextRect.Left+2; Windows.DrawText(Canvas.Handle, @Item.Caption[1], Length(Item.Caption), aTextRect, DT_VCENTER); Canvas.Brush.Color:=$008FC2B3; Canvas.FrameRect(aTextRect); TListView(Sender).SmallImages.Draw(Canvas,aIconRect.Left+2 ,aIconRect.Top,1); end; end; end //Aktives Item end; //------------------------------------------------------------------------------ da ich mich bis jetzt sehr wenig mit komponentenentwicklung beschäftigt habe würde es mich freuen wenn mir jemand helfen würde diese funktionen in eine eigene Tlistviewkl Klasse einzubauen. Ich möchte im Objektinspektor folgendes einstellen können (Farbe Markierung, Farbe Rand, Imageindex für Mark Items gross(Aus LargeImages) und klein (SmallImages) |
Re: Lösung TListview eigene Farbe andere Icons für Aktive It
:hi:
noch ne kleine verbesserung. Bei viewstyle vsicon gabs ein problem wenn sehr viel text in den captions war (mehr als 20 Zeichen) mit folgender Codeänderung funktioniert auch dass
Delphi-Quellcode:
:coder2:
if TListView(Sender).ViewStyle=vsIcon then
begin with Sender do begin Canvas.Pen.Color := $008FC2B3; Canvas.Brush.Color := $00CDEFE9; Canvas.Rectangle(aTextRect); Windows.DrawText(Canvas.Handle, @Item.Caption[1], Length(Item.Caption), aTextRect, DT_EDITCONTROL+DT_CENTER+DT_WORDBREAK); //Hier war vorher nur DT_CENTER+DT_WORDBREAK Canvas.Brush.Color:=$008FC2B3; Canvas.FrameRect(aTextRect); TListView(Sender).LargeImages.Draw(Canvas,aIconRect.Left+((aIconRect.Right-aIconRect.Left) div 2)-TListView(Sender).LargeImages.Width div 2 ,aIconRect.Top+2,1); end; end; |
Re: Lösung TListview eigene Farbe andere Icons für Aktive It
super code!!
ich habs an einer listview mit ViewStyle = vsReport probiert, und es funktioniert ganz gut. das einzige problem ist, dass nur die erste spalte so abgeändert wird, ich hätte aber lieber wenn die subitems dann auch noch so markiert werden. ich habe schon probiert ob das funktioniert, leider habe ich es aber nicht hinbekommen. könnte jemand den code noch so abändern dass es auch für die subitems funktioniert? gruss urbanbruhin |
Re: Lösung TListview eigene Farbe andere Icons für Aktive It
guter vorschlag :wink:
es ist zwar bei listviews normalerweise üblich dass nur die erste spalte markiert wird (siehe windows explorer) aber man kanns ja mal versuchen. Damit der code für die subitems geht müsste man an die koordinaten des rects für die einzelnen subitems kommen. Hat da jemand eine spontane idee :?: :?: :?: |
Re: Lösung TListview eigene Farbe andere Icons für Aktive It
hab mal ein bißchen herumprobiert.
Das grössere Problem glaub ich wird es an das canvas der subitems zu kommen wenn man das rechteck wo er zeichnet weiter nach rechts verschiebt beim costumdrawsubitem macht er zwar die markierung und den text allerdings immer in der 1. spalte :gruebel: :gruebel: :gruebel: |
Re: Lösung TListview eigene Farbe andere Icons für Aktive It
bin auch schon die längste zeit am rumprobieren, und ich komme immer näher ans ziel :bounce1:
dauert aber noch ein bisschen bis ich fertig bin... |
Re: Lösung TListview eigene Farbe andere Icons für Aktive It
Liste der Anhänge anzeigen (Anzahl: 1)
ich habs siehe anlage code folgt :mrgreen:
|
Re: Lösung TListview eigene Farbe andere Icons für Aktive It
ich habs jetzt auch fast, aber mit den farben stimmt noch etwas nicht ganz genau...
naja, ich warte jetzt mal auf deinen code, etom291272. @etom291272 passt jetzt nicht grad zum thema, aber ich habe da grad den schönen button rechts oben auf deinem screenshot gesehen. wie hast du den gemacht? |
Re: Lösung TListview eigene Farbe andere Icons für Aktive It
die lösung war in der DP :dp:
ListView_GetSubItemRect(Sender.Handle, Item.Index, SubItem, LVIR_BOUNDS, @aTextRect);
Delphi-Quellcode:
da die routine im oncustomdrawsubitem nur funktionierte wenn ich im oncustomdrawitem das Defaultdraw auf true liess (was natürlich nicht geht) hab ich versucht alles im oncustomdrawitem zu zeichnen und das ging :gruebel: :thumb:
uses CommCtrl
//------------------------------------------------------------------------------ procedure TfmVarZusStln.lvElementeCustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); var aIconRect, aTextRect:TRect; SubItem:Integer; begin if (Item.Index=TListView(Sender).ItemIndex) or (TListView(Sender).ItemFocused=Item) or (Item.selected) then begin DefaultDraw:=False; aIconRect:=Item.DisplayRect(drBounds); aTextRect:=Item.DisplayRect(drLabel); if TListView(Sender).ViewStyle=vsIcon then begin with Sender do begin Canvas.Pen.Color := $008FC2B3; Canvas.Brush.Color := $00CDEFE9; Canvas.Rectangle(aTextRect); Windows.DrawText(Canvas.Handle, @Item.Caption[1], Length(Item.Caption), aTextRect, DT_EDITCONTROL+DT_CENTER+DT_WORDBREAK); Canvas.Brush.Color:=$008FC2B3; Canvas.FrameRect(aTextRect); TListView(Sender).LargeImages.Draw(Canvas,aIconRect.Left+((aIconRect.Right-aIconRect.Left) div 2)-TListView(Sender).LargeImages.Width div 2 ,aIconRect.Top+2,1); end; end; if TListView(Sender).ViewStyle<>vsIcon then begin with Sender do begin Canvas.Pen.Color := $00CDEFE9; Canvas.Brush.Color := $00CDEFE9; Canvas.Rectangle(aTextRect); aTextRect.Left:=aTextRect.Left+2; Windows.DrawText(Canvas.Handle, @Item.Caption[1], Length(Item.Caption), aTextRect, DT_VCENTER); Canvas.Brush.Color:=$008FC2B3; Canvas.FrameRect(aTextRect); TListView(Sender).SmallImages.Draw(Canvas,aIconRect.Left+2 ,aIconRect.Top,1); //---------------------------------------------------------------------- //SubItems durchlaufen for SubItem:=1 to Item.SubItems.Count do begin ListView_GetSubItemRect(Sender.Handle, Item.Index, SubItem, LVIR_BOUNDS, @aTextRect); if TListView(Sender).ViewStyle=vsReport then begin with Sender do begin Canvas.Pen.Color := $00CDEFE9; Canvas.Brush.Color := $00CDEFE9; Canvas.Rectangle(Rect(aTextRect.Left+2,aTextRect.Top,aTextRect.Right,aTextRect.Bottom)); aTextRect.Left:=aTextRect.Left+2; Windows.DrawText(Canvas.Handle, @Item.SubItems[SubItem-1][1], Length(Item.SubItems[SubItem-1]), aTextRect, DT_VCENTER); Canvas.Brush.Color:=$008FC2B3; Canvas.FrameRect(aTextRect); end; end; end; //---------------------------------------------------------------------- end; end; end; //Aktives Item end; //------------------------------------------------------------------------------ |
Re: Lösung TListview eigene Farbe andere Icons für Aktive It
|
Re: Lösung TListview eigene Farbe andere Icons für Aktive It
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
das resultat von deinem und meinem code war das gleiche, allerdings nicht das gleiche wie auf deinem screenshot :gruebel: also dein screenshot sieht schon schöner aus als meiner :mrgreen: was ist das problem? ach ja, danke für den link (button) :angel: aber könntest du noch den direktlink posten, ich weiss nicht recht was ich da genau downloaden muss... EDIT: habs gefunden :stupid: |
Re: Lösung TListview eigene Farbe andere Icons für Aktive It
das kommt raus wenn sich die defaultdraw gegenseitig stören darum habe ich allen code nur im drawitem und zeichne dort die items und alle subitems
Zitat:
|
Re: Lösung TListview eigene Farbe andere Icons für Aktive It
und was müsste ich jetzt tun?
ach ja, wegen den rbControls: sieht aus als würde es nicht für delphi 7 gehen, oder soll ich mal die package für D6 öffnen? |
Re: Lösung TListview eigene Farbe andere Icons für Aktive It
rb controls gehen super über delphi7 (hab delphi7)
du musst allen zeichencode im oncustomdrawiten und nicht subitem haben wenn das nicht hilft poste mal code |
Re: Lösung TListview eigene Farbe andere Icons für Aktive It
also ich habe alles im oncustomdrawitem, hier der code:
Delphi-Quellcode:
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); var aTextRect, aIconRect:TRect; subitem: integer; begin if (Item.Index=TListView(Sender).ItemIndex) or (TListView(Sender).ItemFocused=Item) or (Item.selected) then begin DefaultDraw:=false; aIconRect:=Item.DisplayRect(drBounds); aTextRect:=Item.DisplayRect(drLabel); with Sender do begin Canvas.Pen.Color := $00CDEFE9; Canvas.Brush.Color := $00CDEFE9; Canvas.Rectangle(aTextRect); aTextRect.Left:=aTextRect.Left+2; Windows.DrawText(Canvas.Handle, @Item.Caption[1], Length(Item.Caption), aTextRect, DT_VCENTER); Canvas.Brush.Color:=$008FC2B3; Canvas.FrameRect(aTextRect); TListView(Sender).SmallImages.Draw(Canvas,aIconRect.Left+2 ,aIconRect.Top,1); for SubItem:=1 to Item.SubItems.Count do begin ListView_GetSubItemRect(Sender.Handle, Item.Index, SubItem, LVIR_BOUNDS, @aTextRect); if TListView(Sender).ViewStyle=vsReport then begin with Sender do begin Canvas.Pen.Color := $00CDEFE9; Canvas.Brush.Color := $00CDEFE9; aTextRect.Left:=aTextRect.Left+2; Canvas.Rectangle(aTextRect); Windows.DrawText(Canvas.Handle, @Item.SubItems[SubItem-1][1], Length(Item.SubItems[SubItem-1]), aTextRect, DT_VCENTER); Canvas.Brush.Color:=$008FC2B3; Canvas.FrameRect(aTextRect); end; end; end; end; end; end; |
Re: Lösung TListview eigene Farbe andere Icons für Aktive It
Liste der Anhänge anzeigen (Anzahl: 1)
:?: :?: :?: :?: :?: :?: :?: :?: bahnhof
ich hab den code den du gepostet hast mit copy und paste eingefügt und dass kam dabei raus (anlage) shick mal nen kompletten screenshot vielleich sehe ich dann was (1024x768) |
Re: Lösung TListview eigene Farbe andere Icons für Aktive It
Liste der Anhänge anzeigen (Anzahl: 1)
also ich habe jetzt mal ein neues projekt gemacht, eine listview auf die form plaziert, und diese eigenschaften verändert:
Delphi-Quellcode:
ergebnis: siehe anhang.
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); var aTextRect:TRect; subitem: integer; begin if (Item.Index=TListView(Sender).ItemIndex) or (TListView(Sender).ItemFocused=Item) or (Item.selected) then begin DefaultDraw:=false; aTextRect:=Item.DisplayRect(drLabel); with Sender do begin Canvas.Pen.Color := $00CDEFE9; Canvas.Brush.Color := $00CDEFE9; Canvas.Rectangle(aTextRect); aTextRect.Left:=aTextRect.Left+2; Windows.DrawText(Canvas.Handle, @Item.Caption[1], Length(Item.Caption), aTextRect, DT_VCENTER); Canvas.Brush.Color:=$008FC2B3; Canvas.FrameRect(aTextRect); for SubItem:=1 to Item.SubItems.Count do begin ListView_GetSubItemRect(Sender.Handle, Item.Index, SubItem, LVIR_BOUNDS, @aTextRect); if TListView(Sender).ViewStyle=vsReport then begin with Sender do begin Canvas.Pen.Color := $00CDEFE9; Canvas.Brush.Color := $00CDEFE9; aTextRect.Left:=aTextRect.Left+2; Canvas.Rectangle(aTextRect); Windows.DrawText(Canvas.Handle, @Item.SubItems[SubItem-1][1], Length(Item.SubItems[SubItem-1]), aTextRect, DT_VCENTER); Canvas.Brush.Color:=$008FC2B3; Canvas.FrameRect(aTextRect); end; end; end; end; end; end; mach doch auch mal ein leeres projekt auf, und ändere die selben eigenschaften wie ich. dann fügst du genau den selben code rein und schaust was rauskommt. vielleicht ist in deinem projekt noch mehr code drin, der irgendwas an der listview verändert, oder es ist irgend eine eigenschaft anders eingestellt als bei mir. |
Re: Lösung TListview eigene Farbe andere Icons für Aktive It
der grund ist rowselect gehört auf false das zeichnen der markierungen machen wir ja selber
|
Re: Lösung TListview eigene Farbe andere Icons für Aktive It
Liste der Anhänge anzeigen (Anzahl: 1)
habe jetzt rowselect auf false gestellt, funzt aber immernoch nicht.
ich hänge mal mein test-projekt an, kannst es ja mal anschauen. |
Re: Lösung TListview eigene Farbe andere Icons für Aktive It
Liste der Anhänge anzeigen (Anzahl: 2)
habs gefunden aber dass versteh einer wenn einmal ein echter guru diesen beitrag lest mich würde brennend interessieren warum sich das so verhält.
bei mir gings weil ich ein panel mit der selben farbe darunter habe als die helle markierung in der listview hab dein projekt angehängt mit dem notwendigen panel und einen shot wies bei mir jetzt aussieht |
Re: Lösung TListview eigene Farbe andere Icons für Aktive It
Liste der Anhänge anzeigen (Anzahl: 1)
so, ich habe jetzt auch mal ein panel unter die listview gebaut, und jetzt funktionierts mit den farben.
ich habe den code noch etwas abgeändert:
Delphi-Quellcode:
das panel wird also zur laufzeit erstellt.
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); var aTextRect:TRect; subitem: integer; backpanel: tpanel; begin if tlistview(sender).Tag <> 1 then begin backpanel := tpanel.create(self); backpanel.Parent := tlistview(sender).Parent; backpanel.Name := 'BackPanel1'; backpanel.Left := tlistview(sender).left; backpanel.Top := tlistview(sender).top; backpanel.Width := tlistview(sender).clientwidth; backpanel.Height := tlistview(sender).clientheight; backpanel.Visible := false; tlistview(sender).Tag := 1; backpanel.Color := $00CDEFE9; end else if (findcomponent('BackPanel1') is tpanel) then (findcomponent('BackPanel1') as tpanel).Color := $00CDEFE9; if (Item.Index=TListView(Sender).ItemIndex) or (TListView(Sender).ItemFocused=Item) or (Item.selected) then begin DefaultDraw:=false; aTextRect:=Item.DisplayRect(drLabel); with Sender do begin Canvas.Pen.Color := $00CDEFE9; Canvas.Brush.Color := $00CDEFE9; Canvas.Rectangle(aTextRect); aTextRect.Left:=aTextRect.Left+2; atextrect.Right := atextrect.Right+5; Windows.DrawText(Canvas.Handle, @Item.Caption[1], Length(Item.Caption), aTextRect, DT_VCENTER); Canvas.Brush.Color:=$008FC2B3; Canvas.FrameRect(aTextRect); for SubItem:=1 to Item.SubItems.Count do begin ListView_GetSubItemRect(Sender.Handle, Item.Index, SubItem, LVIR_BOUNDS, @aTextRect); if TListView(Sender).ViewStyle=vsReport then begin with Sender do begin Canvas.Pen.Color := $00CDEFE9; Canvas.Brush.Color := $00CDEFE9; aTextRect.Left:=aTextRect.Left+6; atextrect.Right := atextrect.Right+5 ; Canvas.Rectangle(aTextRect); Windows.DrawText(Canvas.Handle, @Item.SubItems[SubItem-1][1], Length(Item.SubItems[SubItem-1]), aTextRect, DT_VCENTER); Canvas.Brush.Color:=$008FC2B3; Canvas.FrameRect(aTextRect); end; end; end; end; end; end; ein kleiner schönheitsfehler gibts aber noch, siehe bild im anhang. |
Re: Lösung TListview eigene Farbe andere Icons für Aktive It
warum machst du die eigenen grafiken breiter als die spalten (rect.right:=rect.right+5) ist doch nicht notwendig lass lieber die subitems weiter links anfangen
hast schon mit state dshot experimentiert da kann man starken hottrack bauen. :coder2: |
Re: Lösung TListview eigene Farbe andere Icons für Aktive It
naja, wenn ich das +5 nicht reinsetzt, gibts ein spalt von 5 pixel und der gefällt mir nicht. aber ich kann mir einfach nicht erklären, dass der rahmen die richtige breite hat, aber nicht ganz ausgefüllt ist :gruebel:
das mit dem hottrack werde ich noch ausprobieren. |
Re: Lösung TListview eigene Farbe andere Icons für Aktive It
:warn: da sticht mir doch gleich was ins auge
Delphi-Quellcode:
:chat: :hi:
with Sender do
begin Canvas.Pen.Color := $00CDEFE9; Canvas.Brush.Color := $00CDEFE9; Canvas.Rectangle(aTextRect);//<- das zeichnet den hintergrund hellgrün aTextRect.Left:=aTextRect.Left+2; atextrect.Right := atextrect.Right+5;//<- hier dann + 5 Windows.DrawText(Canvas.Handle, @Item.Caption[1], Length(Item.Caption), aTextRect, DT_VCENTER); Canvas.Brush.Color:=$008FC2B3; Canvas.FrameRect(aTextRect);//<- das zeichnet nur dunkelgrünen rand for SubItem:=1 to Item.SubItems.Count do |
Re: Lösung TListview eigene Farbe andere Icons für Aktive It
ups, ein ganz dummer fehler :oops:
danke, jetzt funktionierts wunderbar :mrgreen: zum state = dshot: das kann ja gar nicht funktionieren, weil ja das onCustomDrawItem gar nicht ausgelöst wird wenn man mit der maus über die listview fährt. ich habe dann mal
Delphi-Quellcode:
ins onCustomDrawItem gebaut, kam aber nie eine showmessage.
if state = [cdshot] then showmessage('dshot');
ach ja, kann man auch den rahmen-strich unten oder/und oben weglassen? also dass das item nur: links und rechts, links, oben und rechts, oder links, unten und rechts ...umrahmt wird? wenn nämlich mehrere items nacheinander markiert sind, wäre es schöner wenn zrischendrin keine querstriche sind. |
Re: Lösung TListview eigene Farbe andere Icons für Aktive It
Liste der Anhänge anzeigen (Anzahl: 4)
:twisted: stimmt nicht kuckst du hier (Anlage) du musst eine property in der listview setzen
hab den code jetzt perfektioniert das rechteck läuft ohne füllung mit der Maus mit :cyclops: |
Re: Lösung TListview eigene Farbe andere Icons für Aktive It
ich vermute, dass bei mir der fehler bei
Delphi-Quellcode:
war, ich hätte
if state = [cdshot] then
Delphi-Quellcode:
verwenden müssen.
if (cdshot) in state then
weiss niemand wie man bei einem item den unteren oder den oberen rand weglassen kann? gruss urbanbruhin |
Re: Lösung TListview eigene Farbe andere Icons für Aktive It
hatte ich vorher vergessen
da wir ja die koordinaten des rechteckes haben kannst du in diese canvas zeichnen was du lustig bist wenn z.b die Markierung so aussehen soll │Listview Caption │ brauchst du ja nur 2 linien zu malen von links oben nach links unten und ... |
Re: Lösung TListview eigene Farbe andere Icons für Aktive It
also ich habe da mal rumprobiert, jedoch schaffe ich es einfach nicht, eine linie zu zeichnen :wall:
ich habe mal diesen code:
Delphi-Quellcode:
...durch diesen ersetzt:
Canvas.FrameRect(aTextRect);
Delphi-Quellcode:
klappt aber nicht :gruebel:
canvas.MoveTo(atextrect.Left, atextrect.top);
canvas.LineTo(atextrect.right, atextrect.top); |
Re: Lösung TListview eigene Farbe andere Icons für Aktive It
Liste der Anhänge anzeigen (Anzahl: 1)
:shock: wieso funktioniert doch (Anlage)
Delphi-Quellcode:
if TListView(Sender).ViewStyle=vsIcon then
begin Windows.DrawText(Canvas.Handle, @Item.Caption[1], Length(Item.Caption), aTextRect, DT_EDITCONTROL+DT_CENTER+DT_WORDBREAK); Canvas.Brush.Color:=$008FC2B3; //Canvas.FrameRect(aTextRect); Canvas.Pen.Color := clred; canvas.MoveTo(atextrect.Left, atextrect.top); canvas.LineTo(atextrect.right, atextrect.top); TListView(Sender).LargeImages.Draw(Canvas,aIconRect.Left+((aIconRect.Right-aIconRect.Left) div 2)-TListView(Sender).LargeImages.Width div 2 ,aIconRect.Top+2, aIconIndex); |
Re: Lösung TListview eigene Farbe andere Icons für Aktive It
probiers mal an einer listview mit viewstyle = vsReport, da hats bei mir nicht funktioniert...
ach ja, ich habe grad rausgefunden, dass wenn es ein & in der listview hat (in einem item) wird dieses gelöscht wenn diese zeile markiert wird. muss irgendwie am drawtext liegen. kann man das ändern oder nicht? |
Re: Lösung TListview eigene Farbe andere Icons für Aktive It
bei mir gings bei beiden viewstyles
|
Re: Lösung TListview eigene Farbe andere Icons für Aktive It
Liste der Anhänge anzeigen (Anzahl: 2)
ups, ich glaube ich habe den rahmen mit der gleichen farbe wie der hintergrund gezeichnet :shock:
nun habe ich aber noch ein problem... ich habe es zuerst so gemacht: wenn das vorherige item markiert ist, soll der obere rahmen nicht gezeichnet werden, und wenn das untere item markiert ist, soll der untere rahmen nicht gezeichnet werden. wenn aber die items nacheinander von oben nach unten oder von unten nach oben markiert werden, wird logischerweise immer der untere oder der obere rahmen gezeichnet, und im endeffekt sieht man dann die horizontalen rahmen-linien trotzdem. dann hatte ich eine andere idee: wenn das vorherige item markiert ist, soll der untere rahmen vom vorherigen item mit der hintergrundfarbe übermalt werden. klappte aber irgendwie auch nicht, hier der code:
Delphi-Quellcode:
EDIT: ich habe jetzt herausgefunden, dass wenn man mehrere items mit der maus markiert (also so ein gestricheltes viereck zieht), dass die eigenschaft selected der markierten items erst true wird, wenn die maus losgelassen wird. so funktioniert mein code natürlich auch nicht...
if item.Index > 0 then
if tlistview(sender).Items.Item[item.Index-1].Selected = true then begin aVorherRect := tlistview(sender).Items.Item[item.index-1].DisplayRect(drLabel); Canvas.Pen.Color := listviewItemBackColor; Canvas.Brush.Color := listviewItemBackColor; aVorherRect.Left:=aVorherRect.Left+2; aVorherRect.Right := aVorherRect.Right+6; canvas.MoveTo(aVorherRect.right, aVorherRect.bottom); canvas.LineTo(aVorherRect.left, aVorherRect.bottom); end; aber wenn man mehrere items mit der Shift-taste markiert, funktionierts wunderbar (siehe anhang) |
Re: Lösung TListview eigene Farbe andere Icons für Aktive It
:-D na ja die geschmäcker sind verschieden (gott sei dank) ich fand den effekt das bei multiselect alle items gerahmt werden ziemlich cool ist mal was anderes
:gruebel: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:09 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