Einzelnen Beitrag anzeigen

venice2
(Gast)

n/a Beiträge
 
#10

AW: ListView Spalte mit checkbox VCL

  Alt 3. Nov 2021, 15:22
Einfaches Beispiel.
So könnte man das machen unter VCL (Nicht mein Ding)

Siehe SetLVSubImages insbesondere auf Column und Index achten.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Winapi.CommCtrl, Vcl.StdCtrls,
  System.ImageList, Vcl.ImgList;

type
  TForm1 = class(TForm)
    ListView1: TListView;
    Button1: TButton;
    ImageList1: TImageList;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    Checked: BOOL;
    procedure SetLVSubImages(LV: TListView; Index, Column: Integer;
      Image: Integer; SubImagesOn: Bool);
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Checked := Not Checked;

  if Checked then
    SetLVSubImages(ListView1, 3, 2, 1, True)
  else
  SetLVSubImages(ListView1, 3, 2, 0, True)
end;

procedure TForm1.FormCreate(Sender: TObject);
var IntI: Integer;
begin

  for IntI := 0 to 2 do
    ListView1.Column[IntI].Width := 100;

end;

procedure TForm1.SetLVSubImages(LV: TListView; Index, Column, Image: Integer;
  SubImagesOn: Bool);
var
  lvStyle: DWORD;
  LV_Item: TLVItem;

begin

    lvStyle := SendMessage(LV.Handle, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);

    If SubImagesOn Then
        lvStyle := lvStyle or LVS_EX_SUBITEMIMAGES
    else
        lvStyle := lvStyle and Not LVS_EX_SUBITEMIMAGES;


    SendMessage(LV.Handle, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, lvStyle);

    If SubImagesOn Then
    begin
      LV_Item.mask := LVIF_IMAGE;
      LV_Item.iSubItem := Column;
      LV_Item.iItem := Index - 1;
      LV_Item.iImage := Image;
    end;

    SendMessage(LV.Handle, LVM_SETITEM, (Index - 1), Integer(@LV_Item));

    LV.Refresh;
end;

end.
Edit:
Mehrere..
Delphi-Quellcode:
  if Checked then
  begin
    SetLVSubImages(ListView1, 2, 1, 1, True);
    SetLVSubImages(ListView1, 2, 2, 1, True);
    SetLVSubImages(ListView1, 3, 2, 1, True);
  end else
  begin
    SetLVSubImages(ListView1, 2, 1, 0, True);
    SetLVSubImages(ListView1, 2, 2, 0, True);
    SetLVSubImages(ListView1, 3, 2, 0, True);
  end;
ImageListe auf die Form klatschen diese dem ListView zuweisen und zwei Icon in Checkbox Design einfügen.
Icon 0 Unchecked
Icon 1 Checked.

Dann mit den Button ein /ausschalten.

Siehe Anhang

Geändert von venice2 (10. Nov 2021 um 18:28 Uhr)
  Mit Zitat antworten Zitat