Hi,
I have tried to write a small application with two LMDEditView, two LMDEditDocument and two LMDScriptControls on a form and a button for execute script from LMDDScriptControl1
Here is the code which will be executed pressing button:
procedure TForm1.ToolButton1Click(Sender: TObject);
begin
// Prepare first script for execution
LMDScriptControl1.Active := False;
LMDScriptControl1.ClearObjects;
LMDScriptControl1.Source.Text := LMDEditDocument1.Lines.Text;
LMDScriptControl1.Prepare;
// Prepare second script for execution
LMDScriptControl2.Active := False;
LMDScriptControl2.ClearObjects;
LMDScriptControl2.Source.Text := LMDEditDocument2.Lines.Text;
LMDScriptControl2.Prepare;
// try to make script B visible to script A
LMDScriptControl1.AddObject('FuncB', LMDScriptControl2.Script, True);
// try to make script A visible to script B
LMDScriptControl2.AddObject('FuncA', LMDScriptControl1.Script, True);
LMDScriptControl1.Open;
LMDScriptControl2.Open;
// Execute 'FuncA' which contains call to 'FuncB'
LMDScriptControl1.RunProc('FuncA');
end;
Here is the script of LMDEditView1:
procedure FuncA;
begin
Showmessage('Hello from FuncA');
FuncB;
end;
Here is the scrupt of LMDEditView2 which should be called from FuncA:
procedure FuncB;
begin
Showmessage('Hello from B');
end;
However, there is no exception thrown when execute and it seems FuncB will be called from FuncA but there is no dialog box shown, only if I copy FuncB to LMDEditView1.
Currently it's nmot clear for me, how to make a second script visible to a running LMDScriptControl dynamically.
Please advice, thank you!
Comments
begin
Showmessage('Hello from FuncA');
FuncB.FuncB;
end;
var
state: TLMDScriptControlState;
begin
// Prepare first script for execution
LMDScriptControl1.Active := False;
LMDScriptControl1.ClearObjects;
LMDScriptControl1.Source.Text := LMDEditDocument1.Lines.Text;
LMDScriptControl1.Prepare;
// Prepare second script for execution
LMDScriptControl2.Active := False;
LMDScriptControl2.ClearObjects;
LMDScriptControl2.Source.Text := LMDEditDocument2.Lines.Text;
LMDScriptControl2.Prepare;
state := LMDScriptControl1.State;
// try to make script B visible to script A
LMDScriptControl1.AddObject('UnitB', LMDScriptControl2.CodeObject, True); // UnitB is used as namespace
// try to make script A visible to script B
LMDScriptControl2.AddObject('UnitA', LMDScriptControl1.CodeObject, True); // UnitA is used as namespace
LMDScriptControl1.Open;
LMDScriptControl2.Open;
// Execute 'FuncA' which contains call to 'FuncB'
LMDScriptControl1.RunProc('FuncA');
end;
begin
Showmessage('Hello from FuncA');
UnitB.FuncB; // Call FuncB which is implemented in UnitB
begin
Showmessage('Hello from FuncB');