Hallo
Ich muss gerade ein kleines Backup-Programm in VB stricken und hab damit -wohl weil ich noch nicht so viel und schonn lange gar kein VB mehr gemacht hab- mehr Probleme als ich dachte.
Zuerst die einfachen:
Wiso kann ich in form2
Code:
Dim destp As String
destp = Dir1.List(Dir1.ListIndex)
sagen, aber wenn ich in form3
Code:
destp = Form2.Dir1.List(Dir1.ListIndex)
schreibe, dann kommt immer ein Fehler, er brauche ein Objekt??
Zweitens: Wie macht man einen Beenden-button?
Ich hab in der MSDN die Funktion nicht gefunden, mit der man das geschriebenen Programm beendet....
Und das wohl schwerste:
Nachdem man Quelle und Ziel ausgewählt hat, kopiert es die Ordner.
Ich hätte da gerne eine Fortschrittsanzeige wie man sie auch im Betriebssystem sieht, wenn etwas verschoben wird.
Nach der Anregung einer Homepage hab ich eine Prozedur, der man sagen kann, dass sie x Fortschritt auf einer Skala von y anzeigen kann.
Zur Veranschaulichung:
Wenn die Prozedur zB Balken heißt verhaltet sie sich also so:
Balken 1,4: Das erste Viertel wird ausgemahlt
Balken 1,4: Das zweite, der Balken ist jetzt halb voll.
Balken 2,4: Weil jetzt zwei Schritte gemacht wurden ist er ganz voll.
Außerdem hab ich oberhalb des Balkens (ist ein image) ein label-Feld in dem immmer der Ordner angezeigt wird, der gerade dran ist.
Allerdings funktioniert das nicht so ganz, mit der Schleife wird zwar alles kopiert, allerdings bleibt der Balken und dessen label nach dem ersten mal stehen, der code der nach der For-Schleife ausgeführt werden sollte kommt gar nicht.
Weiß jemand wiso?
Code:
Private Sub Timer1_Timer()
Dim sourcep As String
'destp = Form2.Dir1.List(Dir1.ListIndex)
destp = "c:\test"
Dim ndestp As String
For i = 0 To (Form1.List1.ListCount)
On Error GoTo error
sourcep = Form1.List1.List(i)
Label1.Caption = sourcep
Fortschritt Picture1, 1, Form1.List1.ListCount
Set nFSO = New FileSystemObject
With nFSO
ndestp = .BuildPath(destp, .GetBaseName(sourcep))
nFSO.CopyFolder sourcep, ndestp, Overwrite
End With
Next i
Label1.Caption = "fertig"
Command1.Visible = True
error:
If Err.Number = 470 Then
MsgBox ("Zugriff Verweigert.")
Resume Next
End If
End Sub
Public Sub Fortschritt(Bild As PictureBox, ByVal _
Fortschritt As Integer, _
Optional ByVal Maximum As Integer = 100)
Dim Pix As Integer
Set Bild.Picture = Nothing
Pix = Int(Fortschritt / (Maximum / (Bild.Width - 5)))
If Pix > 2 Then
Bild.Line (1, 1)-(Pix - 2, Bild.Height - 6), RGB(255, 51, 0), BF
End If
End Sub
Erklärungen: Den Timer hab ich, damit man gleich das aktuellen form zu gesicht bekommt und den Balken überhaupt von Anfang an sieht. (Bevor ich den hatte, sah man bis zum Ende des ersten Schleifendurchlaufs noch das vorherige form.)
In der dritten Zeile steckt der erste von mir beschriebene Fehler, deshalb hab ich die auskommentiert und die vierte geschrieben.
Der Rest sollte klar sein, glaub ich. (Außer die zwei Zeilen nach der For-Schleife, die gehen bei mir nicht, aber das hab ich ja schon gesagt.)
Weiß jemand hier eine Lösung, oder -noch besser- hat sogar jemand eine andere Idee, mit der man einen besseren Balken anzeigen kann?
Meiner zeigt ja nur an, wieviel Ordnern schon kopiert wurden und nicht den tatsächlichen Fortschritt...
Gut wäre ein zweiter Balken, der anzeigt, wie weit das Programm mit dem Ordner ist, der gerade kopert wird aber ich hab keine Ahnung wie man so was machen könnte....
Ich hoffe, ich hab nicht zu viel geschrieben und bedanke mich schon mal
Nestrus, der jetzt merkt wie lange das letzte mal mit VB WIRKLICH schon her ist....