expertcad/POWERCAD30/UNITS/PCMacroDlg.pas
2025-05-12 10:07:51 +03:00

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.