【问题标题】:How to add a Name=Value pair to the RzCheckList component?如何将 Name=Value 对添加到 RzCheckList 组件?
【发布时间】:2021-03-27 11:07:28
【问题描述】:

在 Delphi Win32 VCL 应用程序中,我使用了类似于标准 TCheckListBoxTRzCheckList 组件,但有几个附加功能。

TRzCheckList 是包含在 Delphi IDE 中的 GetIt 包管理器中免费提供的“Konopka Signature VCL 控件”的一部分:

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

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

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

同样,使用此代码时:

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

...我得到这个结果:

那么,如何将 Name=Value 对添加到 RzCheckList 组件并只显示 Name 部分?

【问题讨论】:

    标签: delphi delphi-10.4-sydney checklistbox


    【解决方案1】:

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

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

    然后在OnDrawItem event-handler 中实现这段代码:

    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;
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-12
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      • 2015-01-18
      • 2021-06-02
      相关资源
      最近更新 更多