- Mustangpeak Common Library - 1.7.0 - EasyListview - 1.7.0 git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.Mustangpeak@2 60b41242-d4b9-2247-b156-4ccd40706241
159 lines
4.3 KiB
ObjectPascal
159 lines
4.3 KiB
ObjectPascal
unit Unit1;
|
|
|
|
// Demo: use EasyListview with virtual data
|
|
//
|
|
// In this mode the listview does not store item captions, imageindexes etc but
|
|
// asks for them on the fly when it needs them, using one of the data callback
|
|
// events:
|
|
// OnColumnGetCaption
|
|
// OnColumnGetDetail
|
|
// OnColumnGet...
|
|
// OnGroupGetCaption
|
|
// OnGroupGetDetail
|
|
// OnGroupGet...
|
|
// OnItemGetCaption
|
|
// OnItemGetTileDetail
|
|
// OnItemGet...
|
|
//
|
|
// This allows you to store the data anywhere you want. You can even reuse your
|
|
// existing data structures and simply use the listview as view into your data.
|
|
|
|
interface
|
|
|
|
{$I ..\..\..\Source\Compilers.inc}
|
|
|
|
uses
|
|
Windows,
|
|
Messages,
|
|
SysUtils,
|
|
{$IFDEF COMPILER_6_UP}
|
|
Variants,
|
|
{$ENDIF COMPILER_6_UP}
|
|
Classes,
|
|
Graphics,
|
|
Controls,
|
|
Forms,
|
|
Dialogs,
|
|
EasyListview,
|
|
StdCtrls,
|
|
ExtCtrls, MPCommonObjects;
|
|
|
|
type
|
|
TForm1 = class(TForm)
|
|
LV: TEasyListview;
|
|
Panel1: TPanel;
|
|
cbViews: TComboBox;
|
|
Label1: TLabel;
|
|
procedure LVItemGetImageIndex(Sender: TCustomEasyListview;
|
|
const Item: TEasyItem; Column: Integer; ImageKind: TEasyImageKind;
|
|
var ImageIndex: TCommonImageIndexInteger);
|
|
procedure LVItemGetCaption(Sender: TCustomEasyListview;
|
|
const Item: TEasyItem; Column: Integer; var Caption: WideString);
|
|
procedure cbViewsChange(Sender: TObject);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure LVItemGetTileDetailCount(Sender: TCustomEasyListview;
|
|
const Item: TEasyItem; var Count: Integer);
|
|
procedure LVItemGetTileDetail(Sender: TCustomEasyListview;
|
|
const Item: TEasyItem; Line: Integer; var Detail: Integer);
|
|
private
|
|
procedure AddColumns(Count: Integer);
|
|
procedure AddItems(Count: Integer);
|
|
end;
|
|
|
|
var
|
|
Form1: TForm1;
|
|
|
|
implementation
|
|
|
|
uses DatamoduleImagelists, ImgList;
|
|
|
|
{$R *.dfm}
|
|
|
|
procedure TForm1.FormCreate(Sender: TObject);
|
|
begin
|
|
FillStringsWithEasyListStyles(cbViews.Items);
|
|
cbViews.ItemIndex := Ord(LV.View);
|
|
|
|
// Set up listview. This can be done at design time in the object inspector.
|
|
// It is done here so that you can see which properties are changed.
|
|
Imagelists.UseImagesForListview(LV);
|
|
LV.Header.Visible := True;
|
|
AddColumns(2);
|
|
|
|
// Add a few items to play with.
|
|
AddItems(5000);
|
|
end;
|
|
|
|
procedure TForm1.cbViewsChange(Sender: TObject);
|
|
begin
|
|
// Synchronize list style combobox with listview list style.
|
|
LV.View := TEasyListStyle(cbViews.ItemIndex);
|
|
end;
|
|
|
|
procedure TForm1.AddColumns(Count: Integer);
|
|
var
|
|
Column: TEasyColumn;
|
|
i: Integer;
|
|
begin
|
|
// Columns can also be virtual and query their caption (etc) on the fly. It
|
|
// works in the same way as with items. Here, the columns are static for
|
|
// simplicity.
|
|
for i := 0 to Count - 1 do
|
|
begin
|
|
Column := LV.Header.Columns.Add;
|
|
Column.Caption := 'Column ' + IntToStr(i);
|
|
Column.ImageIndex := i;
|
|
Column.Width := 150;
|
|
end;
|
|
end;
|
|
|
|
procedure TForm1.AddItems(Count: Integer);
|
|
var
|
|
i: Integer;
|
|
begin
|
|
// Add items to the listview. Actually the items are added to the first
|
|
// group. This group is created automatically when the first item is added.
|
|
LV.BeginUpdate;
|
|
try
|
|
for i := 0 to Count - 1 do
|
|
LV.Items.AddVirtual;
|
|
finally
|
|
LV.EndUpdate;
|
|
end;
|
|
end;
|
|
|
|
procedure TForm1.LVItemGetCaption(Sender: TCustomEasyListview;
|
|
const Item: TEasyItem; Column: Integer; var Caption: WideString);
|
|
begin
|
|
case Column of
|
|
0: Caption := 'Item ' + IntToStr(Item.Index);
|
|
1: Caption := 'Detail ' + IntToStr(Item.Index);
|
|
end;
|
|
end;
|
|
|
|
procedure TForm1.LVItemGetImageIndex(Sender: TCustomEasyListview;
|
|
const Item: TEasyItem; Column: Integer; ImageKind: TEasyImageKind;
|
|
var ImageIndex: TCommonImageIndexInteger);
|
|
begin
|
|
if ImageKind = eikNormal then // important, make sure you don't return normal images for states or overlays
|
|
ImageIndex := Item.Index mod LV.ImagesSmall.Count;
|
|
end;
|
|
|
|
procedure TForm1.LVItemGetTileDetailCount(Sender: TCustomEasyListview;
|
|
const Item: TEasyItem; var Count: Integer);
|
|
begin
|
|
Count := 2
|
|
end;
|
|
|
|
procedure TForm1.LVItemGetTileDetail(Sender: TCustomEasyListview;
|
|
const Item: TEasyItem; Line: Integer; var Detail: Integer);
|
|
begin
|
|
// Map the Detail to a Header Column index
|
|
Detail := Line;
|
|
if Detail > LV.Header.Columns.Count - 1 then
|
|
Detail := 0
|
|
end;
|
|
|
|
end.
|
|
|