![]() |
TListview / VirtualMode / Checkbox und Bitmaps
Hallo,
wie schaffe ich es bei einem TListview, der im VirtualMode läuft, dass die CheckBoxen und Images angezeigt werden? |
Re: TListview / VirtualMode / Checkbox und Bitmaps
Hallo,
ich hoffe, das Problem ist noch aktuell: a) Die Images kannst Du anzeigen, wenn Du im OnData-Ereignis dem Item den ImageIndex zuweist:
Delphi-Quellcode:
procedure TForm1.ListView1Data(Sender:TObject; Item:TListItem);
var myData; begin if (Item=nil) then Exit; // Deine Daten aus der virtuellen Liste // myData:= with Item do begin Caption:=[Irgendetwas]; ImageIndex:=0; end; // with end; b) Die Anzeige der CheckBoxen ist schon etwas aufwendiger: Dazu musst Du das OnAdvancedCustomDrawItem benutzen.
Delphi-Quellcode:
[edit]Fehler, auf den jim_raynor im Post weiter unter hingewiesen hat, beseitigt.[/edit]
uses
ComCtrl; procedure TForm1.ListView1AdvancedCustomDrawItem(Sender:Tobject; ....); const CtrlState:array[Boolean] of Integer=(DFCS_BUTTONCHECK, DFCS_BUTTONCHECK or DFCS_CHECKED); var r, dr:TRect; myData; begin if (Item=nil) then Exit; // Deine Daten aus der virtuellen Liste, in der der Status des Eintrages stehen muss // myData:= with Sender.Canvas do begin dr:=Item.DisplayRect(drBounds); r:=Bounds(dr.Left+1, dr.Top+1, 13, 13); DrawFrameControl(Handle, r, DFC_BUTTON, CtrlState[myData.CheckStatus]); end; // with end; |
Re: TListview / VirtualMode / Checkbox und Bitmaps
Zitat:
|
Re: TListview / VirtualMode / Checkbox und Bitmaps
Anstatt ItemIndex solltest du ImageIndex verwenden ;) Aber ich verwechsel das auch ständig ...
|
Re: TListview / VirtualMode / Checkbox und Bitmaps
@jim_raynor
Du hast Recht. Da ist mir ein kleiner Schreibfehler unterlaufen. |
Re: TListview / VirtualMode / Checkbox und Bitmaps
Hallo Gollum,
brilliant - vielen Dank. Als ich die Lösung für den ImageIndex las war meine Frage peinlich. Da hatte ich wohl ein Brett vor dem Kopf :oops: |
Re: TListview / VirtualMode / Checkbox und Bitmaps
Hallo Gollum,
ich den Code Schnipsel von dir sehr gut brauchen können. leider hab ich aber keine Idee an welcher Stelle man eingreifen muss um das Clicken auf die Checkbox in eine Änderung des Zustandes umzusetzen. Kannst mir jemand helfen? mfg DerDan |
Re: TListview / VirtualMode / Checkbox und Bitmaps
Hallo,
dazu musst Du das Ereignis OnMouseDown der Listview benutzen.
Delphi-Quellcode:
procedure TForm1.ListView1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var aItem :TListItem; ht :THitTests; myData:; begin aItem:=ListView1.GetItemAt(x, y); ht:=ListView1.GetHitTestInfoAt(x, y); if (aItem<>nil) and (ht=[htOnStateIcon]) then begin // Deine Daten aus der virtuellen Liste // myData:= myData.CheckStatus:=not myData.CheckStatus; end; end; |
Re: TListview / VirtualMode / Checkbox und Bitmaps
Vielen Dank @Gollum,
das einzige was in deinem Code noch fehlt ist
Delphi-Quellcode:
nach
ListView1.UpdateItems (aItem.Index, aItem.Index)
Delphi-Quellcode:
aber sonst echt super, hab nur nicht damit gerechnet das es ein bisl aufwändig ist
myData.CheckStatus:=not myData.CheckStatus;
mfg DerDan |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:45 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