1.创建应用,添加控件(与上一节一样)
(1) ControlList 控件(显示列表数据),设置itemwidth 为400
(2) ClientDataSet 控件(连接本地数据)
(3) 放置 image1,(显示图片) 2个label (显示列表数据)
2. 利用LiveBindings 绑定数据
3.系统编码
unit Unit2;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Datasnap.DBClient,
Vcl.ControlList, Data.Bind.EngExt, Vcl.Bind.DBEngExt, Vcl.Bind.ControlList,
System.Rtti, System.Bindings.Outputs, Vcl.Bind.Editors, Vcl.VirtualImage,
Vcl.StdCtrls, Data.Bind.Components, Data.Bind.Grid, Data.Bind.DBScope,math,
Vcl.ExtCtrls;type
TForm2 = class(TForm)
ControlList1: TControlList;
BindingsList1: TBindingsList;
LinkPropertyToFieldCaption: TLinkPropertyToField;
LinkPropertyToFieldCaption2: TLinkPropertyToField;
LinkControlToField1: TLinkControlToField;
LinkPropertyToFieldCaption3: TLinkPropertyToField;
LinkPropertyToFieldCaption4: TLinkPropertyToField;
Label1: TLabel;
Image1: TImage;
Label2: TLabel;
fish: TClientDataSet;
BindSourceDB1: TBindSourceDB;
LinkGridToDataSourceBindSourceDB1: TLinkGridToDataSource;
fishSpeciesNo: TFloatField;
fishCategory: TStringField;
fishCommon_Name: TStringField;
fishSpeciesName: TStringField;
fishLengthcm: TFloatField;
fishLength_In: TFloatField;
fishNotes: TMemoField;
fishGraphic: TGraphicField;
LinkPropertyToFieldCaption6: TLinkPropertyToField;
LinkPropertyToFieldCaption5: TLinkPropertyToField;
procedure FormResize(Sender: TObject);
procedure ControlList1BeforeDrawItem(AIndex: Integer; ACanvas: TCanvas;
ARect: TRect; AState: TOwnerDrawState);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form2: TForm2;implementation
{$R *.dfm}
procedure TForm2.ControlList1BeforeDrawItem(AIndex: Integer; ACanvas: TCanvas;
ARect: TRect; AState: TOwnerDrawState);
begin
label1.Width:=controllist1.ItemWidth-label1.Left;
var ms:=tmemorystream.Create;
fishgraphic.SaveToStream(ms);
ms.Position:=8;
image1.Picture.LoadFromStream(ms);
ms.Free;
end;procedure TForm2.FormResize(Sender: TObject);
begin
var w:=ControlList1.ClientWidth;
var margins:=controllist1.ItemMargins.Left + controllist1.ItemMargins.Right;
var itemcount:=max(1,w div 400);
ControlList1.ItemWidth:=( w - itemcount * margins ) div itemcount;end;
end.
4.运行显示效果