Originariamente inviato da Alvi
Salve a tutti , sono nuovo del Forum ( spero di aver azzeccato la sezione ! ) , ed ho un problema che non sono riuscito a risolvere nonostante ore di estenuante ricerca.
Ho creato un programma che calcola l'integrale di una funzione, la quale viene riportata all'interno del codice a priori dell'esecuzione del form. Ora il mio problema è : come posso calcolare l'integrale di una funzione che decido a posteriori , senza dover per forza riscrivere una nuova funzione del codice?
Vorrei che fosse possibile che VB leggesse una data funzione che io inserisco in una textbox come funzione algebrica ( es : x^4+7 ), e non come una semplice linea di caratteri , per poi applicarvi le formule di calcolo integrale.
Puoi farlo abbastanza facilmente utilizzando il controllo ScriptControl.
Per prima cosa devi renderlo disponibile nella toolbox dei controlli:
clicca col tasto destro in un punto vuoto della toolbox dei controlli standard, menu "Components...", cerca e seleziona "Microsoft Script Control 1.0", poi <OK>: ora dovresti trovarlo nella toolbox.
Trascinalo dentro un form: avrai cosi' ScripControl1.
Puoi usare questo codice (nel form):
codice:
Sub DefinisciFunzione(ByVal funz As String)
Dim s As String
ScriptControl1.Reset
On Error Resume Next
s = "Option Explicit" & vbNewLine
s = s & "Function F(x)" & vbNewLine
s = s & "F=" & funz & vbNewLine
s = s & "End Function"
ScriptControl1.AddCode s
End Sub
Function CalcolaFunzione(ByVal x As Double) As Double
On Error Resume Next
CalcolaFunzione = ScriptControl1.Run("F", x)
End Function
ora se metti in un pulsante qualcosa tipo:
codice:
Dim x As Double
DefinisciFunzione "x^4+7"
x = 1.3
Debug.Print x, CalcolaFunzione(x)
come vedi puoi facilmente definire una funzione (ovviamente anche prendendola da una textbox dove l'ha scritta l'utente), ed ottenerne i valori in modo molto immediato con la funz. CalcolaFunzione().
Naturalmente va' scritta secondo la sintassi VB6, non puoi usare moltiplicazioni implicite tipo "2x+1" come si fa in algebra.
Lo ScriptControl e' molto potente, qui ci siamo limitati ad una classica funzione matematica, con un solo argomento ed un'unica linea di codice, ma il controllo permette di eseguire un QUALUNQUE codice interpretato all'interno del nostro programma eseguibile !!!
(se guardi il codice di DefinisciFunzione non fa altro che scrivere "al volo" il codice che scriveresti tu per definire la funzione all'interno del tuo programma, che pero' risulterebbe fissa ed immutabile)
Ciao !