WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 22.08.2003, 13:12   #1
Nestrus
Elite
 
Registriert seit: 01.07.2000
Alter: 41
Beiträge: 1.400


Nestrus eine Nachricht über ICQ schicken
Standard VB Frage: Wert aus anderem form/Beenden-button/Fortschrittsanzeige

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....
____________________________________
"reden 2 unsinn im wcm forum, meint der dritte is eh offtopic"
(Gifty am 14. Apr 2002 um 22:47 in " WCM Rat & Tat Forum > Meinung > Guru, e-Zitate & Off Topic > Kommt ein Mann zum Arzt...")
Nestrus ist offline   Mit Zitat antworten
Alt 22.08.2003, 13:25   #2
renew
Inventar
 
Registriert seit: 22.10.2000
Alter: 41
Beiträge: 5.552


Standard

kurz und bündig zum 1. Problem:

Du musst so auf das Objekt referenzieren:
Application.Forms("Form2").Dir1.List(Dir1.ListInde x)



zum 2.: sorry, da hab ich jetzt net die Zeit mich rein zu denken - falls mir was einfällt, post ichs dir aber natürlich.
renew ist offline   Mit Zitat antworten
Alt 22.08.2003, 13:29   #3
werner_q
Veteran
 
Registriert seit: 17.05.2001
Alter: 57
Beiträge: 299


Standard

ad 1:

Nicht destp = Form2.Dir1.List(Dir1.ListIndex)
sondern destp = Form2.Dir1.List(Form2.Dir1.ListIndex)

Ich hoffe, es war wirklich so einfach

ad 2: Des is ma zuviel zum lesen. Es gibt ein fertiges Objekt 'ProgressBar' in 'Microsoft Windows Common Controls 5.0 (SP2)'. Vielleicht is des geiler ?
werner_q ist offline   Mit Zitat antworten
Alt 22.08.2003, 13:34   #4
werner_q
Veteran
 
Registriert seit: 17.05.2001
Alter: 57
Beiträge: 299


Standard

bisschen mehr gelesen ....

Beenden Button ???

Private Sub Command1_Click()

Unload Me

End Sub

Oder ?

Fortschrittsanzeige, wieviel das OS wirklich schon kopiert hat: Keine Ahnung, Sorry. Weiss gar nicht, ob das in VB überhaupt geht.

Viel Spass sonst noch

Werner
werner_q ist offline   Mit Zitat antworten
Alt 22.08.2003, 16:29   #5
Sesa_Mina
Schwarzfußfrettchen
 
Registriert seit: 28.01.2001
Beiträge: 2.071


Standard

Private Sub Command1_Click()
End
End Sub

Beendet das Programm.
____________________________________
Wann die kan Almdudler ham... \"Es gibt nur einen Weg zur Lunge, und der muss geteert werden, damit der Krebs nicht stolpert!\"
http://www.dream.at/gizmo/bunny.gif
Image is © 2001 Merle
Sterndalsäg.. ähh... jäger
Sesa_Mina ist offline   Mit Zitat antworten
Alt 22.08.2003, 17:08   #6
werner_q
Veteran
 
Registriert seit: 17.05.2001
Alter: 57
Beiträge: 299


Standard OT @ Sesa_Mina

Image (c) by Merle, aber nix möglich gucken by Me, weil Server nix finden by IE ...
werner_q ist offline   Mit Zitat antworten
Alt 22.08.2003, 17:30   #7
Seidl
Veteran
 
Registriert seit: 10.01.2001
Beiträge: 478


Standard

Hier ein Beispiel das rekursiv Files und Unterordner kopiert und den Fortschritt über zwei Progressbars anzeigt. Zusätzlich wird im Ausgangsordner ein Log-File geschrieben.
Die ganze Sache ist natürlich nicht besonders sauber oder schön programmiert aber eigentlich ging's ja nur um Progressbars.
Seidl ist offline   Mit Zitat antworten
Alt 24.08.2003, 23:31   #8
Nestrus
Elite
 
Registriert seit: 01.07.2000
Alter: 41
Beiträge: 1.400


Nestrus eine Nachricht über ICQ schicken
Standard

Danke alle.
Das erste Problem konnte ich noch nicht ausprobieren, ich hab eigentlich gedacht ich hab mir den code selbst geschickt aber wohl doch nicht....
Aber ich glaube euch dass einer von euch schon recht haben wird!
(Vor allem die Erklärung von werner_q klingt logisch.)


Mittlerweile bin ich auch dazu gekommen den Rest auszuprobieren:
@Sesa_Mina: Danke, ein simples end stimmt natürlich, wiso hab ich das blos nicht in der msdn gefunden?

@Seidl:
Besonderen dank an dich, das schaut echt gut aus. ( ) Ich werde das gleich am Montag einbaun!
____________________________________
"reden 2 unsinn im wcm forum, meint der dritte is eh offtopic"
(Gifty am 14. Apr 2002 um 22:47 in " WCM Rat & Tat Forum > Meinung > Guru, e-Zitate & Off Topic > Kommt ein Mann zum Arzt...")
Nestrus ist offline   Mit Zitat antworten
Alt 25.08.2003, 08:23   #9
deleted_150216
Inventar
 
Registriert seit: 28.08.2001
Ort: Österreich
Beiträge: 1.597


Standard

ActiveVB

Als mein Geheimtipp!!!
deleted_150216 ist offline   Mit Zitat antworten
Alt 25.08.2003, 08:55   #10
Nestrus
Elite
 
Registriert seit: 01.07.2000
Alter: 41
Beiträge: 1.400


Nestrus eine Nachricht über ICQ schicken
Standard

Ich hab jetzt das Beispiel von seidl eingebaut.
Allerdings muss ich zwei Sachen ändern: Erstens muss es möglich sein mehrere Ordner (die man zuvor ausgewählt und einer Liste hinzugefügt hat) in einem Rutsch zu kopieren und zweitens nimmt das Beispiel blos die Unterordner, es soll den ausgewählten Ordner aber auch mitkopieren.
Zum ersten nun eine einfache Frage (das zweite krieg ich hoffentlich noch hin):

Ich will eine For Each Next Schleife machen, um die Liste durchzugehn, was muss ich da als Objekt nehmen?

In der MSDN ist ein Beispiel dazu:
Code:
Dim Gefunden, Objekt1, Auflistung1
Gefunden = False   ' Variable initialisieren.
For Each Objekt1 In Auflistung1   ' Alle Elemente durchlaufen. 
   If Objekt1.Text = "Hallo" Then   ' Wenn Text gleich "Hallo",
      Gefunden = True   ' Gefunden auf True setzen.
      Exit For   ' Schleife verlassen.
   End If
Next
Wie legt man das jetzt auf die Objekte in Form1.List1 um?

Ich dache, das geht einfach so, aber da kommt immer "Objekt unterstützt diese Eigenschaft oder Methode nicht (Fehler 438)":
Code:
Dim Obj
For Each Obj In Form1.List1
____________________________________
"reden 2 unsinn im wcm forum, meint der dritte is eh offtopic"
(Gifty am 14. Apr 2002 um 22:47 in " WCM Rat & Tat Forum > Meinung > Guru, e-Zitate & Off Topic > Kommt ein Mann zum Arzt...")
Nestrus ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 02:13 Uhr.


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