vault backup: 2025-09-10 22:49:43

This commit is contained in:
2025-09-10 22:49:43 +08:00
parent c28efd0f6b
commit d676ff0eb6

View File

@ -878,58 +878,92 @@ end.
```delphi
uses MyClass,Variables,BaseUtil,CommonFunc,DataConst,CFFrm,CFSimplePropFrm,Forms,StdCtrls,Variants,SysUtils,Classes,Controls,Dialogs,CHostIntf,ProductClas,DocClas,LoginClas,VirtualTrees,CEntClas,PathClas,cxRadioGroup;
uses
MyClass, Variables, BaseUtil, CommonFunc, DataConst, CFFrm, CFSimplePropFrm,
Forms, StdCtrls, Variants, SysUtils, Classes, Controls, Dialogs, CHostIntf,
ProductClas, DocClas, LoginClas, VirtualTrees, CEntClas, PathClas, cxRadioGroup;
var
  i: Integer;
  j: Integer;
  n: Integer;
  frm: TForm;
  scb: TScrollBox;
  rdg: TcxRadioGroup;
  ctrl: TControl;   
  gb: TGroupBox;
  rdgName: string;
  hidPnlNames: TStringList;
i: Integer; // 外层循环计数器(窗体遍历)
j: Integer; // 中层循环计数器(滚动框控件遍历)
n: Integer; // 内层循环计数器(分组框控件遍历)
frm: TForm; // 当前处理的窗体对象
scb: TScrollBox; // 单选框的父容器(滚动框)
rdg: TcxRadioGroup; // 目标单选框组件
ctrl: TControl; // 通用控件对象(用于遍历)
gb: TGroupBox; // 分组框控件(特殊容器处理)
rdgName: string; // 目标单选框组件名称
hidPnlNames: TStringList; // 需要隐藏的容器名称列表
begin
  rdgName := 'rdgrpmuf_1';  // 单选框组件
  hidPnlNames := TStringList.Create;
  try
    hidPnlNames.Add('gbcxtsCusPage_1');   // 添加要隐藏的容器名 
    hidPnlNames.Add('gbcxtsCusPage_2');   // 可以多个
    for i := 0 to Screen.FormCount - 1 do
    begin
      frm := Screen.Forms[i];
      if Pos('CFFormSheetPropForm', frm.Name) = 1 then begin //找到了窗口
        rdg := TcxRadioGroup(frm.FindComponent(rdgName));
        if Assigned(rdg) then begin  // 找到了单选框
          scb := rdg.Parent as TScrollBox;  // 遍历父容器
          for j := 0 to scb.ControlCount - 1 do
          begin
            ctrl := scb.Controls[j];   
            if hidPnlNames.IndexOf(ctrl.Name)>-1 then begin
              if rdg.itemindex = 0 then begin
                ctrl.visible := false;
              end;
            end else begin // 不是想要的控件
              if ctrl is TGroupBox then begin // 如果是分组框,再遍历子件 
                gb := ctrl as TGroupBox;
                for n := 0 to gb.ControlCount - 1 do begin
                  ctrl := gb.Controls[n];
                  if hidPnlNames.IndexOf(ctrl.Name)>-1 then begin
                    if rdg.itemindex = 0 then begin
                      ctrl.visible := false;
                    end;
                  end; 
                end;
              end
            end;
          end;
        end;
      end;
    end;
  finally
    hidPnlNames.Free;
  end;
rdgName := 'rdgrpmuf_1'; // 指定目标单选框组件的名称
// 创建并初始化需要隐藏的容器名称列表
hidPnlNames := TStringList.Create;
try
// 添加需要隐藏的容器名称(可扩展多个)
hidPnlNames.Add('gbcxtsCusPage_1');
hidPnlNames.Add('gbcxtsCusPage_2');
// 遍历屏幕上所有已打开的窗体
for i := 0 to Screen.FormCount - 1 do
begin
frm := Screen.Forms[i];
// 检查窗体名称是否以'CFFormSheetPropForm'开头(匹配目标窗体)
if Pos('CFFormSheetPropForm', frm.Name) = 1 then
begin
// 在窗体中查找目标单选框组件
rdg := TcxRadioGroup(frm.FindComponent(rdgName));
// 如果成功找到单选框组件
if Assigned(rdg) then
begin
// 获取单选框的父容器假定为TScrollBox类型
scb := rdg.Parent as TScrollBox;
// 遍历滚动框中的所有控件
for j := 0 to scb.ControlCount - 1 do
begin
ctrl := scb.Controls[j];
// 检查当前控件是否在隐藏列表中
if hidPnlNames.IndexOf(ctrl.Name) > -1 then
begin
// 如果单选框选中第一项ItemIndex=0则隐藏该控件
if rdg.ItemIndex = 0 then
ctrl.Visible := False;
end
else // 如果不在直接隐藏列表中,进一步检查是否为容器控件
begin
// 如果控件是分组框TGroupBox
if ctrl is TGroupBox then
begin
gb := ctrl as TGroupBox;
// 遍历分组框内的所有子控件
for n := 0 to gb.ControlCount - 1 do
begin
ctrl := gb.Controls[n];
// 检查子控件是否在隐藏列表中
if hidPnlNames.IndexOf(ctrl.Name) > -1 then
begin
// 单选框选中第一项时隐藏子控件
if rdg.ItemIndex = 0 then
ctrl.Visible := False;
end;
end;
end;
end;
end;
end;
end;
end;
finally
// 释放隐藏列表资源(确保异常时也能释放)
hidPnlNames.Free;
end;
end.
```