Customize TListView pake grouping ?

Pernahkah anda berpikir, bagaimana membuat listview dengan tampilan data per group?
Seperti terlihat pada explorer windows XP?, mari kita ikuti caranya sebagai berikut ..

  1. Pada IDE delphi (Sample pake 2006 ) menu Component :. New VCL Component
  2. Pilih TCustomListview klik next kemudian kasih nama component baru TLVGroup
  3. Install ntar aja .. langsung pilih create unit hasilnya :


unit LVGroup;

interface

uses
Windows, SysUtils, Classes, Controls, ComCtrls, commctrl;

Type
TLVGroup = class(TCustomListView)
public
published
end;

procedure Register;

implementation

procedure Register;
begin
RegisterComponents(‘heruX’, [TLVGroup]);
end;
end.

Tambahkan constanta untuk listview message

const
LVM_ENABLEGROUPVIEW = LVM_FIRST + 157; // Nilai message utk enable/ disable
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;

kemudian tambahkan pada seciton Type record seperti ini

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

Sebelumnya tambahkan unit commctrls yah ..
nah sekarang tinggal kita tambahkan method pada section public ato kalo mo jadiin property juga boleh.


public
function IsLVGrouped(Yup: Boolean): Boolean;
procedure MakeGroup(GroupName: PWidechar; GroupID: Integer);

dan ..


function TLVGroup.IsLVGrouped(Yup: Boolean): Boolean;
begin
if Yup = True
then begin
SendMessage(Handle, LVM_ENABLEGROUPVIEW, 1, 0);
Result := true;
end else begin
Result := false;
SendMessage(Handle, LVM_ENABLEGROUPVIEW, 0, 0);
end;
end;

procedure TLVGroup.MakeGroup(GroupName: PWidechar; GroupID: Integer);
var
LvGroup: TLVG;
begin
FillChar(LvGroup, SizeOf(TLVG), 0);
with LvGroup do
begin
cbSize := SizeOf(TLVG);
mask := LVGF_HEADER or LVGF_ALIGN or LVGF_GROUPID;
pszHeader := GroupName;
cchHeader := Length(LvGroup.pszHeader);
iGroupIdL := GroupID;
uAlign := LVGA_HEADER_LEFT;
end;
SendMessage(Handle, LVM_INSERTGROUP, GroupID, Longint(@LvGroup));
end;

dan listing lengkap nya adalah …


Wah ... gabungin sendiri aja yah?? bisa khan.. males nih kalo kepanjangan!!!

udah gitu ajah. eh..lupa kalo hasilnya ga sesuai perkiraan tambahin komponen XPMan yah ..
ini khan buat xp ajah !!
property TCustomListView di published juga yah .. bisa donk ??!!

4 thoughts on “Customize TListView pake grouping ?

  1. wadow, bapak satu ini tetep aja berkutat di delphi, ga bosen tuh ;)… secara delphinya udah bisa ngasilin duit ya ga? balik balik!!!! ayyyooo balik ke jatim hehehe

    • herux says:

      Sesuai documentasi microsoft, tinggal kita kirim message dengan nilai berikut:
      {Code ini tentu hanya utk versi window xp dan 2003 server}

      const LV_VIEW_TILE = $0004;
      LVM_SETVIEW = $108E;

      SendMessage(listView1.Handle, LVM_SETVIEW, LV_VIEW_TILE, 0);

      Saya blom coba, silakan anda coba sendiri.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s