Matze: timeout in vbscript-klasse

Hallo,

ich steh gerade ein wenig auf dem Schlauch und hoffe mir kann jemand helfen.
Ich habe hier eine VBScript-HTA bei der ich einige Arbeitsabläufe in Klassen kapseln möchte.
Das funktioniert auch eigentlich recht gut, nur habe ich ein Problem mit "setTimeout".

Und das Problem sieht nachvollziehbar so aus:

<Stammdatei, die die Klasse lädt>

dim ecls  
    set ecls = new clstest  
  
    ecls.test()  
  
    sub test()  
         msgbox "Hier bin ich falsch"  
    end sub

<Klassendatei>

class clstest  
  
   sub test()  
     msgbox "Hier bin ich richtig"  
     setTimeout "test()",1000  
   end sub  
  
end class

Eigentlich sollte alle Sekunde die sub "test" in der Klasse gestartet werden. Bei initialen Aufruf passiert das auch, aber beim 2. kommt die sub von oben. Es liegt also wohl am Scope - aber wie kann ich das ändern?

Vielen Dank
Matze

  1. Hallo,

    Ich habe hier eine VBScript-HTA bei der ich einige Arbeitsabläufe in Klassen kapseln möchte.
    Das funktioniert auch eigentlich recht gut, nur habe ich ein Problem mit "setTimeout".

    Nein, Du hast ein Problem damit, eine Funktions- bzw. Sub-Referenz in VBSCRIPT zu erzeugen. Dafür ist GetRef("subname") zuständig. Das funktioniert aber nicht mit Klassenmethoden. Also GetRef("me.subname") ist nicht vorgesehen.

    class clstest

    sub test()
         msgbox "Hier bin ich richtig"
         setTimeout "test()",1000

    //      hier würde in JavaScript stehen:
            setTimeOut(this.test, 1000);
    //      in VBSCRIPT würde aber
            setTimeOut me.test, 1000
    //      die Methode me.test aufrufen, statt eine Referenz zu erzeugen.
    //      Und GetRef("me.test") geht, wie gesagt, nicht.

    end sub

    end class

    
    >   
    > Eigentlich sollte alle Sekunde die sub "test" in der Klasse gestartet werden. Bei initialen Aufruf passiert das auch, aber beim 2. kommt die sub von oben. Es liegt also wohl am Scope - aber wie kann ich das ändern?  
      
    Was gehen würde wäre:  
      
    ~~~vbscript
      
    class clstest  
      
       public default sub test  
         msgbox "Hier bin ich richtig"  
         if msgbox("Wiederholen?", 4) = 6 then  
           setTimeout me, 1000  
         end if  
       end sub  
      
    end class  
      
      
    sub s_onload  
       dim ecls  
       set ecls = new clstest  
       ecls.test  
    end sub  
      
      
    sub test  
       msgbox "Hier bin ich falsch"  
    end sub  
      
    window.onload = GetRef("s_onload")  
    
    

    viele Grüße

    Axel