Mega Code Archive

 
Categories / Delphi / VCL
 

Display the items in a listview control display as a group [xp]

// declarations from commctrl.h 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 // Fill listview with random data 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); // Create Group1 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)); // Create Group2 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)); // Assign items to the groups 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; // XPManifest needed!