Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi ScriptingEngine? (https://www.delphipraxis.net/5175-scriptingengine.html)

CalganX 26. Mai 2003 15:31


ScriptingEngine?
 
Hi,
ich suche derzeit nach einer Art ScriptingEngine...
Ich habe Scripte, die ungefähr so aussehen:
Code:
findwindow "wndname" $1      // findet das Fenster
findchild $1 "pagecontrol" $2   // findet das pagecontrol
findchild $2 "label" $3      // findet das Label
getnumber $3 "Nr. " " um" $4   // findet die Nummer x heraus, x steht in $4
findchild $2 "btn".$4 $5
sendmessage bm_click $5

END
($x sind Variablen; alles andere Strings bzw. Anweisungen; ist eines der komplizierteren... ;))

Nun frage ich mich, wie man sowas machen kann, dass man das ganze sozusagen interpretiert.
Muss ich das ganze etwa per copy, delete, ... machen??? Dann würde ich glatt durchdrehen! :freak:

Naja... das Problem sind da eher Knackpunkte wie die zusammensetzung eines Strings und einer Variable (z.B. "btn".$4).

Gibt es irgendwo so eine Art "Vorlage"?
Oder habt ihr eine Idee, wie man sowas machen kann?

Chris

Christian Seehase 26. Mai 2003 15:47

Moin Chris,

mit einer Idee kann ich dienen ;-)

Da es sich offensichtlich um ein sequentiell abzuarbeitendes Script handelt, könntest Du es so machen:

Voraussetzungen:
  • Das Script steht in einer Stringliste.
  • Du hast eine Liste der vordefinierten Schlüsselworte (z.B. FindWindow, FindChild...)
  • Du hast eine, am Anfang leere, Liste, in der die Variablen gespeichert werden

Jetzt kannst Du die Liste in einer Schleife durchgehen, und die einzelnen Zeilen in ihre Bestandteile zerlegen, wobei als erstes wohl immer ein Schlüsselwort steht (hoffentlich ;-) ), gefolgt von Parametern, in Abhängigkeit des Schlüsselwortes.

Als Beispiel mal Deine erste Zeile:
Schlüsselwort findwindow. Jetzt weisst Du, dass als nächstes der Name es Fensters erscheinen muss, und dann der Name einer Variablen, in der das Ergebnis gespeichert werden soll.
Dann kannst Du die Funktion ausführen, und das Ergebnis in der Variablenliste speichern.
Soll der Wert einer Variablen verwendet werden, muss dieser dann aus der Liste ausgelesen werden. Ggf. kann die Liste auch eine einfache Stringliste in der Form Variablenname=Wert sein.
Für eventuelle vordefinierte Konstanten (bm_click) wäre eine entsprechende weitere Liste ganz sinnvoll.

chris 26. Mai 2003 16:03

hi,

guck doch mal hier nach -> Innerfuse Pascal Script 3

CalganX 26. Mai 2003 16:11

Hi,
@Christian: also so, oder so ähnlich, hatte ich mir das auch schon gemacht, allerdings überlegte ich nach einer Möglichkeit das ohne es so kompliziert zu machen (wobei man sagen muss, dass deine Möglichkeit viel einfacher ist, als ich sie mir ausgedacht hab).
[EDIT]
Da fällt mir: das Problem ist, dass für jeden Befehl ich eine if-Abfrage machen muss, weil ja jeder Befehl eine andere Struktur hat und andere Befehle verwendet.
Also zum Beispiel sendmessage verlangt andere Parameter, als findwindow. Auch die Anzahl ist unterschiedlich.

Das Problem ist z.B. auch, dass Zusammensetzen (wie gesagt: ein String.eine Variable). Wie bitte soll ich das anstellen? :|
[/EDIT]

Deswegen...
...@chris: werde mir das mal ansehen. Allerdings scheint mir das schon wieder ein wenig zu aufwendig. Aber ich habe jetzt nur mal einen Blick drauf geworfen!

Chris

Christian Seehase 26. Mai 2003 16:19

Moin Chris,

je komplizierter/flexibler die zu verarbeitende Sprache ist, umso komplizierter wird halt auch die Verarbeitung.

Solange sich das ganze sequentiell abarbeiten lässt und dabei die einzelnen Funktionen und Paramter leicht zu trennen sind, ist die Umsetzung nicht ganz so schwierig.

Sobald Du mit bedingtem Programmablauf (womöglich verschachtelt) und Schleifen anfängst wird's merklich komplexer.

Christian Seehase 26. Mai 2003 16:23

Moin Chris,

Du kannst doch den Wert einer Variablen aus der vorgeschlagenen Tabelle auslesen (Eigenschaft z.B. sWert := slVariablen.Values['$4'];).

Diesen verbindest Du dann mittels + mit der Konstanten.

CalganX 26. Mai 2003 16:24

Mit Schleifen usw. will ich gar nichts anfangen...
Denn eigentlich bringen mir Schleifen nichts.

Ich habe gerade dieses Innerfuse-Teil heruntergeladen. Also wirklich begeistert bin ich nicht. Nicht einmal eine install.txt. :evil:

Naja... werde das ganze mal versuchen.

Chris

CalganX 26. Mai 2003 16:25

Stimmt... Warum mach ich die Sache eigentlich selber so scher??? :wall:

Chris

CalganX 26. Mai 2003 18:58

Hi,
ich hab gerade bei der ganzen Sache ein Problem (die Klasse an sich funktioniert wunderbar):
Ich bräuchte eine Funktion, die mir den n. Parameter liefert. Also z.B.:
Code:
findwindow "test window" $1
dann ist findwindow der 0., test window der 1. und $1 der 2.
Hat jemand dafür eine Funktion parat?

Ich habe im Moment nämlich keine Idee, wie ich das machen soll, dass Problem ist halt die Sache mit den Strings... :(

Chris

Chewie 26. Mai 2003 19:04

Na ja, im Prinzip werden die Parameter durch Leerzeichen getrennt. Nur wenn vor dem Leerzeichen eine ungerade Anzahl an Gänsefüßchen steht, dann ist das Leerzeichen kein Trennoperator. Also Zeichen für Zeichen durchgehen, zusätzlich boolsche Variable für String oder nicht und falls kein String, trennen am Leerzeichen.
Alternativ dazu die Anzahl der Gänsefüßchen vor dem Leerzeichen ermitteln: Falls ungerade -> Leerzeichen ignorieren, ansonsten trennen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:30 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz