2012-2-26 12:22
ron_xin
求指教--自制脚本重命名特定组件
/*想用脚本实现类似组件前缀专家的功能,手动对当前窗体特定的组件进行重命名,参考ComponentGrid.pas,但是脚本无法编译通过
提示信息如下:
正在编译...
编译器: [Error] (1:1): 'BEGIN' expected
编译失败
*/
{*******************************************************}
{ }
{ Pascal Script Source File }
{ Run by RemObjects Pascal Script in CnWizards }
{ }
{ Generated by CnPack IDE Wizards }
{ }
{*******************************************************}
program ReNameDBControl;
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
CnWizUtils ,DBCtrls;
var
DesignContainer, Comp: TComponent;
I,CompCount: Integer;
begin
DesignContainer := IdeGetDesignedForm(nil);
if DesignContainer = nil then
begin
ErrorDlg('NO Designer Found.');
Exit;
end;
if DesignContainer.ComponentCount = 0 then
begin
ErrorDlg('NO Component to Process.');
Exit;
end;
for i := 0 to DesignContainer.ComponentCount - 1 do
begin
if DesignContainer.Components[i] is TDBEdit then
begin
Comp :=DesignContainer.Components[i];
SetPropValue(Comp, 'Name','dbedt'+Comp.DataField);
end;
end;
end.
[[i] 本帖最后由 ron_xin 于 2012-2-26 13:28 编辑 [/i]]
2012-2-26 16:05
ron_xin
发现,将DBCtrls加入到uses,就会编译失败,不知何故。翻看了论坛所有贴子,只要改DBCtrls改成IdeInstComp 就行了。
[[i] 本帖最后由 ron_xin 于 2012-2-26 18:24 编辑 [/i]]
2012-2-26 18:22
ron_xin
{*******************************************************}
{ }
{ Pascal Script Source File }
{ Run by RemObjects Pascal Script in CnWizards }
{ }
{ Generated by CnPack IDE Wizards }
{ }
{*******************************************************}
program ReNameDBControl;
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
CnWizUtils ,TypInfo ,IdeInstComp;
var
DesignContainer, Comp: TComponent;
I,CompCount: Integer;
sDataField: string ;
begin
DesignContainer := IdeGetDesignedForm(nil);
if DesignContainer = nil then
begin
ErrorDlg('NO Designer Found.');
Exit;
end;
if DesignContainer.ComponentCount = 0 then
begin
ErrorDlg('NO Component to Process.');
Exit;
end;
for i := 0 to DesignContainer.ComponentCount - 1 do
begin
if DesignContainer.Components[i] is TDBEdit then
begin
Comp :=DesignContainer.Components[i];
sDataField :=TDBEdit(DesignContainer.Components[i]).DataField;
SetPropValue(Comp, 'Name','dbedt'+sDataField);
end;
end;
end.
2012-2-26 23:26
Passion
Pascal Script的Uses部分不能随意uses标准库,这是其脚本特性决定的,只能使用我们预注册的unit以及IDE实例内部存在的unit。
DBCtrls此单元我们未在编译期预注册至脚本引擎,因此uses会失败。但uses IdeInstComp后,此单元会将IDE中存在的类都导入脚本引擎,因此可以使用TDBEdit来进行判断。
2012-2-27 23:58
ron_xin
再次请教,脚本中好像无法处理DBGrid中的Columns属性性,因为Columns[j].Title.Alignment通常都要设为taCenter,请问没有其他办法可行?
正在编译...
编译器: [Error] (37:37): Unknown identifier 'COLUMNS'
编译失败
for i := 0 to DesignContainer.ComponentCount - 1 do
begin
if DesignContainer.Components[i] is TDBGridEh then
begin
Comp :=DesignContainer.Components[i];
for j := 0 to TDBGridEh(Comp).Columns.count - 1 do
begin
TDBGridEh(Comp).Columns[j].Title.Alignment :=taCenter;
TDBGridEh(Comp).Columns[j].Width :=100;
end;
end;
end;
[[i] 本帖最后由 ron_xin 于 2012-2-28 00:00 编辑 [/i]]
2012-2-29 22:38
Passion
试一试GetColumns函数来取代Columns属性?脚本似乎对index类型的属性支持不好。
页:
[1]
Powered by Discuz! Archiver 5.0.0
© 2001-2006 Comsenz Inc.