Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   [dwscript] TdwsGlobal.OnReadVar, wo steht der Variablenname? (https://www.delphipraxis.net/168160-%5Bdwscript%5D-tdwsglobal-onreadvar-wo-steht-der-variablenname.html)

jaenicke 8. Mai 2012 13:45

[dwscript] TdwsGlobal.OnReadVar, wo steht der Variablenname?
 
Hallo zusammen,

ich beschäftige mich seit Kurzem mit Delphi Web Script und versuche aus Kompatibilitätsgründen bereits vorhandene Variablen inklusive deren Werten in die Variablenliste von dwscript zu bekommen.

Der Code dafür sieht so aus:
Delphi-Quellcode:
var
  NewVar: TdwsGlobal;
begin
  for CurrentVar in MeineBisherigenVariablen do
  begin
    NewVar := dwsMainUnit.Variables.Add;
    NewVar.Name := CurrentVar.Key;
    NewVar.DataType := 'String';
    NewVar.OnReadVar := ReadEventVar;
    NewVar.OnWriteVar := WriteEventVar;
Mein Problem ist nun aber, dass ich in dem Event nicht gefunden habe wo der Variablenname drin steht:
Delphi-Quellcode:
procedure TAbc.ReadEventVar(info: TProgramInfo; var value: Variant);
// ich vermute einmal in info, aber wo dort?
Hat jemand von euch eine Ahnung?

Vielen Dank,
Schönen Gruß,
Sebastian

Iwo Asnet 8. Mai 2012 14:02

AW: [dwscript] TdwsGlobal.OnReadVar, wo steht der Variablenname?
 
Hi
---Blödsinn---

RainerO 8. Mai 2012 16:29

AW: [dwscript] TdwsGlobal.OnReadVar, wo steht der Variablenname?
 
Hi,

ich hab in unserem Programm einen Zugriff auf die Variablen gefunden (von einem ehemaligen Programmierer, ich versteh den Code leider nicht vollständig),
der auf Info Variablen so zugreift
Delphi-Quellcode:
Info.Vars[ExternalObjects[i]]
, wobei ExternalObjects vom Typ TStrings ist. Leider wird dort nicht das ReadEvent genutzt, so das ich es nicht genau sagen kann, aber das Info ist auch vom Typ TProgramInfo - evtl. hat das im Event übergebene Info.Vars nur genau ein Element? Ich habe allerdings auch nicht herausgefunden, wie man an die Elemente herankommt, OHNE den String zu übergeben :cry:
In unserem Code wird durch ExternalObjects iteriert ...

Ich hoffe, das ist wenigstens ein wenig hilfreich

lg rainer

jaenicke 8. Mai 2012 16:39

AW: [dwscript] TdwsGlobal.OnReadVar, wo steht der Variablenname?
 
Danke, aber leider stehen die anderen Variablen offenbar gar nicht in diesem Info-Objekt, so dass dieser Zugriff gar nicht geht. Ich habe die Symboltabelle durchiteriert, dort sind aber keine Symbole enthalten. Auch die Parameter sind leer.

In dem Unittest zu den Events wird sinnigerweise nur ein Wert unabhängig vom Variablennamen zugewiesen...

Iwo Asnet 8. Mai 2012 16:43

AW: [dwscript] TdwsGlobal.OnReadVar, wo steht der Variablenname?
 
Vielleicht pro Variable ein eigener Event?

jaenicke 8. Mai 2012 19:04

AW: [dwscript] TdwsGlobal.OnReadVar, wo steht der Variablenname?
 
Ja, das wäre eine Option. Daran habe ich gar nicht gedacht, danke.

Allerdings bin ich darauf auch deshalb nicht gekommen, weil es irgendwie von hinten durch die Brust ins Auge geschossen ist. Aber ich werde dann wohl wirklich für jede Variable noch extra ein Transitobjekt anlegen...

Furtbichler 8. Mai 2012 19:29

AW: [dwscript] TdwsGlobal.OnReadVar, wo steht der Variablenname?
 
Ich würde ein Script generieren, in dem die Variablen deklariert sind und diese dann vor Ausführung setzen und danach abfragen.
Das funktioniert natürlich nicht, wenn sich die Variablen von außen verändern dürfen, solange das Skript läuft.

Delphi-Quellcode:
Info.Vars['MyVar'] := 123;
Info.Func['MainProgram'].Call;
Writeln('MyVar ', VarToStr(Info.Vars['MyVar']));
So in etwa (mein Code ist 7 Jahre alt)

PS: FastScript ist einfacher und mehr auf die Verbindung mit deiner Anwendung ausgelegt: Dafür sind die deklarativen Möglichkeiten begrenzt: Klassen und Objekte deklarierst Du -glaub ich- gar nicht, sondern übergibst sie als Delphi-Instanz. Ist aber praktisch.

FastScript ist -glaube ich- auch umsonst.

Thom 8. Mai 2012 20:46

AW: [dwscript] TdwsGlobal.OnReadVar, wo steht der Variablenname?
 
Zitat:

Zitat von Furtbichler (Beitrag 1165442)
FastScript ist -glaube ich- auch umsonst.

Ob's umsonst ist, kann ich nicht beurteilen - kostenlos ist es jedenfalls nicht.

Furtbichler 8. Mai 2012 20:52

AW: [dwscript] TdwsGlobal.OnReadVar, wo steht der Variablenname?
 
Hach, immer diese Wortklauberei mit Bart Schon irgendwie überflüssig, wie Aufrechtschreibfehlerhinweiserei.

Thom 8. Mai 2012 21:21

AW: [dwscript] TdwsGlobal.OnReadVar, wo steht der Variablenname?
 
Ich habe weder auf Rechtschreibfehler hingewiesen noch auf eine falsche Ausdrucksweise, sondern auf den Kostenfaktor.
Es ist immer wieder ein Erlebnis, mit Dir zu diskutieren.

Furtbichler 9. Mai 2012 07:16

AW: [dwscript] TdwsGlobal.OnReadVar, wo steht der Variablenname?
 
Zitat:

Zitat von Thom (Beitrag 1165464)
Ich habe weder auf Rechtschreibfehler hingewiesen noch auf eine falsche Ausdrucksweise, sondern auf den Kostenfaktor. Es ist immer wieder ein Erlebnis, mit Dir zu diskutieren.

Na dann lies dir einfach nochmal sowohl deinen als auch meinen Post durch: Du korrigierst umsonst => kostenlos und ich rede nicht davon, das Du auf Rechtschreibfehler hinweist. Ich rede davon, das dein Hinweis *wie* Rechschreibrechthaberei ist.

Merkst Du den Unterschied?

Aber es freut mich, das Du Konversationen mit mir als Erlebnis ansiehst. Jetzt müsstest Du nur noch genauer lesen lernen und dann würde es mir genau so viel Spaß machen- :P

jaenicke 9. Mai 2012 08:22

AW: [dwscript] TdwsGlobal.OnReadVar, wo steht der Variablenname?
 
Zitat:

Zitat von Furtbichler (Beitrag 1165442)
Ich würde ein Script generieren, in dem die Variablen deklariert sind und diese dann vor Ausführung setzen und danach abfragen.
Das funktioniert natürlich nicht, wenn sich die Variablen von außen verändern dürfen, solange das Skript läuft.

Das ist das eine Problem dabei, das andere ist, dass es sich dabei teilweise um Funktionsvariablen handelt, sprich beim Anruf der Variablen wird der Wert überhaupt erst ermittelt. Das wäre daher auch für die Geschwindigkeit abträglich.

Zitat:

Zitat von Furtbichler (Beitrag 1165442)
FastScript ist -glaube ich- auch umsonst.

Das ist es zwar nicht, aber das wäre nicht so wichtig, da der Preis günstig genug ist. Bei dws interessiert uns aber auch das w darin, nämlich z.B. die in einem Video gezeigte Liveinteraktion mit einem Chrome-Control usw.

Der Weg über ein zusätzliches Objekt und dws ist daher wohl der beste Weg.

Furtbichler 9. Mai 2012 08:27

AW: [dwscript] TdwsGlobal.OnReadVar, wo steht der Variablenname?
 
Zitat:

Zitat von jaenicke (Beitrag 1165508)
Der Weg über ein zusätzliches Objekt und dws ist daher wohl der beste Weg.

Und sooo abartig ist die Lösung ja auch nicht. Ich stell mir gerade vor, wie ein singuläres Read-Event mit der Zeit anwächst und zu einem Monstrum verkommt.

Wenn man sich die Lösung schönredet, wird sie das auch. *Daumendrück* ;-)

jaenicke 9. Mai 2012 09:03

AW: [dwscript] TdwsGlobal.OnReadVar, wo steht der Variablenname?
 
Da in unserem Fall die Variablen ja bereits vorhanden sind, wäre das Event eine reine Durchleitung an das eigentliche (verzweigte) Handling. ;-)

Aber wenn da ein paar hundert Objekte für die Variablen erstellt werden, ist das auch kein Problem, schließlich passiert es nur beim Systemstart vor dem Kompilieren der Skripte.

Thom 9. Mai 2012 09:29

AW: [dwscript] TdwsGlobal.OnReadVar, wo steht der Variablenname?
 
Zitat:

Zitat von Furtbichler (Beitrag 1165498)
Zitat:

Zitat von Thom (Beitrag 1165464)
Ich habe weder auf Rechtschreibfehler hingewiesen noch auf eine falsche Ausdrucksweise, sondern auf den Kostenfaktor. Es ist immer wieder ein Erlebnis, mit Dir zu diskutieren.

Na dann lies dir einfach nochmal sowohl deinen als auch meinen Post durch: Du korrigierst umsonst => kostenlos und ich rede nicht davon, das Du auf Rechtschreibfehler hinweist. Ich rede davon, das dein Hinweis *wie* Rechschreibrechthaberei ist.

Merkst Du den Unterschied?

Aber es freut mich, das Du Konversationen mit mir als Erlebnis ansiehst. Jetzt müsstest Du nur noch genauer lesen lernen und dann würde es mir genau so viel Spaß machen- :P

Bleib so arrogant und besserwisserisch wie Du bist und es wird mir auch in Zukunft ein Vergnügen bleiben, Deine Beiträge zu lesen. Ob der Spaß dabei auf Beidseitigkeit beruht, ist mir völlig egal. :lol:

Iwo Asnet 9. Mai 2012 11:35

AW: [dwscript] TdwsGlobal.OnReadVar, wo steht der Variablenname?
 
Zitat:

Zitat von Thom (Beitrag 1165540)
Bleib so arrogant und besserwisserisch wie Du bist und es wird mir auch in Zukunft ein Vergnügen bleiben, Deine Beiträge zu lesen. Ob der Spaß dabei auf Beidseitigkeit beruht, ist mir völlig egal. :lol:

Herrlich. Ein Moderator beleidigt. Was für ein Vorbild, was für ein Niveau.:thumb:

Daniel 9. Mai 2012 11:55

AW: [dwscript] TdwsGlobal.OnReadVar, wo steht der Variablenname?
 
Zitat:

Zitat von Iwo Asnet (Beitrag 1165583)
Zitat:

Zitat von Thom (Beitrag 1165540)
Bleib so arrogant und besserwisserisch wie Du bist und es wird mir auch in Zukunft ein Vergnügen bleiben, Deine Beiträge zu lesen. Ob der Spaß dabei auf Beidseitigkeit beruht, ist mir völlig egal. :lol:

Herrlich. Ein Moderator beleidigt. Was für ein Vorbild, was für ein Niveau.:thumb:

Nein. Weder Thom noch Furtbichler sind Mitglieder des Teams und haben auch nicht nur ansatzweise erweiterte Moderations-Rechte. Wie kommst Du darauf?

jaenicke 9. Mai 2012 11:59

AW: [dwscript] TdwsGlobal.OnReadVar, wo steht der Variablenname?
 
Das wollte ich auch gerade schreiben, ich vermute mal eine Verwechslung mit toms, weil die Namen soo ähnlich sind? :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:28 Uhr.

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