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

How to add a Name=Value pair to the RzCheckList component?

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

TRzCheckList 是包含的“Konopka 签名 VCL 控件”的一部分,可从 Delphi IDE:

中的 GetIt 包管理器免费获得

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

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

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

同样,使用此代码时:

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

...我得到这个结果:

那么,如何在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;

这会让您在 运行 时得到想要的结果: