问题描述
在 Delphi Win32 VCL 应用程序中,我使用了 TRzCheckList
组件,它与标准的 TCheckListBox
类似,但有几个附加功能。
TRzCheckList
是包含的“Konopka Signature VCL Controls”的一部分,可从 Delphi IDE 中的 GetIt Package Manager 免费获得:
我尝试使用以下代码向 RzCheckList 添加“Name=Value”对:
ThisItem := RzCheckList1.AddItemToGroup(0,'MyName');
RzCheckList1.Items.ValueFromIndex[ThisItem] := 'MyValue';
但是,我没有在 RzCheckList 中显示“MyName”(“MyValue”作为项目的隐藏部分),而是在运行时得到:
同样,使用此代码时:
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;
这会在运行时为您提供所需的结果: