vault backup: 2025-05-08 20:05:46
This commit is contained in:
@ -191,6 +191,14 @@ end.
|
||||
|
||||
## 批量校验控件并进行更新
|
||||
|
||||
自动检查并强制更新一组相关联的复选框(CheckBox)控件的状态,确保当某个"启用"复选框未被选中时,其相关联的"影响"复选框也必须处于未选中状态
|
||||
|
||||
1. 脚本核心功能
|
||||
|
||||
- **强制关联逻辑**:当某个"启用"复选框(如cbxusr_01_FIsEnable)未被选中时,自动将其关联的3个"影响"复选框(cbxusr_01_FIsAffectPrice、cbxusr_01_FIsAffectPlan、cbxusr_01_FIsAffectCost)设为未选中状态
|
||||
|
||||
- **适用范围**:处理5组不同的控件组合(01-04和06),每组都有相同的关联关系
|
||||
|
||||
```Delphi
|
||||
uses MyClass,Variables,BaseUtil,CommonFunc,DataConst,CFFrm,CFSimplePropFrm,Forms,StdCtrls,Variants,SysUtils,Classes,Controls,Dialogs,
|
||||
CHostIntf,ProductClas,DocClas,LoginClas,VirtualTrees,CEntClas,PathClas;
|
||||
@ -267,6 +275,114 @@ begin
|
||||
end.
|
||||
```
|
||||
|
||||
### 进一步优化
|
||||
|
||||
```Delphi
|
||||
uses MyClass,Variables,BaseUtil,CommonFunc,DataConst,CFFrm,CFSimplePropFrm,Forms,StdCtrls,Variants,SysUtils,Classes,Controls,Dialogs,
|
||||
CHostIntf,ProductClas,DocClas,LoginClas,VirtualTrees,CEntClas,PathClas;
|
||||
|
||||
var
|
||||
ModifiedControls: TStringList;
|
||||
CurrentForm: TForm;
|
||||
|
||||
// 获取控件的中文描述
|
||||
function GetControlChineseName(ControlName: string): string;
|
||||
var
|
||||
Prefix, Suffix: string;
|
||||
PrefixDesc, SuffixDesc: string;
|
||||
begin
|
||||
// 提取前缀(01/02/03/04/06)和后缀(FIsEnable/FIsAffectPrice等)
|
||||
Prefix := Copy(ControlName, Pos('_', ControlName) + 1, 2);
|
||||
Suffix := Copy(ControlName, Pos('_', ControlName) + 4, MaxInt);
|
||||
|
||||
// 映射前缀到中文描述
|
||||
if Prefix = '01' then PrefixDesc := '仓库'
|
||||
else if Prefix = '02' then PrefixDesc := '仓位'
|
||||
else if Prefix = '03' then PrefixDesc := 'BOM版本'
|
||||
else if Prefix = '04' then PrefixDesc := '批号'
|
||||
else if Prefix = '06' then PrefixDesc := '计划跟踪号'
|
||||
else PrefixDesc := '未知';
|
||||
|
||||
// 映射后缀到中文描述
|
||||
if Suffix = 'FIsEnable' then SuffixDesc := '启用'
|
||||
else if Suffix = 'FIsAffectPrice' then SuffixDesc := '影响价格'
|
||||
else if Suffix = 'FIsAffectPlan' then SuffixDesc := '影响计划'
|
||||
else if Suffix = 'FIsAffectCost' then SuffixDesc := '影响出库成本'
|
||||
else SuffixDesc := '未知';
|
||||
|
||||
Result := SuffixDesc + '(' + PrefixDesc + ')';
|
||||
end;
|
||||
|
||||
procedure ProcessControls(EnablePrefix: string);
|
||||
var
|
||||
EnableCheckBox: TCheckBox;
|
||||
AffectCheckBox: TCheckBox;
|
||||
AffectNames: array[0..2] of string;
|
||||
AffectControlName, EnableControlName: string;
|
||||
i: Integer;
|
||||
ChineseDesc: string;
|
||||
begin
|
||||
AffectNames[0] := 'FIsAffectPrice';
|
||||
AffectNames[1] := 'FIsAffectPlan';
|
||||
AffectNames[2] := 'FIsAffectCost';
|
||||
|
||||
EnableControlName := 'cbxusr_' + EnablePrefix + '_FIsEnable';
|
||||
EnableCheckBox := TCheckBox(CurrentForm.FindComponent(EnableControlName));
|
||||
|
||||
if Assigned(EnableCheckBox) and not EnableCheckBox.Checked then
|
||||
begin
|
||||
for i := 0 to High(AffectNames) do
|
||||
begin
|
||||
AffectControlName := 'cbxusr_' + EnablePrefix + '_' + AffectNames[i];
|
||||
AffectCheckBox := TCheckBox(CurrentForm.FindComponent(AffectControlName));
|
||||
|
||||
if Assigned(AffectCheckBox) and AffectCheckBox.Checked then
|
||||
begin
|
||||
ChineseDesc := GetControlChineseName(AffectControlName);
|
||||
ModifiedControls.Add(ChineseDesc + ' 已被自动修改为未选中状态,因为 ' +
|
||||
GetControlChineseName(EnableControlName) + ' 未被选中');
|
||||
AffectCheckBox.Checked := False;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
begin
|
||||
ModifiedControls := TStringList.Create;
|
||||
try
|
||||
try
|
||||
CurrentForm := Screen.ActiveForm;
|
||||
if not Assigned(CurrentForm) then
|
||||
begin
|
||||
ShowMessage('无法获取当前窗体');
|
||||
Exit;
|
||||
end;
|
||||
|
||||
ProcessControls('01');
|
||||
ProcessControls('02');
|
||||
ProcessControls('03');
|
||||
ProcessControls('04');
|
||||
ProcessControls('06');
|
||||
|
||||
if ModifiedControls.Count > 0 then
|
||||
begin
|
||||
ShowMessage(
|
||||
'以下控件的值已被自动修改:' + #13#10 +
|
||||
'--------------------------------' + #13#10 +
|
||||
ModifiedControls.Text + #13#10 +
|
||||
'--------------------------------'
|
||||
);
|
||||
end;
|
||||
except
|
||||
on E: Exception do
|
||||
ShowMessage('执行脚本时出错: ' + E.Message);
|
||||
end;
|
||||
finally
|
||||
ModifiedControls.Free;
|
||||
end;
|
||||
end.
|
||||
```
|
||||
|
||||
## 更新枚举选项
|
||||
|
||||
`cbxusr_444` 控件的值必须等于 `cbxusr_333` 控件的值(枚举选项用 `.Text` 可以直接获取,直接赋值,但是不能直接设置在控件上)
|
||||
|
Reference in New Issue
Block a user