Board logo

Subject: 求指教--自制脚本重命名特定组件 [Print This Page]

Author: ron_xin    Time: 2012-2-26 12:22     Subject: 求指教--自制脚本重命名特定组件

/*想用脚本实现类似组件前缀专家的功能,手动对当前窗体特定的组件进行重命名,参考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]]
Author: ron_xin    Time: 2012-2-26 16:05

发现,将DBCtrls加入到uses,就会编译失败,不知何故。翻看了论坛所有贴子,只要改DBCtrls改成IdeInstComp 就行了。

[[i] 本帖最后由 ron_xin 于 2012-2-26 18:24 编辑 [/i]]
Author: ron_xin    Time: 2012-2-26 18:22

{*******************************************************}
{                                                       }
{       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.
Author: Passion    Time: 2012-2-26 23:26

Pascal Script的Uses部分不能随意uses标准库,这是其脚本特性决定的,只能使用我们预注册的unit以及IDE实例内部存在的unit。

DBCtrls此单元我们未在编译期预注册至脚本引擎,因此uses会失败。但uses IdeInstComp后,此单元会将IDE中存在的类都导入脚本引擎,因此可以使用TDBEdit来进行判断。
Author: ron_xin    Time: 2012-2-27 23:58

再次请教,脚本中好像无法处理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]]
Author: Passion    Time: 2012-2-29 22:38

试一试GetColumns函数来取代Columns属性?脚本似乎对index类型的属性支持不好。




Welcome to CnPack Forum (http://bbs.cnpack.org/) Powered by Discuz! 5.0.0