Delphi-PRAXiS

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 TListview / VirtualMode / Checkbox und Bitmaps (https://www.delphipraxis.net/60648-tlistview-virtualmode-checkbox-und-bitmaps.html)

Jens Schumann 10. Jan 2006 15:11


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?

Gollum 13. Jan 2006 08:13

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:
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;
[edit]Fehler, auf den jim_raynor im Post weiter unter hingewiesen hat, beseitigt.[/edit]

Jens Schumann 13. Jan 2006 08:17

Re: TListview / VirtualMode / Checkbox und Bitmaps
 
Zitat:

Zitat von Gollum
Hallo,
ich hoffe, das Problem ist noch aktuell:

Das Thema ist sogar noch brandaktuell. Vielen Dank werde ich über's Wochenende testen.

jim_raynor 13. Jan 2006 08:47

Re: TListview / VirtualMode / Checkbox und Bitmaps
 
Anstatt ItemIndex solltest du ImageIndex verwenden ;) Aber ich verwechsel das auch ständig ...

Gollum 13. Jan 2006 08:58

Re: TListview / VirtualMode / Checkbox und Bitmaps
 
@jim_raynor
Du hast Recht. Da ist mir ein kleiner Schreibfehler unterlaufen.

Jens Schumann 13. Jan 2006 16:49

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:

DerDan 30. Aug 2007 09:25

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

Gollum 30. Aug 2007 11:53

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;

DerDan 30. Aug 2007 14:43

Re: TListview / VirtualMode / Checkbox und Bitmaps
 
Vielen Dank @Gollum,


das einzige was in deinem Code noch fehlt ist

Delphi-Quellcode:
ListView1.UpdateItems (aItem.Index, aItem.Index)
nach

Delphi-Quellcode:
myData.CheckStatus:=not myData.CheckStatus;
aber sonst echt super, hab nur nicht damit gerechnet das es ein bisl aufwändig ist


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