在 ListView 的 Item 中顯示 CheckBox 與 Button

 

在ListView的Item中显示CheckBox与Button,主要思路就是在绘制每一个Item时创建一个CheckBox与Button,并显示在Item对应Column的位置.主要注意于3点:

将要显示的CheckBox与Button(其实可以更多其它控件)定义在一个结构中,使用指针连接到Item.Data,以便与该Item对应
要检查Item.Data是否为nil,防止重复创建控件
通过Item.SubItem所对应的Column.Width得出CheckBox与Button应该放置的坐标
代码并不难懂,首先定义一个结构:

type PItemCtrl = ^TItemCtrl
  TtemCtrl = record
     CheckBox: TCheckBox;
     Button: TButton;
   end;
end;

procedure TfrmMain.ListView1CustomDrawSubItem(Sender: TCustomListView; Item: TListItem; SubItem: Integer; State: TCustomDrawState; var DefaultDraw: Boolean);
var
  Rect: TRect;
  P: PItemCtrl;
begin
  { 第2个子项目上显示CheckBox,第5个子项目上显示Button }
  if SubItem in [2, 5] then
  begin
    DefaultDraw:= False;        // 不显示默认的文本.
    Rect:= Item.DisplayRect(drBounds);  // 获取Item显示的区域.

    if Item.Data = nil then     // 如果为空则创建CheckBox及Button.
    begin
      new(P);   // 创建一个指针用于存储CheckBox及Button.

      { 创建并显示CheckBox }
      P.CheckBox:= TCheckBox.Create(ListView1);
      P.CheckBox.Parent:= ListView1;
      P.CheckBox.Caption:= '';
      P.CheckBox.Width:= 20;
      P.CheckBox.Height:= 20;
      P.CheckBox.Left:= Rect.Right - ListView1.Columns[3].Width
        - ListView1.Columns[4].Width - ListView1.Columns[5].Width
        - ((ListView1.Columns[2].Width + P.CheckBox.Width) div 2);
      P.CheckBox.Top:= Rect.Top;
      P.CheckBox.Visible:= True;
      { SubItems[2 -1].Caption为0和1,直接转换为Boolean型并给CheckBox赋值. }
      P.CheckBox.Checked:= StrToBool(Item.SubItems[SubItem -1]);

      { 创建并显示Button }
      P.Button:= TSpeedButton.Create(ListView1);
      P.Button.Parent:= ListView1;
      P.Button.Caption:= '...';
      P.Button.Width:= 20;
      P.Button.Height:= 20;
      P.Button.Left:= Rect.Right - ((ListView1.Columns[5].Width
        + P.Button.Width) div 2);
      P.Button.Top:= Rect.Top;
      P.Button.Visible:= True;

      Item.Data:= P;    // 将CheckBox及Button的结构指针保存于Item.Data属性.
    end;
  end;
end;
基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究(Matlab代码实现)内容概要:本文围绕“基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究”展开,提出了一种结合数据驱动方法Koopman算子理论的递归神经网络(RNN)模型线性化方法,旨在提升纳米定位系统的预测控制精度动态响应能力。研究通过构建数据驱动的线性化模型,克服了传统非线性系统建模复杂、计算开销大的问题,并在Matlab平台上实现了完整的算法仿真验证,展示了该方法在高精度定位控制中的有效性实用性。; 适合人群:具备一定自动化、控制理论或机器学习背景的科研人员工程技术人员,尤其是从事精密定位、智能控制、非线性系统建模预测控制相关领域的研究生研究人员。; 使用场景及目标:①应用于纳米级精密定位系统(如原子力显微镜、半导体制造设备)中的高性能预测控制;②为复杂非线性系统的数据驱动建模线性化提供新思路;③结合深度学习经典控制理论,推动智能控制算法的实际落地。; 阅读建议:建议读者结合Matlab代码实现部分,深入理解Koopman算子RNN结合的建模范式,重点关注数据预处理、模型训练控制系统集成等关键环节,并可通过替换实际系统数据进行迁移验证,以掌握该方法的核心思想工程应用技巧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值