📄 se_designer.pas
字号:
{ 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 + -