CnPack Forum


 
Subject: 求指教--自制脚本重命名特定组件
ron_xin
新警察
Rank: 1



UID 67421
Digest Posts 0
Credits 14
Posts 5
点点分 14
Reading Access 10
Registered 2012-2-17
Status Offline
Post at 2012-2-26 12:22  Profile | Blog | P.M. 
求指教--自制脚本重命名特定组件

/*想用脚本实现类似组件前缀专家的功能,手动对当前窗体特定的组件进行重命名,参考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]]
Top
ron_xin
新警察
Rank: 1



UID 67421
Digest Posts 0
Credits 14
Posts 5
点点分 14
Reading Access 10
Registered 2012-2-17
Status Offline
Post at 2012-2-26 16:05  Profile | Blog | P.M. 
发现,将DBCtrls加入到uses,就会编译失败,不知何故。翻看了论坛所有贴子,只要改DBCtrls改成IdeInstComp 就行了。

[[i] 本帖最后由 ron_xin 于 2012-2-26 18:24 编辑 [/i]]
Top
ron_xin
新警察
Rank: 1



UID 67421
Digest Posts 0
Credits 14
Posts 5
点点分 14
Reading Access 10
Registered 2012-2-17
Status Offline
Post at 2012-2-26 18:22  Profile | Blog | P.M. 
{*******************************************************}
{                                                       }
{       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 is TDBEdit then
    begin
      Comp :=DesignContainer.Components;
      sDataField :=TDBEdit(DesignContainer.Components).DataField;
      SetPropValue(Comp, 'Name','dbedt'+sDataField);
    end;
  end;

end.
Top
Passion (LiuXiao)
管理员
Rank: 9Rank: 9Rank: 9


UID 359
Digest Posts 19
Credits 6756
Posts 3554
点点分 6756
Reading Access 102
Registered 2004-3-28
Status Offline
Post at 2012-2-26 23:26  Profile | Blog | P.M. 
Pascal Script的Uses部分不能随意uses标准库,这是其脚本特性决定的,只能使用我们预注册的unit以及IDE实例内部存在的unit。

DBCtrls此单元我们未在编译期预注册至脚本引擎,因此uses会失败。但uses IdeInstComp后,此单元会将IDE中存在的类都导入脚本引擎,因此可以使用TDBEdit来进行判断。
Top
ron_xin
新警察
Rank: 1



UID 67421
Digest Posts 0
Credits 14
Posts 5
点点分 14
Reading Access 10
Registered 2012-2-17
Status Offline
Post at 2012-2-27 23:58  Profile | Blog | P.M. 
再次请教,脚本中好像无法处理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]]
Top
Passion (LiuXiao)
管理员
Rank: 9Rank: 9Rank: 9


UID 359
Digest Posts 19
Credits 6756
Posts 3554
点点分 6756
Reading Access 102
Registered 2004-3-28
Status Offline
Post at 2012-2-29 22:38  Profile | Blog | P.M. 
试一试GetColumns函数来取代Columns属性?脚本似乎对index类型的属性支持不好。
Top
 




All times are GMT++8, the time now is 2024-4-19 10:20

    本论坛支付平台由支付宝提供
携手打造安全诚信的交易社区 Powered by Discuz! 5.0.0  © 2001-2006 Comsenz Inc.
Processed in 0.008393 second(s), 7 queries , Gzip enabled

Clear Cookies - Contact Us - CnPack Website - Archiver - WAP