Permalänk
Medlem

VBScript & Delphi

Vill lägga in stöd för VBScript i ett delphi-program, och har hittat en komponent som verkar göra jobbet.

Jag kan tex skriva följande kod i en memo-ruta, och exekvera koden:

a = 2
b = 3
c = a + b
MsgBox c
s = app.getexename
App.ShowMessage(s)

Det fungerar bra, men är helt värdelöst för mig om jag inte kan "modifiera" mitt program via VBScriptet, exempelvis ändra texten i en edit-ruta.

Eftersom (app.getexename) fungerar så är VBScriptet tydligen kapabelt till att hämta info från mitt program, men jag har inte lyckats få den att läsa t.ex. form1:s caption.

Jag är helt ny då det gäller ActiveScript, så jag kanske har överskattat möjligheten med det.

Edit: Sim, Cure, får man fråga hur ni använder ActiveScript i Samurize? Villken/villka komponent(er) ni använder?

Visa signatur
Permalänk
Avstängd

Vi bara startar en thread som arbetar med scriptet (för att programmet inte skall stanna upp under exekveringstiden) för att sen skriva ut whatever funktionen returnerar.

Nåt mer använder vi inte ActiveScript shittet till

Permalänk
Medlem

Säg att jag har ett script som består av bara följande:

function String
String = "Test"
end function

Hur gör jag för att kunna kalla på ovanstående funktion, exempelvis så här:
Edit1.Text:=String();

?

Visa signatur
Permalänk
Avstängd

Result := FScriptControl.Run(FunctionName, Argument);

Om du inte vill arbeta direkt mot com-objektet/activex-komponenten kan du använda dig av http://www.btinternet.com/~a.wingrove/scripting/

(awscript)

Jag använder den själv om det är nåt litet snabbt projekt jag skall slänga ihop..

Permalänk
Medlem

Har försökt med FScriptControl på följande vis:

ScriptControl.Language:='VBScript'; ScriptControl.Eval(memo1.Text);

I memo-rutan har jag följande:

Function Hello()
Hello = "Hello World!"
End Function

Men jag får Syntax Error, även fast ovanstående script är rätt skrivet. Vad kan detta bero på?

Edit:
Och vad ska parametern för Run-functionen vara?

Visa signatur
Permalänk
Avstängd

Ge mig lite tid så skall jag sätta ihop nåt exempel

Permalänk
Medlem

Tack, det skulle vara juste

Men jag tror nog inte att ActiveScript är den rätta lösningen för mig ändå, men det är alltid bra att lära sig.

Funderar nämlingen på någon typ av plug-in stöd till ShirusuPad, och ActiveScript var det första jag kom att tänka på.

Har letat en hel del nu, efter lösningar till plugin-stöd till delphi-program, med det verkar vara rätt tunnt med information.

Visa signatur
Permalänk
Avstängd

Hårdplugga hur dll:er skall se ut, och lite minneshantering för dessa så är du halvvägs där.

Problemet är att delphi suger när man skall debugga dll:er osv.

Iaf: Importera ActiveX Script Control:en, så du får en ny component i din palette.

Testa sen:

procedure TForm1.Button1Click(Sender: TObject); var l_args_arr: Variant; l_args: PSafeArray; l_high, i: integer; params : array of variant; code : string; begin ScriptControl1.Language := 'VBScript'; code := 'Function Hello ( nrA, nrB )' + #10#13 + ' Hello = "Test:" & nrA & nrB' + #10#13 + 'End Function'; ScriptControl1.AddCode(Code); SetLength(Params, 2); params[0] := 'hello'; params[1] := 'world'; // Add params l_high := High(Params); l_args_arr := VarArrayCreate([0, l_high], varVariant); for i := 0 to l_high do l_args_arr[i] := Params[i]; // convert to PSafeArray l_args := PSafeArray(TVarData(l_args_arr).VArray); // call the function ShowMessage(ScriptControl1.Run('Hello', l_args)); end;

Detta var ett litet test jag satte ihop för länge sen när jag lekte med ActiveX. Koden är ett förenklat hopkok av vad jag har kunnat hitta på googlegroups och i eböcker.. Funkar iaf