TListView Nesnelerini Guruplanmış Şekilde Göstermek

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
RamazanG
Üye
Mesajlar: 73
Kayıt: 16 Tem 2010 03:38

TListView Nesnelerini Guruplanmış Şekilde Göstermek

Mesaj gönderen RamazanG »

{ commctrl.h den tanımlamalar, XPManifest gereklidir}

Kod: Tümünü seç

type
  TLVGROUP = record
    cbSize: UINT;
    mask: UINT;
    pszHeader: LPWSTR;
    cchHeader: Integer;
    pszFooter: LPWSTR;
    cchFooter: Integer;
    iGroupIdL: Integer;
    stateMask: UINT;
    state: UINT;
    uAlign: UINT;
  end;

  tagLVITEMA = packed record
    mask: UINT;
    iItem: Integer;
    iSubItem: Integer;
    state: UINT;
    stateMask: UINT;
    pszText: PAnsiChar;
    cchTextMax: Integer;
    iImage: Integer;
    lParam: lParam;
    iIndent: Integer;
    iGroupId: Integer;
    cColumns: UINT;
    puColumns: PUINT;
  end;
  TLVITEMA = tagLVITEMA;

const
  LVM_ENABLEGROUPVIEW = LVM_FIRST + 157;
  LVM_MOVEITEMTOGROUP = LVM_FIRST + 154;
  LVM_INSERTGROUP     = LVM_FIRST + 145;

  LVIF_GROUPID = $0100;

  LVGF_HEADER  = $00000001;
  LVGF_ALIGN   = $00000008;
  LVGF_GROUPID = $00000010;

  LVGA_HEADER_LEFT   = $00000001;
  LVGA_HEADER_CENTER = $00000002;
  LVGA_HEADER_RIGHT  = $00000004;


procedure TForm1.Button1Click(Sender: TObject);
var
  LvGroup: TLVGROUP;
  LvItemA: TLVITEMA;
  ListItem: TListItem;
  I: Byte;
begin
 {Karışık bilgilerle ListVievi doldur}
  Randomize;
  for i := 1 to 10 do
  begin
    ListItem := ListView1.Items.Add;
    ListItem.Caption := IntToStr(Random(100));
  end;

  SendMessage(ListView1.Handle, LVM_ENABLEGROUPVIEW, 1, 0);

 {Gurup1 i oluştur}
  FillChar(LvGroup, SizeOf(TLVGROUP), 0);
  with LvGroup do
  begin
    cbSize := SizeOf(TLVGROUP);
    mask := LVGF_HEADER or LVGF_ALIGN or LVGF_GROUPID;
    pszHeader := 'Group 1';
    cchHeader := Length(LvGroup.pszHeader);
    iGroupIdL := 0;
    uAlign := LVGA_HEADER_CENTER;
  end;
  SendMessage(ListView1.Handle, LVM_INSERTGROUP, 0, Longint(@LvGroup));

   {Gurup2 i oluştur}
  FillChar(LvGroup, SizeOf(LvGroup), 0);
  with LvGroup do
  begin
    cbSize := SizeOf(TLVGROUP);
    mask := LVGF_HEADER or LVGF_ALIGN or LVGF_GROUPID;
    pszHeader := 'Group 2';
    cchHeader := Length(LvGroup.pszHeader);
    iGroupIdL := 1;
    uAlign := LVGA_HEADER_LEFT
  end;
  SendMessage(ListView1.Handle, LVM_INSERTGROUP, 1, Longint(@LvGroup));

  {Nesneleri guruplar içinde oluştur}
  for I := 0 to ListView1.Items.Count - 1 do
  begin
    with LvItemA do
    begin
      FillChar(LvItemA, SizeOf(TLvItemA), 0);
      mask := LVIF_GROUPID;
      iItem := I;
      iGroupId := Random(2);
    end;
    SendMessage(ListView1.Handle, LVM_SETITEM, 0, Longint(@LvItemA))
  end;
end;
Cevapla