WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   VB: Winsock + ScriptControl (http://www.wcm.at/forum/showthread.php?t=92650)

Hussl 30.03.2003 10:50

VB: Winsock + ScriptControl
 
Hallo, ich hab ein Problem mit den beiden o.g.

Dem ScriptControl hab ich eine Klasse meines Programms übergeben, wo die wichtigsten Funktionen drinstehen.
Eine dieser Funktionen heißt FireEvent, mit der ich die Verbindung zu einer bestimmten Webseite auslöse. Jetzt soll der Code des ScriptControls erst weiter ausgeführt werden, wenn die Verbindung wieder geschlossen wurde. Und da komm ich nicht weiter...

hier der code:

FireEvent >> Call sEvent

Code:

Public Sub sEvent()

    Dim strURL As String
    Dim strHost As String
    Dim strPage As String
   
    If txtURL = "" Then
        msgbox "Bitte geben Sie eine korrekte URL ein."
        Exit Sub
    End If
   
    strURL = txtURL
    If Left(strURL, 7) = "http://" Then strURL = Mid(strURL, 8)
   
    On Error GoTo ErrHandle
   
    p_strHost = Left(strURL, InStr(1, strURL, "/") - 1)
    p_strPage = Mid(strURL, InStr(1, strURL, "/"))
   
    p_lngDownloadedBytes = 0
    p_strHttpResponse = ""
    p_HeaderReceived = False
   
    With Winsock
        .Tag = "open"
        .Close
        .LocalPort = 0
        .Connect p_strHost, 80
    End With

ErrHandle:
    If Err.Number = 5 Then
        strURL = strURL & "/"
        Resume 0
    End If

End Sub

Wenn die Übertragung fertig ist, setze ich Winsock.Tag = "close". Also muss ich das abfragen. Jedoch hab ich keinen blassen Schimmer, wo ich das machen muss, und wie:

Code:

Do
  Sleep x  'oder doch besser...
  DoEvents '...??
Loop Until Winsock.Tag <> "open"

und bei welcher Prozedur muss ich das aufrufen??

für infos wäre ich sehr dankbar!

Seidl 31.03.2003 00:10

Wenn du den Wert in einer Schleife abfragen willst solltest du UNBEDINGT 'do events' verwenden. Nur dieses Statement gibt die Kontrolle ab damit auch andere Teile der Anwendung zum Zug kommen.
Allerdings würde es sich bei einer Klasse doch eigentlich anbieten einen eigenen Event zu programmieren, der ausgelöst wird wenn die Übertragung fertig ist.
In der VB-Hilfe findet man die Anleitung um Events zu Klassen hinzuzufügen. (Declaring and Raising Events)
Allerdings sollte man diese Möglichkeit nicht zu exzessiv nutzen, da dabei ziemlich viele Ressourcen draufgehen.

Hussl 31.03.2003 07:36

Hab mal wieder alles ungestrickt. Statt Winsock hab ich das INET-Control verwendet. Das erfüllt alle meine Anforderungungen und ist noch einfacher in der Programmierung. Dort gibt es auch eine Property "StillExecuting", an der sieht man ob INET gerade beschäftigt ist...

mfg
Hussl

renew 31.03.2003 08:58

Zitat:

Original geschrieben von Seidl

Allerdings würde es sich bei einer Klasse doch eigentlich anbieten einen eigenen Event zu programmieren, der ausgelöst wird wenn die Übertragung fertig ist.
In der VB-Hilfe findet man die Anleitung um Events zu Klassen hinzuzufügen. (Declaring and Raising Events)
Allerdings sollte man diese Möglichkeit nicht zu exzessiv nutzen, da dabei ziemlich viele Ressourcen draufgehen.

ähhm, passt zwar nicht zum Thema, aber wie würde man sich einen eigenen Event programmieren... :rolleyes:

Nicht, das ich es gerade bräuchte, aber es wäre schon interessant zu wissen, wie des geht...

Seidl 31.03.2003 09:36

@Hussl: In dem Fall, wie gesagt, unbedingt DoEvents verwenden.

@LLR: Gute Beschreibung im MSDN vorhanden.

renew 31.03.2003 10:01

Zitat:

Original geschrieben von Seidl

@LLR: Gute Beschreibung im MSDN vorhanden.

ich danke....


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:54 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag