mirror of
http://gitlab.expertsoft.com.ua/git/expertcad
synced 2026-01-11 22:45:39 +02:00
195 lines
4.8 KiB
ObjectPascal
195 lines
4.8 KiB
ObjectPascal
unit PCMacroDlg;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
|
|
PasEdit,PowerCad,DlgBase,commdlg,PCTypesUtils,FileCtrl,PCScript,Delphin,HALInit;
|
|
|
|
type
|
|
|
|
TPCMacroDialog = class(TDlgBase)
|
|
private
|
|
Dial: TMacroForm;
|
|
FMacroDirectory: string;
|
|
procedure setdirectory(value: string);
|
|
|
|
Procedure GetCommand( comId: integer; values: string; valueI: integer );
|
|
protected
|
|
MacroEngine: THalComp;
|
|
Procedure SetControl(value: TPowerCad);override;
|
|
public
|
|
constructor create(Aowner: TComponent);override;
|
|
Destructor Destroy;
|
|
procedure show;override;
|
|
Function getVisible(var hnd : THandle): Boolean;
|
|
Procedure Locate(px,py:Integer);override;
|
|
Procedure GetMacroFileNames(List:TStringlist);
|
|
Procedure RunMacro(Macro:TStringlist);
|
|
Procedure RunMacroText(Macro:String);
|
|
Procedure RunMacroByFileName(MacroName:String);
|
|
//Procedure AddPSCLConstant(ConstName:String;Value:Variant);
|
|
//Procedure AddPSCLProcedure(ProcName:String;ProcAddr:TProcType;const Params:array of byte);
|
|
//Procedure AddPSCLFunction(ProcName:String;ProcAddr:TProcType;const Params:array of byte);
|
|
|
|
published
|
|
Property MacroDirectory:string read FMacroDirectory write setdirectory;
|
|
Property CadControl;
|
|
end;
|
|
|
|
implementation
|
|
{$R *.DCR}
|
|
|
|
constructor TPCMacroDialog.create(Aowner: TComponent);
|
|
begin
|
|
inherited create(Aowner);
|
|
dial := TMacroForm.create(Application);
|
|
oncommand := GetCommand;
|
|
MacroEngine := THalComp.Create(nil);
|
|
end;
|
|
|
|
Destructor TPCMacroDialog.Destroy;
|
|
begin
|
|
dial.free;
|
|
MacroEngine.Free;
|
|
inherited destroy;
|
|
end;
|
|
|
|
Procedure TPCMacroDialog.Show;
|
|
begin
|
|
If FMacroDirectory = '' then
|
|
begin
|
|
showmessage('Macro directory is not specified');
|
|
exit;
|
|
end;
|
|
dial.UpdateCombo;
|
|
dial.InitCombo;
|
|
dial.show;
|
|
end;
|
|
|
|
Procedure TPCMacroDialog.Locate(px,py:Integer);
|
|
begin
|
|
Dial.Left := px;
|
|
Dial.Top := py;
|
|
end;
|
|
|
|
Procedure TPCMacroDialog.GetMacroFileNames(List:TStringlist);
|
|
var path: string;
|
|
FileRec:TWIN32FindData;
|
|
a: integer;
|
|
FHandle: THandle;
|
|
MacroName: String;
|
|
begin
|
|
path := Self.MacroDirectory;
|
|
if not DirectoryExists(Path) then exit;
|
|
if not assigned(list) then exit;
|
|
FHandle := FindFirstFile(pchar(path+'*.cmf'),FileRec);
|
|
if FHandle <> INVALID_HANDLE_VALUE then
|
|
begin
|
|
List.Add(Self.MacroDirectory+FileRec.cFileName);
|
|
while FindNextFile(Fhandle,FileRec) do
|
|
begin
|
|
List.Add(Self.MacroDirectory+FileRec.cFileName);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
Function TPCMacroDialog.getVisible(var hnd : THandle): Boolean;
|
|
Begin
|
|
hnd := Dial.Handle;
|
|
result := Dial.visible;
|
|
end;
|
|
|
|
|
|
Procedure TPCMacroDialog.SetDirectory(value: string);
|
|
begin
|
|
if (value <> '') and (copy(value,length(value),1) <> '\') then value := value +'\';
|
|
FMacroDirectory := value;
|
|
if (value <> '') then RegWrite('MacroDir',Value);
|
|
if not (csDesigning in self.ComponentState) then
|
|
begin
|
|
dial.MDirectory := value;
|
|
try
|
|
dial.UpdateCombo;
|
|
dial.InitCombo;
|
|
except end;
|
|
end;
|
|
end;
|
|
|
|
|
|
Procedure TPCMacroDialog.SetControl(value:TPowerCad);
|
|
begin
|
|
inherited;
|
|
end;
|
|
|
|
Procedure TPCMacroDialog.GetCommand( comId: integer; values: string; valueI: integer );
|
|
begin
|
|
case ComId of
|
|
0 :
|
|
begin
|
|
RunMacroText(values);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
Procedure TPCMacroDialog.RunMacroByFileName(MacroName:String);
|
|
var macro: TStringList;
|
|
Begin
|
|
SetControlForScripting(CadControl);
|
|
macro := TStringlist.Create;
|
|
if fileexists(MacroName) then
|
|
begin
|
|
Macro.LoadFromFile(Macroname);
|
|
MacroEngine.script := Macro;
|
|
MacroEngine.Compile('Self',MacroEngine);
|
|
MacroEngine.Run;
|
|
end;
|
|
SetControlForScripting(nil);
|
|
End;
|
|
|
|
Procedure TPCMacroDialog.RunMacro(Macro:TStringlist);
|
|
Begin
|
|
SetControlForScripting(CadControl);;
|
|
MacroEngine.script := Macro;
|
|
MacroEngine.Compile('Self',MacroEngine);
|
|
MacroEngine.Run;
|
|
SetControlForScripting(nil);
|
|
End;
|
|
|
|
Procedure TPCMacroDialog.RunMacroText(Macro:String);
|
|
var list:Tstringlist;
|
|
begin
|
|
SetControlForScripting(CadControl);;
|
|
list := TStringList.Create;
|
|
list.text := Macro;
|
|
MacroEngine.script := list;
|
|
MacroEngine.Compile('Self',MacroEngine);
|
|
MacroEngine.Run;
|
|
List.Free;
|
|
SetControlForScripting(nil);
|
|
end;
|
|
|
|
(*
|
|
Procedure TPCMacroDialog.AddPSCLConstant(ConstName:String;Value:Variant);
|
|
begin
|
|
AddConst(ConstName,Value);
|
|
end;
|
|
|
|
Procedure TPCMacroDialog.AddPSCLProcedure(ProcName:String;ProcAddr:TProcType;const Params:array of byte);
|
|
begin
|
|
AddProc(ProcName,ProcAddr,params);
|
|
end;
|
|
|
|
Procedure TPCMacroDialog.AddPSCLFunction(ProcName:String;ProcAddr:TProcType;const Params:array of byte);
|
|
begin
|
|
AddFun(ProcName,ProcAddr,params);
|
|
end;
|
|
*)
|
|
|
|
|
|
begin
|
|
{$ifdef demo}
|
|
if not delphiloaded then application.terminate;
|
|
{$endif demo}
|
|
end.
|