⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 se_designer.pas

📁 小区水费管理系统源代码水费收费管理系统 水费收费管理系统
💻 PAS
📖 第 1 页 / 共 5 页
字号:

{ IDE Editors }

  TSeMenuBarEditor = class(TDefaultEditor)
  public
    procedure Edit; override;
    procedure ExecuteVerb (Index: Integer); override;
    function GetVerb (Index: Integer): String; override;
    function GetVerbCount: Integer; override;
  end;

  TSePopupMenuEditor = class(TDefaultEditor)
  public
    procedure Edit; override;
    procedure ExecuteVerb (Index: Integer); override;
    function GetVerb (Index: Integer): String; override;
    function GetVerbCount: Integer; override;
  end;

  TSeItemsPropertyEditor = class(TStringProperty)
  public
    procedure Edit; override;
    function GetAttributes: TPropertyAttributes; override;
    function GetValue: String; override;
  end;

var
  frmConvertForm: TfrmConvertForm;
  frmAddClass: TfrmAddClass;
  frmMenuDesignerForm: TfrmMenuDesignerForm;

{ Rules list routines }

function GetClassCount(Rules: string): integer;
function GetClassName(Rules: string; Index: integer): string;
procedure AddClassName(var Rules: string; NewClassName: string);
function AddClassName2(Rules: string; NewClassName: string): string;

procedure Register;

implementation {===============================================================}

uses TypInfo, Dialogs;

const
  SDefaultMenuItemName = 'CustomItem';
  
type

  THackControl = class(TControl);

procedure Register;
begin
  RegisterPropertyEditor(TypeInfo(TSeCustomItem), nil, 'Items', TSeItemsPropertyEditor);

  RegisterComponentEditor(TSeCustomTabControl, TSeTabControlEditor);
  RegisterComponentEditor(TSeCustomTabSheet, TSeTabControlEditor);
end;

function GetClassCount(Rules: string): integer;
begin
  Result := 0;
  while Rules <> '' do
  begin
    GetToken(Rules);
    Inc(Result);
  end;
end;

function GetClassName(Rules: string; Index: integer): string;
var
  Token: string;
  i: integer;
begin
  i := 0;
  while Rules <> '' do
  begin
    Token := GetToken(Rules);
    if i = Index then
    begin
      Result := Token;
      Exit;
    end;
    Inc(i);
  end;
  Result := '';
end;

procedure AddClassName(var Rules: string; NewClassName: string);
begin
  if (Rules <> '') and (Rules[Length(Rules)] <> ';') then
    Rules := Rules + ';';

  Rules := Rules + NewClassName;
end;

function AddClassName2(Rules: string; NewClassName: string): string;
begin
  if (Rules <> '') and (Rules[Length(Rules)] <> ';') then
    Rules := Rules + ';';

  Result := Rules + NewClassName;
end;

{ TSeCustomConverter ==========================================================}

constructor TSeCustomConverter.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FRules := TStringList.Create;

  BuildRules;
end;

destructor TSeCustomConverter.Destroy;
begin
  FRules.Free;
  inherited Destroy;
end;

procedure TSeCustomConverter.BuildRules;
begin
  Rules[ckButton] := 'TButton;TBitBtn;TRzButton;TspSkinButton;TbsSkinButton';
  Rules[ckCheckBox] := 'TCheckBox;TRzCheckBox;TspSkinCheckRadioBox;TbsSkinCheckRadioBox';
  Rules[ckRadioButton] := 'TRadioButton;TRzRadioButton';
  Rules[ckTrackBar] := 'TTackBar;TRxSlider;TRzTrackBar;TspSkinTrackBar;TbsSkinTrackBar';
  Rules[ckGroupBox] := 'TGroupBox';
  Rules[ckRadioGroup] := 'TRadioGroup;TRzRadioGroup';
  Rules[ckScrollBar] := 'TScrollBar;TspSkinScrollBar;TbsSkinScrollBar';
  Rules[ckListBox] := 'TListBox;TCheckListBox;TRzListBox;TRzCheckList;TspSkinListBox;TspSkinCheckListBox;TbsSkinListBox;TbsSkinCheckListBox';
  Rules[ckEdit] := 'TEdit;TMaskEdit;TRzEdit;TspSkinEdit;TbsSkinEdit';
  Rules[ckComboBox] := 'TComboBox;TRzComboBox;TspSkinComboBox;TbsSkinComboBox';
  Rules[ckSpeedButton] := 'TSpeedButton;TToolButton;TRxSpeedButton;TRzToolbarButton;TspSkinMenuButton;TbsSkinMenuButton';
  Rules[ckSpinButton] := 'TSpinButton;TUpDown;TRxSpinButton;TspSkinUpDown;TbsSkinUpDown';
  Rules[ckProgressBar] := 'TGauge;TProgressBar;TRzProgressBar;TspSkinGauge;TspFrameSkinGauge;TbsFrameSkinGauge';
  Rules[ckTabControl] := 'TTabControl;TspSkinTabControl;TbsSkinTabControl';
  Rules[ckMemo] := 'TMemo;TRzMemo;TRzMemo;TspSkinMemo;TbsSkinMemo';
  Rules[ckSpinEdit] := 'TSpinEdit;TRxSpinEdit;TspSkinSpinEdit;TbsSkinSpinEdit';
  Rules[ckSplitter] := 'TSplitter;TspSkinSplitter;TbsSkinSplitter';
  Rules[ckMaskEdit] := 'TMaskEdit';
  Rules[ckScrollBox] := 'TScrollBox;TspSkinScrollBox;TbsSkinScrollBox';
  Rules[ckLabel] := 'TLabel;TRzLabel;TRzLabel;TspSkinLabel;TspSkinStdLabel;TbsSkinStdLabel';
  Rules[ckStringGrid] := 'TStringGrid;TspSkinStringGrid;TbsSkinStringGrid';
  Rules[ckDrawGrid] := 'TDrawGrid;TspSkinDrawGrid;TbsSkinDrawGrid';
  Rules[ckToolbar] := 'TToolbar;TRxToolbar';
  Rules[ckControlBar] := 'TControlBar;TspSkinControlBar;TbsSkinControlBar';
  Rules[ckStatusBar] := 'TStatusBar';
  Rules[ckHeaderControl] := 'THeaderControl';
  Rules[ckTreeView] := 'TTreeView;TspTreeView;TbsTreeView';
  Rules[ckListView] := 'TListView;TspListView;TbsListView';
  Rules[ckPanel] := 'TPanel';
end;

procedure TSeCustomConverter.ConvertForm(Form: TCustomForm);
var
  i, r, c: integer;
  Comp, NewComp: TComponent;
  ClassList: string;
begin
  if Form = nil then Exit;
  FForm := Form;

  if FLog <> nil then FLog.Clear;

  InsertToLog(Format('Convertion "%s" form, please wait...', [Form.Name]));
  InsertToLog('');
  { Call OnProgress }
  Progress(Form.ComponentCount, 0);
  { Convert form }
  for i := 0 to Form.ComponentCount - 1 do
  begin
    Comp := Form.Components[i];
    { Search in Rules  }
    for r := 0 to Integer(ckLast) - 1 do
    begin
      ClassList := Rules[TSeClassKind(r)];

      NewComp := nil;

      for c := 0 to GetClassCount(ClassList) - 1 do
        if LowerCase(Comp.ClassName) = LowerCase(GetClassName(ClassList, c)) then
        begin
          { Crete New Component }
          try
            NewComp := CreateCopy(Comp, TSeClassKind(r));
          except
            InsertToLog('!!! Convertion error : '+Comp.Name);
          end;
          Break;
        end;

      if NewComp <> nil then Break;
    end;
    { Call OnProgress }
    Progress(Form.ComponentCount, i);
  end;
  Progress(Form.ComponentCount, Form.ComponentCount);

  InsertToLog('Convertion complete!');
end;

function TSeCustomConverter.CreateCopy(AComp: TComponent; Kind: TSeClassKind): TComponent;
var
  C, OldName: string;
  CompClass: TComponentClass;
  CompIndex: integer;
begin
  CompClass := GetClass(Kind);

  if CompClass <> nil then
  begin
    { Save and change name }
    OldName := AComp.Name;
    CompIndex := AComp.ComponentIndex;
    { Create new }
    Result := CompClass.Create(AComp.Owner);
    Result.Name := OldName+'_T';
    Result.ComponentIndex := CompIndex;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -