带有 LiveBindings 的 TControlList 创建自适用宽度的列表内容显示

发布于:2022-12-21 ⋅ 阅读:(497) ⋅ 点赞:(0)

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.运行显示效果

 

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到