如何向 RzCheckList 组件添加 Name=Value 对?

问题描述

在 Delphi Win32 VCL 应用程序中,我使用了 TRzCheckList 组件,它与标准的 TCheckListBox 类似,但有几个附加功能

TRzCheckList 是包含的“Konopka Signature VCL Controls”的一部分,可从 Delphi IDE 中的 GetIt Package Manager 免费获得:

enter image description here

我尝试使用以下代码向 RzCheckList 添加“Name=Value”对:

ThisItem := RzCheckList1.AddItemToGroup(0,'MyName');
RzCheckList1.Items.ValueFromIndex[ThisItem] := 'MyValue';

但是,我没有在 RzCheckList 中显示“MyName”(“MyValue”作为项目的隐藏部分),而是在运行时得到:

enter image description here

同样,使用此代码时:

RzCheckList1.Items.AddPair('MyName','MyValue');

...我得到这个结果:

enter image description here

那么,如何在 RzCheckList 组件中添加一个 Name=Value 对,并且只显示 Name 部分?

解决方法

使用此代码将配对添加到特定组:

RzCheckList1.AddItemToGroup(0,'MyName=MyValue');

然后在 OnDrawItem 事件处理程序中实现此代码:

procedure TformMain.RzCheckList1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
var
  Flags: Longint;
  Data: String;
  FCanvas: TCanvas;
  CheckListBox: TCheckListBox;
begin
  CheckListBox := TCheckListBox(Control);
  FCanvas := CheckListBox.Canvas;
  FCanvas.FillRect(Rect);
  if Index < CheckListBox.Count then
  begin
    Flags := DrawTextBiDiModeFlags(DT_SINGLELINE or DT_VCENTER or DT_NOPREFIX);
    if not UseRightToLeftAlignment then
      Inc(Rect.Left,2)
    else
      Dec(Rect.Right,2);
    Data := CheckListBox.Items.Names[Index];

    DrawText(FCanvas.Handle,Data,Length(Data),Rect,Flags);
  end;
end;

这会在运行时为您提供所需的结果:

enter image description here