Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

VB5 - Webbrowser mit Speicherung von Logindaten
Gehe zu Seite Zurück  1, 2, 3  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 20.02.2007, 20:10    Titel: Antworten mit Zitat

ThePuppetMaster hat Folgendes geschrieben:

Da bin ich mit meiner MSVBVM60.dll noch recht zufrieden.


Ja! Ganz meine Meinung lächeln
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 20.02.2007, 20:54    Titel: Antworten mit Zitat

@TPM:
Das nicht, aber das ganze wurde in Units aufgeteilt. Zum Beispiel System, Windows, Classes, StdCtrls, ExtCtrls, etc. Man kann sie alle einbinden, wenn man möchte - was der Compiler für nicht-benötigt erachtet, fliegt raus. Der dcc32 optimiert generell ziemlich heftig und stellt teilweise Schleifen komplett um.
Aber um nochmal auf das "überflüssige" Zeug zurückzukommen. Ist so ähnlich, wie wenn du 'ne Funktion geschrieben hast, die kein Parent-Objekt hat und generell nicht aufgerufen wird - wird einfach wegcompiliert. lächeln
Also da ist schon nur das nötigste drinnen. lächeln
Btw, auch dort kann man so wie in FB, also direkt mittels API-Aufrufe ein Fenster erstellen etc. arbeiten. Allgemein wird das "nonVCL" genannt und ist ein ziemlich beliebtes Thema. EXEn werden dadurch nur einige KB groß. Ist natürlich aber auch dementsprechend aufwändiger. grinsen
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 20.02.2007, 21:13    Titel: Antworten mit Zitat

Klingt sexy ... vor lachen auf dem Boden rollen
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 20.02.2007, 23:10    Titel: Antworten mit Zitat

Vielen Dank für das Beispiel! Kann noch nicht ganz nachvollziehen was es tut; werden die Zeilen in einzelne Variablen eingelesen?
Werde es bald ausprobieren.

Wegen .NET; es braucht wirklich auch auf einem praktisch neuen Computer seine Zeit bis nur ein kleines Programm gestartet wird (und auf einem 500 MHz dauerte die Installation schon einmal 1 Stunde) und dazu - obwohl oft davon die Rede ist - kommt mir das Ganze irgendwie unprofessionell, wie selbstgemacht halt, vor wenn man so auffällig eine riesige Laufzeitumgebung installieren muss. VB .NET habe ich schon länger, das ist ja kostenlos, doch aus diesen Gründen bin ich auf VB5 umgestiegen. Der Browser ist ein Stückchen weiter und tut seinen Dienst von allen installierten nachwievor am schnellsten, was (ist für einen Laden, Lieferantenseite, teils während dem Verkauf etwas nachschauen) für diesen Zweck auch der Sinn meines Browsers ist.

Mit dem ListBox bin ich gar nicht schlauer geworden; ausser die Methode zum hinzufügen lächeln Wie wende ich das Beispiel an?
_________________
...längre blomstre gamle nord...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 22.02.2007, 22:20    Titel: Antworten mit Zitat

Hilfe! Habe nun eine Favoriten-Funktion eingebaut, die soweit funktioniert (einfach keine Namen zu den Adressen hinzufügen kann). Nun habe ich ein Problem; ich habe zum Erstellen einen Assistenten genommen, welcher ein Form mit Menu usw. produzierte. Als ich die Favoriten-Funktion provisorisch baute ausserhalb des Projektes (in einem neuen, kleinen mti einem WebBrowser) funktionierte es. Doch was ich auch für die Startseitenspeicherung bemerkte - die LocationURL lässt sich beim richtigen Projekt auf kein anderes Form übertragen! Somit kann die Adresse auch nicht direkt übernommen werden.
Falls jemand eine Idee hätte, ich hätte auch den Quellcode zum senden.
Hier kurze Ausschnitte der (nicht ausschliesslich) betroffenen Funktion:

Code:


Private Sub Command1_Click()
List1.AddItem (frmMain.URL)
End Sub

Private Sub Command2_Click()
On Error GoTo err
lstindx = List1.ListIndex
List1.RemoveItem (listindx)
Exit Sub
err: Beep
End Sub

Private Sub Form_Load()
On Error GoTo err
Dim FF As Integer
FF = FreeFile
Dim Datei As String
Dim Zeichen As String
Datei = App.Path & "\lesezch.brw"

Open Datei For Input As FF
    Do While Not EOF(FF)
    Line Input #FF, Zeichen
    List1.AddItem Zeichen
    Loop
Close #FF

Exit Sub

err: MsgBox "Fehler, Lesezeichendatei konnte nicht geöffnet werden. Eventuell ist sie noch nicht vorhanden oder nicht verfügbar", vbExclamation, "Achtung"


End Sub

Private Sub Form_Unload(Cancel As Integer)
On Error GoTo err
Dim FF As Integer
FF = FreeFile
Dim Datei As String
Dim Zeichen As String
Datei = App.Path & "\lesezch.brw"
Dim I As Integer

Open Datei For Output As #FF
    For I = 0 To List1.ListCount - 1
        Print #FF, List1.List(I)
    Next
Close #FF

Exit Sub

err: MsgBox "Fehler! Fehlernummer: " & err.Number, vbCritical, "Achtung"

End Sub

Private Sub List1_DblClick()
lstindx = List1.ListIndex
frmMain.WebBrowser1.Navigate (List1.List(lstindx))
End Sub

das war das Favoriten-Form

und nun im Browser (wo die Variable URL definiert wird - ein Versuch anstelle der direkten Übernahme von WebBrowser1.LocationURL):

Code:


Private Declare Function OSWinHelp% Lib "user32" Alias "WinHelpA" (ByVal hwnd&, ByVal HelpFile$, ByVal wCommand%, dwData As Any)
Public Startadresse As String
Public URL As String
.....
....
Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
Text1.Text = WebBrowser1.LocationURL
URL = WebBrowser1.LocationURL
Loaded = True
sbStatusBar.Panels(1).Text = "fertig geladen"
sbStatusBar.Panels(4).Text = WebBrowser1.LocationName



im Panel wird der LocationName übrigens korrekt angezeigt, wie auch die URL im text1 !
_________________
...längre blomstre gamle nord...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 22.02.2007, 23:46    Titel: Antworten mit Zitat

Hä??? ... ich kann dir nicht ganz folgen.

Wo hast du denn jetzt genau das Problem?

Zur Listbox:

Diese Funktionen kannst du Direkt verwenden, die vorherigen beispiele waren eigentlich nur mal so daher geschrieben, ums mal etwas zu verdeutlichen.
Code:


'erfordert eine Listbox mit der bezeichnung List1 auf der Form1
'erfordert einen Command mit der Bezeichnung Command1 auf der Form1
'erfordert einen Command mit der Bezeichnung Command2 auf der Form1
'erfordert einen Command mit der Bezeichnung Command3 auf der Form1
'erfordert einen Command mit der Bezeichnung Command4 auf der Form1
'Gespeichert wird das ganze auf "C:\Listx.txt"

'Diesen Code in Form1 Kopieren


Private Sub Form_Load()
'Buttons beschriften
Command1.Caption = "Liste befüllen"
Command2.Caption = "Liste speichern"
Command3.Caption = "Liste leeren"
Command4.Caption = "Liste laden"
End Sub




Private Sub Command1_Click()
'liste befüllen
Dim X As Long
For X = 1 To 20
    List1.AddItem Int((Rnd * 1000) + 1)
Next
End Sub

Private Sub Command2_Click()
'liste speichern
If Dir("C:\Listx.txt") <> "" Then                                       'Ist die datei bereits vorhanden?
    If (GetAttr("C:\Listx.txt") And vbDirectory) <> vbDirectory Then    'Ist die Datei eine Datei?
        Kill "C:\Listx.txt"                                             'Datei löschen
    End If
End If
Open "C:\Listx.txt" For Binary As #1                                    'Datei öffnen
Dim D As String
D = X_GetListString(List1)                                              'Listen-daten zusammen-sammeln
Put #1, 1, D                                                            'Daten in Datei schreiben
Close #1                                                                'Datei schlissen
MsgBox "Gespeichert"                                                    'Speicherung melden
End Sub

Private Sub Command3_Click()
'liste leeren
List1.Clear
End Sub

Private Sub Command4_Click()
'Liste laden
If Dir("C:\Listx.txt") <> "" Then                                       'Ist die datei vorhanden?
    If (GetAttr("C:\Listx.txt") And vbDirectory) <> vbDirectory Then    'Ist die datei eine Datei?
        Open "C:\Listx.txt" For Binary As #1                            'Datei öffnen
        Dim D As String                                                 'Speicher für Daten reservieren
        D = String(LOF(1), Chr(0))                                      'Variable mit ASCII 0 vor befüllen
        Get #1, 1, D                                                    'Daten von der Datei einlesen
        X_SetListString List1, D                                        'Liste mit Daten befüllen
        Close #1                                                        'Datei schliessen
    Else: MsgBox "Dateiname ist ein verzeichniss!"                      'Dateiame (listx.txt) ist ein verzeichniss
    End If
Else: MsgBox "Datei nicht vorhanden!"                                   'Die Datei ist nicht vorhanden
End If
End Sub












Public Function X_GetListString(V_List As ListBox) As String    'Funktionsaufruf. Es wird eine Liste übergeben
Dim X As Long                                                   'Schleifen-Variable
Dim D As String                                                 'Speicher für Die List-Daten
With V_List
    For X = 0 To .ListCount - 1                                 'Alle Listeneinträge durchgehen
        D = D & V_List.List(X) & Chr(1)                         'Speicher dem x'ten Eintrag hinzufügen, und am ende ein ASCII 1 hinzufügen
    Next                                                        'Nächster Eintrag
End With
X_GetListString = D
End Function

Public Sub X_SetListString(V_List As ListBox, ByVal V_Data As String)   'Funktionsaufruf. Es werden die Daten und die Liste übergeben
Dim X As Long
Dim Pos As Long
With V_List
    For X = 1 To Len(V_Data)                                            'Schleife durchlaufen , bis die länge der Daten erreicht wurde
        Pos = InStr(1, V_Data, Chr(1))                                  'Nach Position der Trenner (ASCII 1) suchen
        If Pos > 0 Then                                                 'Wurde gefunden?, dann weiter
            .AddItem Left(V_Data, Pos - 1)                                  'Abschnitt bis zum ASCII 1 zur liste hinzufügen
            V_Data = Mid(V_Data, Pos + 1)                               'Rest nach dem ascii 1 abschneiden, und in Daten variable schreiben
        Else: Exit For                                                  'Nicht gefunden?, dann schleife verlassen
        End If
    Next
End With
End Sub


Habe einmal alles beschriftet, sollte jetzt klar sein happy

Wenn du zu der URL-Liste etwas hinzufügen willst, solltest du auch eine Prüfroutine nutzen, um zu verhindern, das doppelte und dreifache Einträge darinentstehen.

Code:

Public Sub X_AddListString(V_List As ListBox, ByVal V_Data As String)   'Funktionsaufruf. Es werden die Daten und die Liste übergeben
Dim X As Long
Dim S As String
S = LCase(V_Data)                                                       'Hinzuzufügende Daten in kleinschrift umwandeln
With V_List
    For X = 0 To .ListCount - 1                                         'Schleife durchlaufen , bis alle aktuellen Einträge ind er Liste durchlaufen wurden
        If LCase(.List(X)) = S Then Exit Function                       'Prüfen, ob ein (kleingeschriebener) Listeneintrag bereits vorhanden ist, Wenn ja, dann Funktion verlassen
    Next
    .AddItem V_Data                                                     'Wenn die Funktion nicht verlassen wurde, ist der eintrag noch nicht vorhanden, also hinzufügen
End With
End Sub


... und .. was hast du mit dem Webbrowser udn deren URL vor? .. das ist eigentlich nciht so gedacht, was du da macht.

[Nachtrag]
Du solltest bei Dateiopperationen mehr auf Fehler eingehen. Das gilt eigentlich für all deine code-mechanismen. Jeder deiner Schritte sollte auffangbar sein, udn nicht einfach abgebrochen werden.

Ein "on error goto" ist ne feine sache, jedoch kann sie probleme verursachen.

Grundsätzlich sollte deine IDE so eingestellt sein, das sie JEDEN Fehler meldet, auch umgangene!

Dann solltest du immer am anfang deienr funktion ein "On error resume next" einbaun (die meisten sehen das anders, aber:) Das hilft unvorhersehbare fehler auf zu fangen. Wenn ein "on goto" drin is, irgend wo in einer funktion, kann das schon probleme veruhrsachen, wenn z.B. keine Variable mehr angelegt werden kann, weil kein speicher vorhanden ist. Das kann durch "resume next" umgangen werden, udn sollte deswegen am anfang jeder funktion, noch vor der variablendeclaration in einer funktion / sub eingefügt werden.

Dann, das wichtigere, sollte jeder Code-Schtitt überwacht und geschützt werden. z.B. wie ich das mit den Datein gemacht habe.

Das ist zwar Code-technisch mehr arbeit, allerdings ist es sicher, und Stabiler, als ohne. Man könnte das noch erweitern, z.B. mit der auswertung des Fehlers, durch das err-objekt. z.B. bringt ein err.number = 70 die meldung, das die Datei bereits geöffnet ist, und keien weitere sitzung mit dieser datei möglich ist.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 23.02.2007, 01:37    Titel: Antworten mit Zitat

Super Beispiele, vielen Dank!
Erweiterte Fehlerkorrekturen habe ich an anderen (weiter fertigen) Stellen schon eingebaut; z.B. auch die Startseitendatei, wenn man eine neue Startseite speichert wird die Datei nach dem Schreiben nochmals geöffnet, eingelesen und verglichen mit dem Eingegebenen grinsen

Zum eigentlichen Problem aber; ich habe ja mehrere Formulare; der Browser und das Form mit den Favoriten, welches sich nach Anklicken wieder schliessen sollte. Nur, wenn ich auf dem Form2 einen Button habe "Adresse übernehmen" um sie in die List zu nehmen und den Button definiere mit list1.AddItem..... Form1.WebBrowser1.LocationURL dann wird IMMER die Startseite übergeben! Das ist mein Problem (sorry, habe ich vielleicht etwas schlecht erklärt).
Lustigerweise, im Adressfeld (textbos) erfolgt eine Anzeige der Adresse nach dem Laden (DownloadComplete), genau auch mit Location URL. Und das stimmt immer. Jedoch wenn ich auch auf dem Form2 dann schreibe "form1.text1.text" und das in die Liste aufnehmen möchte kommt wieder IMMER die Startseite; auch wenn ich gleichzeitig auf dem Form sehe dass eine andere Adresse 8in dem Fall die Gewünschte) steht.

Bin ratlos, ist seltsam! Der Versuch mit public URL und dann auf dem Form1 die Adresse in die Variable URL zu speichern um diese dann auf dem Form2 zu übernehmen funktioniert ebenfalls nicht.
Die Form-Bezeichnungen stehen hier nur als Beispiel für die Erklärung, stimmen nicht direkt mit meinem Programm überein.
_________________
...längre blomstre gamle nord...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 23.02.2007, 01:59    Titel: Antworten mit Zitat

hmmm .. also .. ich hab das mal probiert, und ... ich kann keinen fehler feststellen.

ist "URL" bei dir auf "frmmain" eine variable?
Code:

Private Sub Command1_Click()
List1.AddItem (frmMain.URL)
End Sub


Wenn ja, dann kann das Probleme veruhrsachen, da du bereits in der übergabe von DocumentComplete diese bezeichnugn als Übergabebezeichnugn der gebrowsten URL hast.

Als Tip empfehle ich dir einmal, alle Variablen z.B. mit "X_" am anfang zu schreiben, um eventuelle übergabeprobleme zu vermeiden.

du schribst nämlich hier
Zitat:
Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant)
Text1.Text = WebBrowser1.LocationURL
URL = WebBrowser1.LocationURL
Loaded = True
sbStatusBar.Panels(1).Text = "fertig geladen"
sbStatusBar.Panels(4).Text = WebBrowser1.LocationName

warscheinlich den wert von LocatioURL in die bereits zurückgelieferte URL hinein. Da diese Variable eine Locale Funktions-Variable ist (ByVal übergeben), zerstört sich diese nach dem ablauf wieder.

Wenn du eine in der Form mit z.B. Private / Public /Dim declariert hast, dann bekommst du überschneidungen.

Wenn du unbedingt den namen so haben willst, dann musst du stat "URL = ..." einfach "me.URL = ..." oder "Form1.URL = ..." schreiben. Damit Localisierst du die zu beschreibende Variable auf deiner Form, und nicht die in der Funktion.

andernfalls,: Post doch mal den kompletten Quellcode oder schick ihn mir mal via PM, denn so recht sehe ich noch nicht, wo das Problem liegen soll.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 23.02.2007, 13:58    Titel: Antworten mit Zitat

Ja stimmt URL wird dort ja als Variant definiert. Sollte eine Variable von Form1 sein. Das habe ich gar nicht angeschaut dort lächeln Wobei, als ich dies ausliess und direkt mit webbrowser1.LoctionURL die Adresse bekommen wollte ging es auch nicht.

Als ich es in einem neuen Projekt ausprobierte funktionierte es eben auch ohne Probleme; nur im richtigen Projekt nicht.
Kann auf irgend eine Weise die Übernahme von Variablen in ein anderes Form blockiert werden? Es scheint mir fast so; kann mir aber nicht erklären wieso die Startseite übergeben wird!

Ja am besten schicke ich mal den Quellcode, soweit ich ihn habe. Hoffentlich geht er, ist immer etwas schwierig mit vb Quellcodes wieder öffnen.

Als pn kann man ja keine Dateien senden; wird etwas schwierig wegen den Forms usw.; soll cih es mailen?
_________________
...längre blomstre gamle nord...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 23.02.2007, 16:23    Titel: Antworten mit Zitat

Quellcode reicht eigentlich .. ansonsten kannst es hoch laden, URL bekommst via PN
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 23.02.2007, 16:33    Titel: Antworten mit Zitat

Hochladen wäre sicher besser, da ich den Anwendungs-Assistenten verwendet habe welcher noch COde zugefügt hat (muss ich dann am Schluss noch aufräumen, hat Ereignisse von Menüeinträgen die ich gelöscht habe usw. noch)
_________________
...längre blomstre gamle nord...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 23.02.2007, 17:30    Titel: Antworten mit Zitat

Also .. ich stell dir jetzt mal alles zusammen, was ich für beanstandend halte:

Zitat:

1.
Zitat:
Open ("StartSite.brw") For Output As #f
da solltest du immer das verzeichniss mit angeben, da es sonst zu problemen kommen kann, wenn mit CHDir oder ähnlichen Komandos "nicht" gearbeitet wird.
auch hier:
Zitat:
If FileExists("StartSite.brw") Then

wenn du das in dem verzeichniss speichern möchtest, in dem das Programm (die exe) liegt, dann kannst du simpel
Zitat:
Open (App.Path & "\StartSite.brw") For Output As #f
schreiben


2.
is zwar nicht so wild, aber du brauchst keien "#" schreiben, bei Dateizugriff.
Zitat:
Open ("StartSite.brw") For Output As #f

Die Raute brauchst du nur dann, wenn du einen direkten Wert ein gibst.
Zitat:
Open ("StartSite.brw") For Output As #1

Bei Variablen ist das nicht notwendig.


3.
Zitat:
Dim Pausenlänge, Start, Ende, Gesamtdauer

Du devinierst diese variablen als "Variant"! ... dassolltest du nicht machen, da dieser Typ mehr speicher nutzt. Eien Direkt Devinierte Variable wäre sinnvoller.
Zitat:
Dim Pausenlänge as Long
Dim Start as long
Dim Ende as long
Dim Gesamtdauer as long

oder je nachdem, wie gross der Wewrt wird, auf Byte, Singel oder Integer


4.
Für dein Splash-Screen gäbe es auch eine andere ALternative Variante, um dieZeit zu "berechnen", bzw. abzuwarten.
Du könntest einfach einen Timer auf die Form legen, diesen mit
Zitat:
Private sub Form_Load()
Timer1.Intervall = 60000 '(1minute = 60sek = 60000ms)
Timer1.enabled = True
End Sub

Private Sub Timer1_Timer()
me.visible = false 'dadurch wird das fenster nicht entladen!, sondern nur unsichtbar gemacht. Allerdings läuft der code nach "frmsplash.show (1)" trotzdem weiter. Es ist auch möglich "unload me" zu schreiben, stat ...visible = false
end sub

udn im aufruf
Zitat:

Frmsplash.show (1) 'dadurch wartet das Programm mit dem weiteren ablauf, bis das fenster wieder geschlossen wurde, was nach dem Timer event eintritt.

Spart auch Code zwinkern


5.
Schalte einmal bei dir in der IDE unter MENÜ -> Extras -> Optionen -> EDITOR -> "Variablendeklaration erforderlich (2te option von oben) ein.
Du wirst jetzt allerdings nachträglich noch in all deine Formulare udn Module ein "Option Explicit" GANZ OBEN, am anfang des codes einfügen müssen. Wenn du neue Projekte beginnst, dann wird das nach der einstellung dieser option jetzt automatisch hin geschrieben. Allerdigns nicht bei den bisher schon erstellten Formularen, Modulen, Klassen usw., die schon code enthalten.

Dadurch vehinderst du, das du Variblen nutzt, die nicht explizit deviniert wurde. Das kann utner umständen zu problemen kommen. (auserdem is das Profesioneller happy )


6.
Zitat:
List1.AddItem (frmMain.URL)

keien () notwendig! .. Wenn du sie dennoch verwenden möchtest, dann bitte mit einem "Call" davor.
Zitat:
Call List1.AddItem(frmMain.URL)

gillt auch für
"List1.RemoveItem (listindx)"
"WebBrowser1.Navigate (Startadresse)"
"frmBrowser.brwWebBrowser.Navigate (Text1.Text)"
usw.
() sind nur dann nötig, wenn du Werte zurück bekommst.
z.B. bei der MsgBox
Zitat:

'Ohne Rückgabe
Msgbox "Test"

'Mit Rückgabe
Dim XBack as Long
XBack = msgbox("Test",vbYesNo)



7.
in frmMain hast du
Zitat:

Public URL As String

Declariert. Das ist das Problem, mit dem setzen der URL, was wir vorher schon besprochen haben. Du hast einen ariablennamen doppelt. Dem Compiler is das teilweise egal, aber du hast dann dieses zugriffsproblem, auf diese Variable, die du dann nur mit "frmMain.URL = "blablub" umgeben kannst.
Du könntest den Naben abändern, z.B. mit einem "X_" davor ... "X_URL" dann kannst du aus dem selben Formular aus wieder darauf zugreifen.


8.
Zitat:
Public Function FileExists(filename As String) As Boolean 'Prüfen ob File existiert


On Error Resume Next
FileExists = Dir$(filename) <> ""
FileExists = FileExists And err = 0
On Error GoTo 0
End Function

Das "and err = 0" ist sinnlos, da du am anfang ein "On error resume next" drinhast. Dadurch wird das err-objekt IMMER ein "0" als wert zurück geben.

alternativ kannst du
Zitat:

Public Function FileExists(filename As String) As Boolean
On Error Resume Next
FileExists = false
If Dir(filename) <> "" then
If (getattrib(filename) and vbdirectory) = vbdirectory then
FileExists = true
endif
endif
End Function

Public Function CheckErr() As Boolean
'HIER KEIN "On error resume next"!!!!!!!
CheckErr = false
If err.Number <> 0 then
CheckErr = True
err.clear 'err-Objekt wieder leeren, damit keine probleme bei der nächsten abfrag auftauchen. (Diese nummer bleibt solange drin, bis sie mit ".clear" gelöscht wurde!!!!!!
endif
End Function



9.
Zitat:
Load Form2 '<<<<<<<< Brauchst du nicht, weil du in Form2. bereits ein "Unload me" eingebaut hast. Durch das "unload me" wird die form automatisch entladen. Wenn du danach "Form2.Show" auf rufst, wir automatisch wieder "private sub Form_Load()" aufgerufen.
Form2.Show '<< reicht aus



10.
Zitat:
URL = WebBrowser1.LocationURL

Hier dann halt stat "URL = " das mit "X_URL = "


11.
Zitat:
If Progress > 0 And ProgressMax > 0 Then
ProgressBar1.Value = Progress * 100 / ProgressMax
End If

hier sollte auch geprüft werden, ob "Progress" nicht das maximum überschreitet
Zitat:
If Progress > 0 And ProgressMax >= Progress Then
ProgressBar1.Value = Progress * 100 / ProgressMax
End If


Das hab ich jetzt erstmal so auf die schnelle gesehen ..
Arbeite mal diese Probleme ab, dann die ganzen Fehlermeldungen, die du nach dem "Option exlplicit" bekommst, und, wenns dann noch probleme gibt, dann schreib nochmal. Dann kannst das ganze nochmal einschicken, wenn du willst. Dann können wir das ganze nochmal schritt für schritt durchgehen. Hab nämlich momentan kaum zeit, die Ganzen Variablendeklarationen nach zu hohlen.

PS: Nächstes mal reicht es, wenn du nur doe Projektdaten überträgst. Die Setup brauch ich nciht grinsen

Hf & GoodLook

MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 23.02.2007, 19:57    Titel: Antworten mit Zitat

Vielen Dank! Ich muss vielleicht erwähnen dass ich das Visual Basic erst seit ca. 2 Wochen besitze lächeln Ansonsten kenne ich das FreeBasic natürlich und habe sicher von da viel übernommen (was möglicherweise anders ist) und mit .NET habe ich schon gearbeitet, daher mache ich immer diese Klammern lächeln
Werde diverse solche Sachen optimieren.
Zum Zugriffsproblem mit der URL: leider liegt es nicht zwingend an der Variable "URL" da auch nicht die Adresse zurückgegeben wird wenn ich z.B. auf dem Form mit den Favoriten die Adresse aus der Adressleiste "frmMain.text1.text" einfügen will; im Text1 steht ja wie man sieht die richtige Adresse doch auf dem Favoriten-Form steht dann in frmMain.text1.text plötzlich die Startadresse (sofern definiert). Das ist mir so unerklärlich.
_________________
...längre blomstre gamle nord...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 23.02.2007, 20:24    Titel: Antworten mit Zitat

Tja .. das hat n ganz einfachen grund grinsen

Zitat:
Set fMainForm = New frmMain


Hoffe, du weist, was ich meine zwinkern


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 23.02.2007, 23:09    Titel: Antworten mit Zitat

Ach das! Wie kann ich das ändern? Mit diesen Objekten habe ich noch nicht sehr viel Erfahrung (und ich mag keine Objekte grinsen )
Das hat wieder der Assistent gemacht.
..wenn ich das einfach weglasse; gibt das ein Problem wenn man eine 2. Instanz des Browsers öffnet (manuell)?

Habe sowieso gerade noch etwas versucht (erfolglos), mit dem NewWindow2 - Event, damit bei einer Seite welche eine 2. öffnet nicht der Internet Explorer sondern wiederum mein Browser (oder allenfalls das Browserfenster bei 2. Seite.... ohne Silent) erscheint.
_________________
...längre blomstre gamle nord...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 24.02.2007, 09:23    Titel: Antworten mit Zitat

Naja... ich sags mal so:

Du hast eine Form erstellt. Sie heisst "frmMain".

auf diese Formkannst du so zugreifen
"frmMain.<BlaBlub>"

Jetzt erstellst du eine Kopie, bzw eine neue Instanz von dieser
"Set BrowserForm = new frmmain"


heist so viel wie:
Set = Setzte Objekt
BrowserForm = Zu Setzendes neues Objekt (ziel)
= = Was in das Ziel rein soll
new = Neues Objekt (bzw. kopie eines bestehendes Objekt
frmMain = Die Quelle

Syntax:
Set <FormObjektFürNeueInstanz> = new <ObjektFürDieNeueInstanz>


Du erstellst also eine Kopie in deine Variable von deinem Original.

Wenn du nun in deiner Fav-Form aus auf "frmMain" zugreifst, dann greifst du auf das Original zu, und nicht auf die Kopie. Und in dem Original steht die startadresse drin, weil du mit dieser ja nicht arbeitest, sondern diese nu als "Vorlage" für die neuen Instanzen nutzt.

Wenn du von den Favs aus auf die Kopien zugreifen willst, breiben dir eigentlich nur ein paar Möglichkeiten

1. Du schickst die Aktuelle Adresse zuerst an die Fav-Form, befor du sie öffnest.

z.B. mit
Zitat:
FavForm.Tag = BrowserForm.X_URL
FavForm.Show(1)

(.TAG ist sowas wie eine Allgemein nutzbare Variable, die jedes Objekt hat. (Typ = Variant = Kann man so gut wie alles drin speichern)

2. Du erstellst eien Variable, in der du das Aktive Form-Objekt als Poitner hniein schreibst, und greifst dann auf die Globale Variable zu, um daten zu erfassen

(Im Modul)
Zitat:
Public X_ActualBrowserForm as Objekt


(In der BrowserForm)
Zitat:
Private Sub Form_Activate()
Set ActualBrowserForm = me
end sub

Private Sub Form_DeActivate()
Set ActualBrowserForm = nothing
end sub


Damit hast du den verweis erstellt.

Aus der FavForm heraus kanst du dann mit
Zitat:
private Sub Command1_Click()
'URL übernehmen
Text1.Text = ActualBrowserForm.X_URL



das sidn mal einfache Varianten, gibt auch noch Komplexere, mit Array-Objekten, aber das dürfte eigentlich so schon reichen.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 24.02.2007, 11:42    Titel: Antworten mit Zitat

Jetzt bin ich schon näher! Habe genau gedacht dass so etwas passiert...
Vielen Dank! Brauche ich die Deklarierung der Forms als Objekt überhaupt? Ist ja für eine MDI-Anwendung eigentlich...
---

Hab es jetzt mit dem Tag gelöst; und vom Favoriten-Form habe ich (da ja fMainForm = New frmMain) anstatt frmMain.WebBrowser1.Navigate (das holte wieder die Startseite, jetzt logisch) geschrieben fMainForm.WebBrowser1.Navigate ListIndex usw...
Findest Du das OK? Habe kompiliert und getestet, ob es auch geht wenn die ANwendung mehrfach gestartet wird; kein Problem (ausser ev. der Dateizugriff aber der ist ja sehr kurz).
_________________
...längre blomstre gamle nord...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 24.02.2007, 12:19    Titel: Antworten mit Zitat

Jip .. kannste so lassen

für MDI is das egal, ... bei mehreren Gleichen Form's bzw. Instanzierst, wär es schon sinnvoll, wenn du das über Objektverweise machst (Set blablub = new bluna) ... anders kannst du auch keine Form kopieren.

Dateizugriff: Wen du wärend der Dateioperation kein "Doevents" verwendest, überschneidensich keine Funktionsaufrufe.

Ein Doevents übergibt den Prozess wieder Windows, wodurch das Programm sozusagen unterbrochen wird, um z.B. Mauseingaben auf Buttons, oder andere Aufgaben zu verarbeiten.

Mit Doevents sollte daher vorsichtig gearbeitet werden, da es den Aktuellen Prozess bzw. die Aktuelle Funktion an dieser stelle unterbricht, um andere aufgaben ab zu arbeiten, z.B. ein Timer-Event, oder eine Usereingabe.

Du kannst die auswirklungen ja mal untersuchen, z.B. so:
Zitat:

private sub Form_Load()
Form1.Show
doevents '(Damit die Form angezeigt wird)

'Hier jetzt die eigentlichen DoEvents-Effekte
Dim Tot as double
Tot = timer + 10 '(10sek. wartezeit)
do
if tot < timer then exit do 'Wärend den 10 Sek. kannst du die form nicht verschieben, sie wird nicht neu gezechnet, wenn du etwas darüber ziehst, (bei selbst gemahlten Überflächen), keine Buttons können gedrückt werden, usw.
loop
End sub


um dennoch Funktionsfehigkeit zu gewährleisten
Zitat:

private sub Form_Load()
Form1.Show
doevents '(Damit die Form angezeigt wird)

'Hier jetzt die eigentlichen DoEvents-Effekte
Dim Tot as double
Tot = timer + 10 '(10sek. wartezeit)
do
if tot < timer then exit do
doevents 'Die arbeit bei jedem Zykluns an Windows abgeben. (Dadurch werden auf deinem Projekt eingaben möglich. Du kanst die Form verschieben, Timer werden aufgerufen, Buttons können gedrückt werden, usw.
loop
End sub


Wie gesagt, sollte vorsichtig damit umgegangen werden, da 2 aktive Programme, die gleichzeitg auf eien Datei zugreifen, dadurch sich gegenseitig behindern. Bei KEINER verwendung des DoEvents, wird das ausgeschlossen, da zuerst diese Funktion abgearbeitet werden muss.

Es gibt zwar noch ausnahmen, aber die sind nur via API zu erreichen.


[Nachtrag]
Ein Doevents, verlangsamt auch die DoLoop schleife!, das kannst du einfach damit kontrolieren, wenn du einen Zähler einbaust

Zitat:

Dim X as long
do
...
x = x +1
Form1.caption = cstr(x)
...
loop



MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 24.02.2007, 13:15    Titel: Antworten mit Zitat

Ach so! Ja dann lasse ich es lieber.
Ich dachte, wenn bei beiden Browser-Instanzen gleichzeitig z.B. das Favoriten-Form geladen wird und das eine die Datei geöffnet hat und das andere das gleichzeitig tun möchte, dass es dann ein Problem geben kann. Aber der Zugriff ist ja so kurz, wird in der Praxis wohl kaum stattfinden (und dann kommt vermutlich die Meldung "Datei nicht vorhanden etc.). OK in dem Fall würde eine leere List angezeigt und beim schliessen des Forms die leere abgespeichert, die Datei überschrieben, das wäre nicht so geschickt.
_________________
...längre blomstre gamle nord...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 24.02.2007, 15:46    Titel: Antworten mit Zitat

Du kannst dir ja eine kleine Funktion baun, die das ein udn aus liest, dann besteht auch keien Gefahr, wenn du kein "DoEvents" in dieser Funktion verwendest! ... Dann is das kein Problem, auch wenn das 2x offen is.


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite Zurück  1, 2, 3  Weiter
Seite 2 von 3

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz