0

有没有办法在 TJvDockVSPopupPanel 设置后更改它的选项卡图标?

问题是我想在我的程序通过...更改后将选项卡图标更改为验证图像

ImageList1: TImageList;

procedure TValidationWindow.UpdateIcon;
var
    i, topValidationError  : integer;
begin
    topValidationError := 3;

    {
        SECTION
        //Set topValidationError value to the specific error that has occurred
        SECTION END
    }

    // Set the Icon to the specific image.
    ImageList1.GetIcon(topValidationError, Self.Icon);
end;

以上仅适用于第一次!有任何想法吗?

编辑:

经过进一步检查,我发现 TJvDockCustomTabControl 中有一个 FImages:TCustomImageList,但是我还没有找到访问 FImages 的方法,我假设必须有某种方法可以将我的图标添加到此列表中,然后只需更改使用 imageindex 的选项卡图标图像。

解决了:

所以最大的问题是访问图像列表,这可以通过允许访问 TJVDockTabControl 的 TJvDockVIDTabPageControl 来完成。

更改选项卡图标的代码是...

if (GetAncestors(Self, 3) is TJvDockTabHostForm) then
    if ((GetAncestors(Self, 3) as TjvDockTabHostForm).PageControl is TJvDockVIDTabPageControl) then
    begin
        if FTabSheetIndex = - 1 then
            FTabSheetIndex := ((GetAncestors(Self, 3) as TjvDockTabHostForm).PageControl as TJvDockVIDTabPageControl).PageSheets.IndexOf(TJvDockTabSheet(Self.Parent));
        ((GetAncestors(Self, 3) as TjvDockTabHostForm).PageControl as TJvDockVIDTabPageControl).Pages[FTabSheetIndex].ImageIndex := x// The icon you want to use
        ((GetAncestors(Self, 3) as TjvDockTabHostForm).PageControl as TJvDockVIDTabPageControl).Panel.Refresh;
    end;

我已经包含了 FTabSheetIndex,因为对 DockHostWindow 的更改可能会导致选项卡发生更改,例如,在您更改的选项卡之前删除一个选项卡会导致选项卡索引顺序发生更改,因此可以轻松地将其设置为 -1 并再次找到。

可以在此处找到有关 GetAncestors() 的信息如何判断 TJvDockServer 表单是取消固定还是固定?

您还必须将您的图标添加到 TJvDockTabPageControl,最好在 FormShow 事件中完成...

if (GetAncestors(Self, 3) is TJvDockTabHostForm) then
    if ((GetAncestors(Self, 3) as TjvDockTabHostForm).PageControl is TJvDockVIDTabPageControl) then
    begin
        FTabImageListCount := ((GetAncestors(Self, 3) as TjvDockTabHostForm).PageControl as TJvDockVIDTabPageControl).Images.Count;
        for i := 0 to ImageList1.Count - 1 do
        begin
            ImageList1.GetIcon(i,Icon);
            ((GetAncestors(Self, 3) as TjvDockTabHostForm).PageControl as TJvDockVIDTabPageControl).Images.AddIcon(icon);
        end;
    end;

但是,如果表单没有在您的应用程序开始时显示,则图标更改功能可能无法正常工作,直到您专门单击选项卡以显示它。因此,最好在将表单添加到 TJvDockHostForm 后立即添加图标...这仍然是我正在研究的内容,但关键问题已得到解决。

4

1 回答 1

0

所以最大的问题是访问图像列表,这可以通过允许访问 TJVDockTabControl 的 TJvDockVIDTabPageControl 来完成。

更改选项卡图标的代码是...

if (GetAncestors(Self, 3) is TJvDockTabHostForm) then
    if ((GetAncestors(Self, 3) as TjvDockTabHostForm).PageControl is TJvDockVIDTabPageControl) then
    begin
        if FTabSheetIndex = - 1 then
            FTabSheetIndex := ((GetAncestors(Self, 3) as TjvDockTabHostForm).PageControl as TJvDockVIDTabPageControl).PageSheets.IndexOf(TJvDockTabSheet(Self.Parent));
        ((GetAncestors(Self, 3) as TjvDockTabHostForm).PageControl as TJvDockVIDTabPageControl).Pages[FTabSheetIndex].ImageIndex := x// The icon you want to use
        ((GetAncestors(Self, 3) as TjvDockTabHostForm).PageControl as TJvDockVIDTabPageControl).Panel.Refresh;
    end;

我已经包含了 FTabSheetIndex,因为对 DockHostWindow 的更改可能会导致选项卡发生更改,例如,在您更改的选项卡之前删除一个选项卡会导致选项卡索引顺序发生更改,因此可以轻松地将其设置为 -1 并再次找到。

可以在此处找到有关 GetAncestors() 的信息如何判断 TJvDockServer 表单是取消固定还是固定?

您还必须将您的图标添加到 TJvDockTabPageControl,最好在 FormShow 事件中完成...

if (GetAncestors(Self, 3) is TJvDockTabHostForm) then
    if ((GetAncestors(Self, 3) as TjvDockTabHostForm).PageControl is TJvDockVIDTabPageControl) then
    begin
        FTabImageListCount := ((GetAncestors(Self, 3) as TjvDockTabHostForm).PageControl as TJvDockVIDTabPageControl).Images.Count;
        for i := 0 to ImageList1.Count - 1 do
        begin
            ImageList1.GetIcon(i,Icon);
            ((GetAncestors(Self, 3) as TjvDockTabHostForm).PageControl as TJvDockVIDTabPageControl).Images.AddIcon(icon);
        end;
    end;

但是,如果表单没有在您的应用程序开始时显示,则图标更改功能可能无法正常工作,直到您专门单击选项卡以显示它。因此,最好在将表单添加到 TJvDockHostForm 后立即添加图标...这仍然是我正在研究的内容,但关键问题已得到解决。

于 2013-02-13T13:16:48.150 回答