kolmck/MCKAppExpert200x.pas

297 lines
9.5 KiB
ObjectPascal
Raw Normal View History

unit MCKAppExpert200x;
interface
uses
Windows, Classes, SysUtils, Controls, Dialogs, ToolsApi;
type
TMCKWizard = class(TNotifierObject, IOTAWizard, IOTARepositoryWizard, IOTAProjectWizard)
procedure Execute;
function GetIDString: String;
function GetName: String;
function GetState: TWizardState;
function GetAuthor: String;
function GetComment: String;
function GetPage: String;
function GetGlyph: Cardinal;
end;
procedure Register;
const
prj_template =
'{ KOL MCK } // Do not remove this line!'#13#10 +
'{$DEFINE KOL_MCK}'#13#10 +
''#13#10 +
'program %prj_name%;'#13#10 +
''#13#10 +
'uses'#13#10 +
'KOL,'#13#10 +
' %unt_name% in ''%unt_name%.pas'' {Form1};'#13#10 +
''#13#10 +
'{$R *.res}'#13#10 +
'//{$R %prj_name%.res}'#13#10 +
'//{$R WinXP.res}'#13#10 +
''#13#10 +
'begin // PROGRAM START HERE -- Please do not remove this comment'#13#10 +
#13#10 +
'{$IF Defined(KOL_MCK)} {$I %prj_name%_0.inc} {$ELSE}'#13#10 +
#13#10 +
' Application.Initialize;'#13#10 +
' Application.CreateForm(TForm1, Form1);'#13#10 +
' Application.Run;'#13#10 +
#13#10 +
'{$IFEND}'#13#10 +
#13#10 +
'end.'#13#10;
unt_template =
'{ KOL MCK } // Do not remove this line!' + #13#10 +
'{$DEFINE KOL_MCK}' + #13#10 +
'unit %unt_name%;' + #13#10 +
#13#10 +
'interface' + #13#10 +
#13#10 +
'{$IFDEF KOL_MCK}' + #13#10 +
'uses Windows, Messages, KOL {$IF Defined(KOL_MCK)}{$ELSE}, mirror, Classes, Controls, mckCtrls,' + #13#10 +
' mckObjs, Graphics {$IFEND (place your units here->)};' + #13#10 +
'{$ELSE}' + #13#10 +
'{$I uses.inc}' + #13#10 +
' Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,' + #13#10 +
' Dialogs, mirror;' + #13#10 +
'{$ENDIF}' + #13#10 +
#13#10 +
'type' + #13#10 +
' {$IF Defined(KOL_MCK)}' + #13#10 +
' {$I MCKfakeClasses.inc}' + #13#10 +
' {$IFDEF KOLCLASSES} {$I TForm1class.inc} {$ELSE OBJECTS} PForm1 = ^TForm1; {$ENDIF CLASSES/OBJECTS}' + #13#10 +
' {$IFDEF KOLCLASSES}{$I TForm1.inc}{$ELSE} TForm1 = object(TObj) {$ENDIF}' + #13#10 +
' Form: PControl;' + #13#10 +
' {$ELSE not_KOL_MCK}' + #13#10 +
' TForm1 = class(TForm)' + #13#10 +
' {$IFEND KOL_MCK}' + #13#10 +
' KOLProj: TKOLProject;' + #13#10 +
' KOLForm: TKOLForm;' + #13#10 +
' private' + #13#10 +
' { Private declarations }' + #13#10 +
' public' + #13#10 +
' { Public declarations }' + #13#10 +
' end;' + #13#10 +
#13#10 +
'var' + #13#10 +
' Form1 {$IF Defined(KOL_MCK)} : PForm1 {$ELSE} : TForm1 {$IFEND} ;' + #13#10 +
#13#10 +
'{$IFDEF KOL_MCK}procedure NewForm1( var Result: PForm1; AParent: PControl );{$ENDIF}' + #13#10 +
'implementation' + #13#10 +
'{$IF Defined(KOL_MCK)}{$I %unt_name%_1.inc}{$ELSE}{$R *.DFM}{$IFEND}' + #13#10 +
#13#10 +
'end.';
dfm_template =
'object Form1: TForm1' + #13#10 +
'Left = 192' + #13#10 +
'Top = 105' + #13#10 +
'Width = 870' + #13#10 +
'Height = 640' + #13#10 +
'HorzScrollBar.Visible = False' + #13#10 +
'VertScrollBar.Visible = False' + #13#10 +
'Caption = ''Form1''' + #13#10 +
'Color = clBtnFace' + #13#10 +
'Font.Charset = DEFAULT_CHARSET' + #13#10 +
'Font.Color = clWindowText' + #13#10 +
'Font.Height = -11' + #13#10 +
'Font.Name = ''MS Sans Serif''' + #13#10 +
'Font.Style = []' + #13#10 +
'OldCreateOrder = False' + #13#10 +
'Scaled = False' + #13#10 +
'PixelsPerInch = 96' + #13#10 +
'TextHeight = 13' + #13#10 +
'object KOLProj: TKOLProject' + #13#10 +
'Locked = False' + #13#10 +
'Localizy = False' + #13#10 +
'projectName = ''prj''' + #13#10 +
'projectDest = ''prj''' + #13#10 +
'sourcePath = ''%path%''' + #13#10 +
'outdcuPath = ''%path%''' + #13#10 +
'dprResource = True' + #13#10 +
'protectFiles = True' + #13#10 +
'showReport = False' + #13#10 +
'isKOLProject = True' + #13#10 +
'autoBuild = True' + #13#10 +
'autoBuildDelay = 500' + #13#10 +
'BUILD = False' + #13#10 +
'consoleOut = False' + #13#10 +
'SupportAnsiMnemonics = 0' + #13#10 +
'PaintType = ptWYSIWIG' + #13#10 +
'ShowHint = False' + #13#10 +
'ReportDetailed = False' + #13#10 +
'GeneratePCode = False' + #13#10 +
'NewIF = True' + #13#10 +
'Left = 16' + #13#10 +
'Top = 16' + #13#10 +
'end' + #13#10 +
'object KOLForm: TKOLForm' + #13#10 +
'Tag = 0' + #13#10 +
'ForceIcon16x16 = False' + #13#10 +
'Caption = ''Form1''' + #13#10 +
'Visible = True' + #13#10 +
'AllBtnReturnClick = False' + #13#10 +
'Tabulate = False' + #13#10 +
'TabulateEx = False' + #13#10 +
'UnitSourcePath = ''%path%''' + #13#10 +
'Locked = False' + #13#10 +
'formUnit = ''%unt_name%''' + #13#10 +
'formMain = True' + #13#10 +
'Enabled = True' + #13#10 +
'defaultSize = False' + #13#10 +
'defaultPosition = False' + #13#10 +
'MinWidth = 0' + #13#10 +
'MinHeight = 0' + #13#10 +
'MaxWidth = 0' + #13#10 +
'MaxHeight = 0' + #13#10 +
'HasBorder = True' + #13#10 +
'HasCaption = True' + #13#10 +
'StayOnTop = False' + #13#10 +
'CanResize = True' + #13#10 +
'CenterOnScreen = False' + #13#10 +
'Ctl3D = True' + #13#10 +
'WindowState = wsNormal' + #13#10 +
'minimizeIcon = True' + #13#10 +
'maximizeIcon = True' + #13#10 +
'closeIcon = True' + #13#10 +
'helpContextIcon = False' + #13#10 +
'borderStyle = fbsSingle' + #13#10 +
'HelpContext = 0' + #13#10 +
'Color = clBtnFace' + #13#10 +
'Font.Color = clWindowText' + #13#10 +
'Font.FontStyle = []' + #13#10 +
'Font.FontHeight = -11' + #13#10 +
'Font.FontWidth = 0' + #13#10 +
'Font.FontWeight = 0' + #13#10 +
'Font.FontName = ''Tahoma''' + #13#10 +
'Font.FontOrientation = 0' + #13#10 +
'Font.FontCharset = 1' + #13#10 +
'Font.FontPitch = fpDefault' + #13#10 +
'Font.FontQuality = fqDefault' + #13#10 +
'Brush.Color = clBtnFace' + #13#10 +
'Brush.BrushStyle = bsSolid' + #13#10 +
'DoubleBuffered = False' + #13#10 +
'PreventResizeFlicks = False' + #13#10 +
'Transparent = False' + #13#10 +
'AlphaBlend = 255' + #13#10 +
'Border = 2' + #13#10 +
'MarginLeft = 0' + #13#10 +
'MarginRight = 0' + #13#10 +
'MarginTop = 0' + #13#10 +
'MarginBottom = 0' + #13#10 +
'MinimizeNormalAnimated = False' + #13#10 +
'RestoreNormalMaximized = False' + #13#10 +
'zOrderChildren = False' + #13#10 +
'statusSizeGrip = True' + #13#10 +
'Localizy = False' + #13#10 +
'ShowHint = False' + #13#10 +
'KeyPreview = False' + #13#10 +
'EraseBackground = False' + #13#10 +
'supportMnemonics = False' + #13#10 +
'Left = 64' + #13#10 +
'Top = 16' + #13#10 +
'end' + #13#10 +
'end';
implementation
procedure Register;
begin
RegisterPackageWizard(TMCKWizard.Create as IOTAWizard);
end;
procedure TMCKWizard.Execute;
var
unt_name: String;
prj: String;
unt: String;
dlg: TSaveDialog;
lst: TStringList;
begin
dlg := TSaveDialog.Create(nil);
dlg.Options := [ofOverwritePrompt, ofExtensionDifferent, ofPathMustExist];
dlg.Title := 'Save Project';
dlg.Filter := 'DPR files|*.dpr';
dlg.DefaultExt := 'dpr';
if dlg.Execute then begin
prj := dlg.FileName;
if (Pos('.', prj) = Length(prj) - 3) then
SetLength(prj, Length(prj) - 4);
dlg.Title := 'Save Unit';
dlg.Filter := 'PAS files|*.pas';
dlg.DefaultExt := 'pas';
dlg.FileName := 'unit1';
if dlg.Execute then begin
unt := dlg.FileName;
if (Pos('.', unt) = Length(unt) - 3) then
SetLength(unt, Length(unt) - 4);
// unt_name
unt_name := ExtractFileName(unt);
// gen project
lst := TStringList.Create;
lst.Text := StringReplace(prj_template, '%prj_name%', ExtractFileName(prj), [rfReplaceAll]);
lst.Text := StringReplace(lst.Text, '%unt_name%', unt_name, [rfReplaceAll]);
lst.SaveToFile(ChangeFileExt(prj, '.dpr'));
// gen unit
lst.Text := StringReplace(unt_template, '%unt_name%', unt_name, [rfReplaceAll]);
lst.SaveToFile(ChangeFileExt(unt, '.pas'));
// gen dfm
lst.Text := StringReplace(dfm_template, '%path%', ExtractFilePath(unt), [rfReplaceAll]);
lst.Text := StringReplace(lst.Text, '%unt_name%', unt_name, [rfReplaceAll]);
lst.SaveToFile(ChangeFileExt(unt, '.dfm'));
// close all
//if (MessageBox(0, 'Close all projects before opening new?', 'MCKAppExpert200x', MB_ICONQUESTION or MB_YESNO) = IDYES) then
// (BorlandIDEServices as IOTAModuleServices).CloseAll;
// open new
// (BorlandIDEServices as IOTAActionServices).OpenProject(ChangeFileExt(prj, '.dpr'), True);
(BorlandIDEServices as IOTAActionServices).OpenFile(ChangeFileExt(prj, '.dpr'));
// free
lst.Free;
end;
end;
dlg.Free;
end;
function TMCKWizard.GetAuthor: string;
begin
Result := 'D[u]fa';
end;
function TMCKWizard.GetComment: string;
begin
Result := 'v0.02';
end;
function TMCKWizard.GetGlyph: Cardinal;
begin
Result := 0;//LoadIcon(hInstance, 'MCKWizard');
end;
function TMCKWizard.GetIDString: string;
begin
Result := 'KOLMCK.WIZARD.200x';
end;
function TMCKWizard.GetName: string;
begin
Result := 'New KOL-MCK Project';
end;
function TMCKWizard.GetPage: String;
begin
Result := '';
end;
function TMCKWizard.GetState: TWizardState;
begin
Result := [];
end;
end.