| 
				
					|  | Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
 |  
 
	
		| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |  
		| Autor | Nachricht |  
		| Jojo alter Rang
 
  
 Anmeldungsdatum: 12.02.2005
 Beiträge: 9736
 Wohnort: Neben der Festplatte
 
 | 
			
				|  Verfasst am: 20.02.2007, 19:10    Titel: |   |  
				| 
 |  
				|  	  | ThePuppetMaster hat Folgendes geschrieben: |  	  | Da bin ich mit meiner MSVBVM60.dll noch recht zufrieden.
 | 
 
 
  Ganz meine Meinung  _________________
 » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 
  |  |  
		| Nach oben |  |  
		|  |  
		| Mao 
 
 
 Anmeldungsdatum: 25.09.2005
 Beiträge: 4409
 Wohnort: /dev/hda1
 
 | 
			
				|  Verfasst am: 20.02.2007, 19:54    Titel: |   |  
				| 
 |  
				| @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.
   Also da ist schon nur das nötigste drinnen.
   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.
  _________________
 Eine handvoll Glück reicht nie für zwei.
 --
 
  |  |  
		| Nach oben |  |  
		|  |  
		| ThePuppetMaster 
 
  
 Anmeldungsdatum: 18.02.2007
 Beiträge: 1839
 Wohnort: [JN58JR]
 
 |  |  
		| Nach oben |  |  
		|  |  
		| c.m.obrecht 
 
  
 Anmeldungsdatum: 09.03.2006
 Beiträge: 377
 Wohnort: Hofstetten SO, CH
 
 | 
			
				|  Verfasst am: 20.02.2007, 22:10    Titel: |   |  
				| 
 |  
				| 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
  Wie wende ich das Beispiel an? _________________
 ...längre blomstre gamle nord...
 |  |  
		| Nach oben |  |  
		|  |  
		| c.m.obrecht 
 
  
 Anmeldungsdatum: 09.03.2006
 Beiträge: 377
 Wohnort: Hofstetten SO, CH
 
 | 
			
				|  Verfasst am: 22.02.2007, 21:20    Titel: |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| ThePuppetMaster 
 
  
 Anmeldungsdatum: 18.02.2007
 Beiträge: 1839
 Wohnort: [JN58JR]
 
 | 
			
				|  Verfasst am: 22.02.2007, 22:46    Titel: |   |  
				| 
 |  
				| 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
   
 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 |  |  
		|  |  
		| c.m.obrecht 
 
  
 Anmeldungsdatum: 09.03.2006
 Beiträge: 377
 Wohnort: Hofstetten SO, CH
 
 | 
			
				|  Verfasst am: 23.02.2007, 00:37    Titel: |   |  
				| 
 |  
				| 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
   
 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 |  |  
		|  |  
		| ThePuppetMaster 
 
  
 Anmeldungsdatum: 18.02.2007
 Beiträge: 1839
 Wohnort: [JN58JR]
 
 | 
			
				|  Verfasst am: 23.02.2007, 00:59    Titel: |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| c.m.obrecht 
 
  
 Anmeldungsdatum: 09.03.2006
 Beiträge: 377
 Wohnort: Hofstetten SO, CH
 
 | 
			
				|  Verfasst am: 23.02.2007, 12:58    Titel: |   |  
				| 
 |  
				| Ja stimmt URL wird dort ja als Variant definiert. Sollte eine Variable von Form1 sein. Das habe ich gar nicht angeschaut dort  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 |  |  
		|  |  
		| ThePuppetMaster 
 
  
 Anmeldungsdatum: 18.02.2007
 Beiträge: 1839
 Wohnort: [JN58JR]
 
 | 
			
				|  Verfasst am: 23.02.2007, 15:23    Titel: |   |  
				| 
 |  
				| Quellcode reicht eigentlich .. ansonsten kannst es hoch laden, URL bekommst via PN _________________
 [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
 |  |  
		| Nach oben |  |  
		|  |  
		| c.m.obrecht 
 
  
 Anmeldungsdatum: 09.03.2006
 Beiträge: 377
 Wohnort: Hofstetten SO, CH
 
 | 
			
				|  Verfasst am: 23.02.2007, 15:33    Titel: |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| ThePuppetMaster 
 
  
 Anmeldungsdatum: 18.02.2007
 Beiträge: 1839
 Wohnort: [JN58JR]
 
 | 
			
				|  Verfasst am: 23.02.2007, 16:30    Titel: |   |  
				| 
 |  
				| Also .. ich stell dir jetzt mal alles zusammen, was ich für beanstandend halte: 
 
  	  | Zitat: |  	  | 1.
 
 da solltest du immer das verzeichniss mit angeben, da es sonst zu problemen kommen kann, wenn mit CHDir oder ähnlichen Komandos "nicht" gearbeitet wird. 	  | Zitat: |  	  | Open ("StartSite.brw") For Output As #f | 
 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
 
 schreiben 	  | Zitat: |  	  | Open (App.Path & "\StartSite.brw") For Output As #f | 
 
 
 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
   
 
 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
  ) 
 
 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
   
 Hf & GoodLook
 
 MfG
 TPM
 _________________
 [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
 |  |  
		| Nach oben |  |  
		|  |  
		| c.m.obrecht 
 
  
 Anmeldungsdatum: 09.03.2006
 Beiträge: 377
 Wohnort: Hofstetten SO, CH
 
 | 
			
				|  Verfasst am: 23.02.2007, 18:57    Titel: |   |  
				| 
 |  
				| Vielen Dank! Ich muss vielleicht erwähnen dass ich das Visual Basic erst seit ca. 2 Wochen besitze  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   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 |  |  
		|  |  
		| ThePuppetMaster 
 
  
 Anmeldungsdatum: 18.02.2007
 Beiträge: 1839
 Wohnort: [JN58JR]
 
 | 
			
				|  Verfasst am: 23.02.2007, 19:24    Titel: |   |  
				| 
 |  
				| Tja .. das hat n ganz einfachen grund   
 
  	  | Zitat: |  	  | Set fMainForm = New frmMain | 
 
 Hoffe, du weist, was ich meine
   
 
 MfG
 TPM
 _________________
 [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
 |  |  
		| Nach oben |  |  
		|  |  
		| c.m.obrecht 
 
  
 Anmeldungsdatum: 09.03.2006
 Beiträge: 377
 Wohnort: Hofstetten SO, CH
 
 | 
			
				|  Verfasst am: 23.02.2007, 22:09    Titel: |   |  
				| 
 |  
				| Ach das! Wie kann ich das ändern? Mit diesen Objekten habe ich noch nicht sehr viel Erfahrung (und ich mag keine Objekte  ) 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 |  |  
		|  |  
		| ThePuppetMaster 
 
  
 Anmeldungsdatum: 18.02.2007
 Beiträge: 1839
 Wohnort: [JN58JR]
 
 | 
			
				|  Verfasst am: 24.02.2007, 08:23    Titel: |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| c.m.obrecht 
 
  
 Anmeldungsdatum: 09.03.2006
 Beiträge: 377
 Wohnort: Hofstetten SO, CH
 
 | 
			
				|  Verfasst am: 24.02.2007, 10:42    Titel: |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| ThePuppetMaster 
 
  
 Anmeldungsdatum: 18.02.2007
 Beiträge: 1839
 Wohnort: [JN58JR]
 
 | 
			
				|  Verfasst am: 24.02.2007, 11:19    Titel: |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| c.m.obrecht 
 
  
 Anmeldungsdatum: 09.03.2006
 Beiträge: 377
 Wohnort: Hofstetten SO, CH
 
 | 
			
				|  Verfasst am: 24.02.2007, 12:15    Titel: |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		| ThePuppetMaster 
 
  
 Anmeldungsdatum: 18.02.2007
 Beiträge: 1839
 Wohnort: [JN58JR]
 
 | 
			
				|  Verfasst am: 24.02.2007, 14:46    Titel: |   |  
				| 
 |  
				| 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 |  |  
		|  |  
		|  |  
  
	| 
 
 | 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.
 
 |  |