gpt4 book ai didi

delphi - VirtualStringTree - 在单元格中嵌入控件 - 控件不显示

转载 作者:行者123 更新时间:2023-12-03 15:00:37 26 4
gpt4 key购买 nike

所以,我的最终目标是找到一种方法,通过客户端区域内的添加/删除按钮来列出项目(例如 vsReport 中的 TListView)。

例如:

|----------------|
|Old Item 1 X |
|Old Item 2 X |
|Add new item... |
| |
|----------------|

如果您知道有一个组件无需所有这些额外工作即可完成此操作,请告诉我!

所以我选择了一个红色的闭合“X”,并使用 TJvTransparentButton(Jedi 组件 - JVCL)来显示它。它处理按下/未按下状态并仅显示图像。我最初使用了 TButton,但我不需要字形周围的所有绒毛。

现在,我将图像按钮保留在与每个节点关联的记录中。

代码如下:

procedure TfrmMain.AddNewAccount(const Username, Password: String);
var
Data : PTreeData;
XNode : PVirtualNode;
Begin
XNode := vstAccounts.AddChild(nil);
If vstAccounts.AbsoluteIndex(XNode) > -1 Then
begin
Data := vstAccounts.GetNodeData(Xnode);
Data^.Column0 := Username;
Data^.Column1 := '';
Data^.DeleteButton := TJvTransparentButton.Create(nil);
With Data^.DeleteButton Do
begin
Parent := vstAccounts;
Left := 0;
Top := 0;
Width := 16;
Height := 16;
Anchors := [];
AutoGray := False;
BorderWidth := 0;
FrameStyle := fsNone;
Images.ActiveImage := iListView;
Images.ActiveIndex := 0;
end;
end;
end;

在 OnAfterCellPaint 事件中,我管理图像按钮的位置,如下所示:

procedure TfrmMain.vstAccountsAfterCellPaint(Sender: TBaseVirtualTree;
TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
CellRect: TRect);
var
Data : PTreeData;
begin
If Column = 1 Then
begin
Data := vstAccounts.GetNodeData(Node);
If Assigned(Data) Then
begin
With Data^.DeleteButton Do
begin
BoundsRect := CellRect;
end;
end;
end;
end;

现在的问题是这根本不显示该项目。我知道 TImageList 中的图像很好,因为我可以在设计时创建按钮,并且它在运行时看起来很好。

我也知道这段代码应该可以工作,因为如果我将 TJvTransparentButton 设为常规 TButton(不更改代码逻辑),它就可以正常工作并显示良好!

我唯一能想到的是TButton继承自TWinControl,而TJvTransparentButton继承自TControl。

有什么想法吗?

最佳答案

我假设 TJvTransparentButton 是一个 TGraphicControl,因此显示为 Parent 背景的一部分(这就是为什么 Tlabel 始终位于同一 Parent 中的 TEdit 或 TButton 后面)。
TButton 是一个 TWinControl,因此绘制在 Parent 的顶部以及同一 Parent 中其他 WinControl 的上方或下方。

因此,要么在单元格的常规绘制发生后再次绘制 TJvTransparentButton(更新 BoundsRect 是不够的),要么使用 WinControl。
例如,使用带有 TJvTransparentButton 的 TPanel 应该可以。

免责声明:我不熟悉 VirtualStringTree 也不熟悉 TJvTransparentButton ...

关于delphi - VirtualStringTree - 在单元格中嵌入控件 - 控件不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8650478/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com