Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Wann ist FileCopy fertig? / Ende eines Prozesses ermitteln

188 views
Skip to first unread message

Folke Kieseler

unread,
Jul 11, 2000, 3:00:00 AM7/11/00
to
für VB6

Hallo,

wie finde ich heraus, wann ein FileCopy fertig ist?
Bei einer 10 MB großen Datei erscheint meine MsgBox nun doch etwas zu
früh. :-))

Genauer erklärt: Ich möchte den User gern benachrichtigen, wenn der
FileCopy Prozess abgeschlossen ist. Da es sich um Outlook Datendateien
(*.pst) handelt, geht es immer um sehr große Dateien (3 - 30 MB und
bei einigen Verrückten noch größer.)

Später wage ich mich dann evtl. mal an ein Statusbar.
Aber jetzt würde mir eine MsgBox reichen .

--
Folke Kieseler
MS Outlook 2000-FAQ: http://www.outlook-net.de/faq.htm
MS Outlook 98-FAQ: http://www.pc-faq.de/outlook98
***** Bitte keine Outlook-Fragen per Email. *****

Harald Stowasser

unread,
Jul 11, 2000, 3:00:00 AM7/11/00
to
Folke Kieseler schrieb:

> wie finde ich heraus, wann ein FileCopy fertig ist?
> Bei einer 10 MB großen Datei erscheint meine MsgBox nun doch etwas zu
> früh. :-))

Leider geht das nicht. Bei NT giebts eine Api die nen Callback schickt.
aber auf W95 Is-Nich!

> Genauer erklärt: Ich möchte den User gern benachrichtigen, wenn der
> FileCopy Prozess abgeschlossen ist. Da es sich um Outlook Datendateien
> (*.pst) handelt, geht es immer um sehr große Dateien (3 - 30 MB und
> bei einigen Verrückten noch größer.)
>
> Später wage ich mich dann evtl. mal an ein Statusbar.
> Aber jetzt würde mir eine MsgBox reichen .

Das Kopieren selber machen. Alles andere ist kalter Kaffe.

--
--- . --- >Harald Stowasser
/ | | -Unidat >Fa. ZiT Unidat
--- - - >http://www.zitunidat.de/
>http://www.med-produkte.de/

Udo Riesmeier

unread,
Jul 11, 2000, 3:00:00 AM7/11/00
to

Function kopieren(von, nach)

On Error GoTo ErrorHandler
With fos
.wFunc = FO_COPY
.pFrom = von
.pTo = nach
.fFlags = FOF_NOCONFIRMATION Or FOF_RENAMEONCOLLISION
.hNameMappings = 1
End With
nResult = SHFileOperation(fos)
If nResult <> 0 Then
msgbox "Quelldatei nicht vorhanden: " + von 'kann man machen---muß man
nicht
End If

End Function

Die Funktion wird erst beendet, wenn kopiervorgang beendet.
Als Rückgabe kannst Du ja auch nResult geben.
Alle Api-Funktionen und Konstanten findes Du im Api-Viewer, wenn nicht so
schreib mir.

MfG

Udo

"Folke Kieseler" <fkie...@gmx.de> schrieb im Newsbeitrag
news:8kfg6i...@Kieseler.de...
> für VB6
>
> Hallo,


>
> wie finde ich heraus, wann ein FileCopy fertig ist?
> Bei einer 10 MB großen Datei erscheint meine MsgBox nun doch etwas zu
> früh. :-))
>

> Genauer erklärt: Ich möchte den User gern benachrichtigen, wenn der
> FileCopy Prozess abgeschlossen ist. Da es sich um Outlook Datendateien
> (*.pst) handelt, geht es immer um sehr große Dateien (3 - 30 MB und
> bei einigen Verrückten noch größer.)
>
> Später wage ich mich dann evtl. mal an ein Statusbar.
> Aber jetzt würde mir eine MsgBox reichen .
>

Folke Kieseler

unread,
Jul 11, 2000, 3:00:00 AM7/11/00
to

Danke an Euch Beide für die Info.
Werde es mit der Funktion probieren.
Ich habe gar keine Ahnung, wie ich selber kopieren sollte.
Da müßte ich das wohl bitweise durch die Gegend senden?
Das hebe ich mir dann lieber für später auf.
Gibt noch soviel Anderes zu lernen.

--
Folke Kieseler
MS Outlook 2000-FAQ: http://www.outlook-net.de/faq.htm
MS Outlook 98-FAQ: http://www.pc-faq.de/outlook98
***** Bitte keine Outlook-Fragen per Email. *****

"Harald Stowasser" <h...@zitunidat.de> schrieb im Newsbeitrag
news:396B2F7A...@zitunidat.de...


> Leider geht das nicht. Bei NT giebts eine Api die nen Callback
schickt.
> aber auf W95 Is-Nich!
>

Ingo Moch

unread,
Jul 11, 2000, 3:00:00 AM7/11/00
to

Hallo,
Folke Kieseler <fkie...@gmx.de> schrieb in im Newsbeitrag:
8kfqr...@Kieseler.de...

> Ich habe gar keine Ahnung, wie ich selber kopieren sollte.
> Da müßte ich das wohl bitweise durch die Gegend senden?
Das stellst Du dir zu kompliziert vor. Ist aber fuer dein Vorhaben
ueberfluessig, das selbst zu machen (ist ja alles schon "BuildIn").

Tschau
Ingo

Harald Stowasser

unread,
Jul 12, 2000, 3:00:00 AM7/12/00
to

Folke Kieseler schrieb:


>
> Danke an Euch Beide für die Info.
> Werde es mit der Funktion probieren.

> Ich habe gar keine Ahnung, wie ich selber kopieren sollte.
> Da müßte ich das wohl bitweise durch die Gegend senden?

> Das hebe ich mir dann lieber für später auf.
> Gibt noch soviel Anderes zu lernen.

Nagut,
kostet aber einen kasten ;-)
Ich benutze nur noch diese methode, Da sie Super zu erweiten ist. Du
kannst z.b. schon wähernd dem Kopiern die datei prüfen...
Das FSO hab ich noch nie Probiert.

du kannst das beispiel noch viel schneller machen indem du den
Chunk-Puffer erhöhst auf (z.b. 64K)

Option Explicit
Private Sub Form_Click()
Kopiere "C:\TEMP\MausZiel.txt", "C:\TEMP\Maus.txt"
End Sub

Public Sub Kopiere(ziel As String, quelle As String)
On Error GoTo Kopiere_ErrorHandler
Const pufflen = 4095
Dim RestLen As Long
Dim puffer() As Byte
Dim Laenge As Long
Dim rest As Single
ReDim puffer(pufflen)
Open quelle For Binary Access Read As #1
Open ziel For Binary Access Write As #2
Laenge = LOF(1)
Do Until Seek(1) > Laenge
RestLen = Laenge - Seek(1)
If RestLen < pufflen Then ReDim puffer(RestLen)
Get #1, , puffer
Put #2, , puffer
rest = 100 * (Seek(1) / (Laenge + 1))
Me.Caption = CLng(Seek(1) / 1024) & " KBytes Kopiert von " &
CLng(Laenge / 1024) & " :" & Format(rest, "###0.00") & "%"
Me.Refresh
Loop
Close #1
Close #2
Exit Sub
Kopiere_ErrorHandler:
MsgBox (Err.Description)
Close #1
Close #2
End Sub

Friedrich Weiner

unread,
Jul 12, 2000, 3:00:00 AM7/12/00
to
Folke,

ich benutze folgendes Programm, um z.B. einen Update des gerade aktiven
Programms von Diskette (CD) auf den PC zu kopieren und nach Abschluss der
Kopie das aktive Programm wieder zu starten. Ich selbst hatte mal die
gleiche Frage in der Newsgroup gestellt und zahlreiche Hinweise erhalten,
die ich nun gerne selbst zur Verfügung stellen möchte:

Gruß
Friedrich

----------------------------------------------------------------------------------

Private mGradientColor As Long
Private Disk_ok As Boolean
Private App_Pfad As String
Private SourceFile As String
Private DestinationFile As String

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Declare Function FindWindow Lib "User32" Alias "FindWindowA"
(ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long

Private Declare Function SendMessage Lib "User32" Alias "SendMessageA"
(ByVal hwnd As Long, _
ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_CLOSE = &H10

Private Declare Function DestroyWindow Lib "User32" (ByVal hObject As
Long) As Long

---------------------------------------------------------------------------------

Private Sub Test_Disk()

Disk_ok = ExistFileDirDrive("A:\")

If Disk_ok <> True Then

Hinweis.Caption = "Update kann nicht durchgeführt werden, weil " &
_
"die notwendige Diskette nicht gefunden wurde. "
& _
"Bitte legen Sie die Diskette ein und starten
Sie " & _
"das Programm erneut." + Chr$(13) + Chr$(13) +
Chr$(10) + "Das Programm " & _
"wird automatisch beendet!"
DoEvents: Show
Sleep (5000)
GoTo weiter

Else

'gebe Text raus, daß Update läuft

Text = "Der Update wird durchgeführt!" + Chr$(13) + Chr(10)
Hinweis.Caption = Text
DoEvents: Show
Sleep (2000)

'öffne die Verzeichnisdatei und kopiere File für File

FilePath = "A:\"
FileName = Dir(FilePath, vbDirectory) ' Retrieve the first
entry.
Do While FileName <> ""
If FileName <> "." And FileName <> ".." Then
SourceFile = "A:\" + Trim$(FileName)
DestinationFile = App_Pfad + "\" + Trim$(FileName)
FileCopy SourceFile, DestinationFile
Text = Text + FileName + " kopiert ..." + Chr$(13)
Hinweis.Visible = False
Show
Hinweis.Caption = Text
Hinweis.Visible = True
DoEvents: Show
Sleep (1000)
End If
FileName = Dir
Loop
End If

weiter:

Sleep (1000)
Unload Me

End Sub

---------------------------------------------------------------------------------

Private Sub Form_Load()

Show

'Damit der Update erfolgen kann, muß das Programm geschlossen
'werden ...

Dim hFremdFenster As Long
hFremdFenster = FindWindow(vbNullString, "Vereins-Verwaltung")
ret& = SendMessage(hFremdFenster, WM_CLOSE, 0, 0)

'Bestimme jetzt Laufwerk usw

App_Pfad = App.Path
Laufwerk = Left$(App_Pfad, 3)
Pfad_Programm = Mid$(App_Pfad, 3, Len(App_Pfad) - 1)
ChDrive Laufwerk
ChDir Pfad_Programm

'teste, ob Diskette eingelegt ist

Call Test_Disk

End Sub

----------------------------------------------------------------------------------

Private Sub Form_Resize()

Static sLastHeight As Single

With Me
If .WindowState <> vbMinimized Then
If sLastHeight > .Height Then
Call FormGradient(Me, vbCyan, CBool(0))
sLastHeight = .Height
End If
End If
End With
End Sub
Private Sub Form_Paint()
FormGradient Me, vbCyan, CBool(0)
End Sub

--------------------------------------------------------------------------------

Private Sub Form_Unload(Cancel As Integer)

On Error Resume Next
RetVal = Shell(App_Pfad + "\Verein.exe", 1)
End

End Sub

Folke Kieseler wrote:

> für VB6
>
> Hallo,
>
> wie finde ich heraus, wann ein FileCopy fertig ist?
> Bei einer 10 MB großen Datei erscheint meine MsgBox nun doch etwas zu
> früh. :-))
>
> Genauer erklärt: Ich möchte den User gern benachrichtigen, wenn der
> FileCopy Prozess abgeschlossen ist. Da es sich um Outlook Datendateien
> (*.pst) handelt, geht es immer um sehr große Dateien (3 - 30 MB und
> bei einigen Verrückten noch größer.)
>
> Später wage ich mich dann evtl. mal an ein Statusbar.
> Aber jetzt würde mir eine MsgBox reichen .
>

Harald Stowasser

unread,
Jul 13, 2000, 3:00:00 AM7/13/00
to

Friedrich Weiner schrieb:


>
> Folke,
>
> ich benutze folgendes Programm, um z.B. einen Update des gerade
> aktiven Programms von Diskette (CD) auf den PC zu kopieren und
> nach Abschluss der Kopie das aktive Programm wieder zu starten.
> Ich selbst hatte mal die gleiche Frage in der Newsgroup gestellt
> und zahlreiche Hinweise erhalten, die ich nun gerne selbst zur
> Verfügung stellen möchte:

Ui, darf ich korigieren?

Ich halte diesen Konstrukt für unnötig und unübersichtlich:


> Disk_ok = ExistFileDirDrive("A:\")
>
> If Disk_ok <> True Then

besser ist doch:
If Not ExistFileDirDrive("A:\") Then
Ich würde die Variable nur anlegen wenn ich sie Öfter brauche.

> + Chr$(13) + Chr$(13) + Chr$(10) +

Strings Addieren Immer mit & ! Beim Plus können sich fehler
einschleichen. Auserdem sind Konstanten übersichtlicher und
Platzsparender!
also:
$ vbCr & vbCrLf



> DoEvents: Show
> Sleep (5000)
> GoTo weiter

Holla,
Ein Sleep (5000) ist das Häßlichste was man machen kann! Erstens
Reagiert dein Fenster auf überhaupt keine Nachricht mehr. Und Zweitens
wird dadurch im TaskManager die Anwendung als 'Not-Responding'
gekennzeichnet. Du kannst sogar das gaze system abschießen wenn eine
zweite anwendung mittels 'GetWindow' gerade dein Programm analysiert,
und auf eine Rückgabe wartet.
Um gewisse Zeiten abzuwarten giebt es VIEL bessere Konstrukte.
Das DoEvents:Show ist IMHO durch ein me.Refresh zu ersetzen. Mit
DoEvents sollte man sowiso sehr spaarsam umgehen.

Warum ist da Ein GOTO? Wenn der Sprung sowiso von der If-Then-Else
Bedingung ausgefüht wird? das Goto ist sooo unnötig wie ein Kropf!

> Hinweis.Caption = Text
> DoEvents: Show
> Sleep (2000)

schon wieder.

> Sleep (1000)
Nach Jeder Datei eine sekunde warten? Nicht gerade sehr Pervormant!


> Private Sub Form_Unload(Cancel As Integer)
> On Error Resume Next
> RetVal = Shell(App_Pfad + "\Verein.exe", 1)
> End
> End Sub

KEIN END! NIE END! NIE ! NIE NIE NIE!

(sorry, aber man kann's gar nicht oft genug sagen!)

P.S.
In dem Programm sind soo viele 'Unschönigkeiten'. Wenn euch etwas unklar
ist, währe es IMHO besser einen extra Thread zu öffnen, als diese Gablel
hier noch weiter zu führen.

--

Stefan

unread,
Jul 14, 2000, 3:00:00 AM7/14/00
to
Lieber Harald,
sicherlich bist Du hier einer der besten Programmierer. Wir sind stolz auf
Dich - aber dennoch finde ich es schlimmer, jemanden auf diese Art versuchen
zu maßregeln, wie Du es machst, wie ein nicht ganz 100% "schönes", jedoch
auf alle Fälle RICHTIG LAUFENDES Programmbeispiel vorzustellen und damit
jemandem eine für ihn wichtige Frage zu beantworten und ihm versuchen zu
helfen.

Evtl ist es besser, Du versuchst mal Fragen zu beantworten und nicht, Dich
hier als Besserwisser (tschuldige) aufzuspielen.

Es tut mir leid, Dich persönlich angegriffen zu haben, aber mir ist ein
wenig schlecht geworden beim Lesen Deiner Nachrich.
s.u.

Tschuldigung nochmal, aber sowas finde ich nicht nett. Und dem Friedrich
möchte ich Danken für eine RICHTIGE Antwort und laß Dich nicht von solchen
Leuten abschrecken, hier anderen zu helfen.

Stefan

Harald Stowasser <h...@zitunidat.de> schrieb in im Newsbeitrag:
396D977E...@zitunidat.de...


>
>
> Ui, darf ich korigieren?
>
> Ich halte diesen Konstrukt für unnötig und unübersichtlich:
>

> besser ist doch:

> Ich würde die Variable nur anlegen wenn ich sie Öfter brauche.

> Strings Addieren Immer mit & ! Beim Plus können sich fehler


> einschleichen. Auserdem sind Konstanten übersichtlicher und
> Platzsparender!

> Ein Sleep (5000) ist das Häßlichste was man machen kann! Erstens
>


> Warum ist da Ein GOTO? Wenn der Sprung sowiso von der If-Then-Else
> Bedingung ausgefüht wird? das Goto ist sooo unnötig wie ein Kropf!
>

> Nach Jeder Datei eine sekunde warten? Nicht gerade sehr Pervormant!
>
>

> > End Sub
> KEIN END! NIE END! NIE ! NIE NIE NIE!
>

Harald M. Genauck

unread,
Jul 14, 2000, 3:00:00 AM7/14/00
to
Hallo,

> >Evtl ist es besser, Du versuchst mal Fragen zu beantworten und nicht,
Dich
> >hier als Besserwisser (tschuldige) aufzuspielen.

> Da war keine Besserwisserei, sondern das waren konstruktive und
> richtige (teilweise sogar wichtige) Hinweise.
>
> Raum fuer Diskussionen ueber ordentliche Programmierung wird doch wohl
> in einem Programmiererforum noch gegeben sein, oder? In dieser Gruppe
> zumindest halten wir das durchaus so.

Dem schließe ich mich zu 100% an.

Viele Grüße

Harald M. Genauck

ABOUT Visual Basic - das Webmagazin
http://www.aboutvb.de


Harald Stowasser

unread,
Jul 14, 2000, 3:00:00 AM7/14/00
to
Stefan schrieb:

>
> Lieber Harald,
> sicherlich bist Du hier einer der besten Programmierer. Wir sind stolz auf
> Dich - aber dennoch finde ich es schlimmer, jemanden auf diese Art versuchen
> zu maßregeln, wie Du es machst, wie ein nicht ganz 100% "schönes", jedoch
> auf alle Fälle RICHTIG LAUFENDES Programmbeispiel vorzustellen und damit
> jemandem eine für ihn wichtige Frage zu beantworten und ihm versuchen zu
> helfen.
Das Programm läuft solange richtig bis ein anderes Programm (z.B.
Centralizer) die Hängende Anwendung findet und beendet! (Sleep (5000))
Oder durch das END ein Controll abgewürgt wird, das noch DATEN auf die
Festplatte schreiben will.
Denke nochmal darüber nach!

> Evtl ist es besser, Du versuchst mal Fragen zu beantworten und nicht, Dich
> hier als Besserwisser (tschuldige) aufzuspielen.

*lol*
Ich beantworte auch Fragen. (ab und zu)

> Es tut mir leid, Dich persönlich angegriffen zu haben, aber mir ist ein
> wenig schlecht geworden beim Lesen Deiner Nachrich.
> s.u.

echt? Warum?
Sollte sich jemand durch mein Posting beleidigt fühlen. Dann
entschuldige ich mich dafür. Obwohl mir nicht ganz klar ist, warum mein
Briefchen beleidigend sein sollte? Ich jedenfalls bin für jegliche
konstruktive Kritik dankbar.

> Tschuldigung nochmal, aber sowas finde ich nicht nett. Und dem Friedrich
> möchte ich Danken für eine RICHTIGE Antwort und laß Dich nicht von solchen
> Leuten abschrecken, hier anderen zu helfen.

Richtig ist relativ!

Richtig ist, das mann eine Fensterscheibe einschlagen kann! Um dem
Schmuck dahinter mitzunehmen. Nur ob das Richtig ist, wage ich zu
bezweifeln!


P.S. Noch ein bisschen Konstruktive Kritik: (keine Massreglung!)
Du solltest deinen Newsreader richtig konfigurieren:
bei FAST allen Newsgroups in de.* ist es üblich, seinen vollen Namen as
RealNamen Anzugeben.
Ausserdem hast du ein sog. TOFU Posting abgesetzt (Text Oben Fullquote
Unten).
Lies mal folgende Texte:
http://learn.to/quote
http://www.chemie.fu-berlin.de/outerspace/netnews/netiquette.html

Frank Schumacher

unread,
Jul 14, 2000, 3:00:00 AM7/14/00
to
Einen wunderschönen guten ...!

> auf alle Fälle RICHTIG LAUFENDES Programmbeispiel vorzustellen und damit
> jemandem eine für ihn wichtige Frage zu beantworten und ihm versuchen zu
> helfen.

Ist ja schon richtig, aber was ist denn ein "RICHTIG LAUFENDES" Programm?
Ich denke schon, daß man sich nicht mit: "he ... es läuft - na bitte"
zufrieden geben sollte. Es ist ja auch nicht falsch von Friedrich, seinen
Vorschlag zur Lösung aufzuschreiben, aber es gibt nun mal Leute, die schon
einwenig mehr Programmiererfahrung haben.
Ich bin eigentlich immer froh, wenn mich jemand bei meinen angebotenen
Lösungen korrigiert. Man lernt sowieso NIE aus!

> Es tut mir leid, Dich persönlich angegriffen zu haben, aber mir ist ein
> wenig schlecht geworden beim Lesen Deiner Nachrich.

Mir ist auch schlecht geworden, aber eher wegen dem Code vom Friedrich ...

Also nix für ungut, aber einen erfahrenen Programmierer "anzugreifen", weil
er einen unerfahrerenen korrigiert ... (und auch noch damit Recht hat)

Bis denn dann,
Frank

--
Wisdom starts where knowledge ends - Rage (Ghosts-1999)

Friedrich Weiner

unread,
Jul 14, 2000, 3:00:00 AM7/14/00
to
Hallo,

ich wusste nicht, dass meine 'Hilfe' so viel Diskussionen erzeugen könnte.

Also ... Natürlich kann man meinen Code optimieren und dies sollte auch in einer
Newsgroup wie dieser geschehen. Über die Form kann man sich streiten. Eine sachliche
Antwort, wie sie z.B. von Harald M. Genauck schon öfters kam, findet sicherlich auch
viel Verständnis.

Warum habe ich Sleep(xxxx) verwendet:

Ursprünglich 'raste' mein Programm durch und eventuelle Fehlermeldungen konnten nicht
gelesen werden. Danach versuchte ich über Msg-Boxen das Thema abzufangen. Die Kritik
der Anwender war die, dass man zu oft den OK-Button drücken muss. Also verlängerte ich
die Anzeige des Textes ... Seit dieser Zeit habe ich keine Beschwerden mehr gehört.

DoEvents habe ich in dem Fall deswegen gewählt, weil Me.Refresh oder ähnliches nicht
das Problem auf dem KundenPC gelöst hat. Dort gab und gibt es Probleme mit dem
Graphikkartendriver, der zu einem unschönen Bildaufbau führt.

Trotzdem bin ich für die Diskussion dankbar, gerade auch zum Thema 'End' ...Denn auch
ich kann nach 20 Jahren Programmierung (zur Zeit nur noch Hobby) etwas dazulernen und
ich nehme die HIlfe auch gerne an.

Gruß
Friedrich

Friedrich Weiner wrote:

> Folke,
>
> ich benutze folgendes Programm, um z.B. einen Update des gerade aktiven
> Programms von Diskette (CD) auf den PC zu kopieren und nach Abschluss der
> Kopie das aktive Programm wieder zu starten. Ich selbst hatte mal die
> gleiche Frage in der Newsgroup gestellt und zahlreiche Hinweise erhalten,
> die ich nun gerne selbst zur Verfügung stellen möchte:
>

> Gruß
> Friedrich
>
> ----------------------------------------------------------------------------------
>
> Private mGradientColor As Long
> Private Disk_ok As Boolean
> Private App_Pfad As String
> Private SourceFile As String
> Private DestinationFile As String
>
> Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
>
> Private Declare Function FindWindow Lib "User32" Alias "FindWindowA"
> (ByVal lpClassName As String, _
> ByVal lpWindowName As String) As Long
>
> Private Declare Function SendMessage Lib "User32" Alias "SendMessageA"
> (ByVal hwnd As Long, _
> ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
> Private Const WM_CLOSE = &H10
>
> Private Declare Function DestroyWindow Lib "User32" (ByVal hObject As
> Long) As Long
>
> ---------------------------------------------------------------------------------
>
> Private Sub Test_Disk()
>

> Disk_ok = ExistFileDirDrive("A:\")
>
> If Disk_ok <> True Then
>

> Hinweis.Caption = "Update kann nicht durchgeführt werden, weil " &
> _
> "die notwendige Diskette nicht gefunden wurde. "
> & _
> "Bitte legen Sie die Diskette ein und starten
> Sie " & _
> "das Programm erneut." + Chr$(13) + Chr$(13) +
> Chr$(10) + "Das Programm " & _
> "wird automatisch beendet!"

> DoEvents: Show
> Sleep (5000)
> GoTo weiter
>

> Else
>
> 'gebe Text raus, daß Update läuft
>
> Text = "Der Update wird durchgeführt!" + Chr$(13) + Chr(10)

> Hinweis.Caption = Text
> DoEvents: Show
> Sleep (2000)
>

> Private Sub Form_Unload(Cancel As Integer)
>
> On Error Resume Next
> RetVal = Shell(App_Pfad + "\Verein.exe", 1)
> End
>
> End Sub
>

Harald M. Genauck

unread,
Jul 14, 2000, 3:00:00 AM7/14/00
to

Hallo Friedrich,

> Warum habe ich Sleep(xxxx) verwendet:
>
> Ursprünglich 'raste' mein Programm durch und eventuelle Fehlermeldungen
konnten nicht
> gelesen werden. Danach versuchte ich über Msg-Boxen das Thema abzufangen.
Die Kritik
> der Anwender war die, dass man zu oft den OK-Button drücken muss. Also
verlängerte ich
> die Anzeige des Textes ... Seit dieser Zeit habe ich keine Beschwerden
mehr gehört.

Alternativ-Vorschlag:

Wenn die Fehlermeldungen sowieso nur gelesen werden sollen, ohne dass der
Anwender bei jedem einzelnen Fehler irgendwie reagieren soll (und kann?) -
warum kann sich der Anwender die Ausgabe der Meldungen nicht hinterher noch
einmal in Ruhe ansehen? Alle Meldungen werden an einen String angehängt und
zum Schluss in einem Protokoll-Fenster angezeigt. Und wenn der Anwender
dieses Protokoll dann vielleicht noch ausdrucken oder auf die Platte
speichern kann - wäre das nicht sogar noch ein Extra-Service...?

Ansonsten fände ich es eher etwas witzig, dass sich Anwender mal darüber
beschweren, dass ein Programm _zu schnell_ sei... ;-))

> DoEvents habe ich in dem Fall deswegen gewählt, weil Me.Refresh oder
ähnliches nicht
> das Problem auf dem KundenPC gelöst hat. Dort gab und gibt es Probleme mit
dem
> Graphikkartendriver, der zu einem unschönen Bildaufbau führt.

Me.Refresh, also der Refresh des ganzen Forms hilft tatsächlich manchmal
nicht. Aber dann hilft es meistens, die Refresh-Methoden der betreffenden
Controls (die meistens, allerdings nicht alle haben eine) aufzurufen.

> Trotzdem bin ich für die Diskussion dankbar, gerade auch zum Thema 'End'
...

Njet. Zum Thema "End" gibt es nichts zu diskutieren. Es gibt nur ganz, ganz
wenige Ausnahmen, die eine Verwendung rechtfertigen. Und nach mittlerweile
einem knappen Jahr aktiver Teilnahme in dieser Newsgroup (und leider nur
Einblick in eine andere stark frequentierte Newsgroup eines anderen Servers)
und fortwährender "Diskussionen" über "End" bin ich endgültig zu dem Schluss
gekommen, dass diejenigen, die genügend Erfahrung haben, diese Ausnahmen
selber mit sicherem Blick zu erkennen, auch die Erfahrung haben, damit
umzugehen. Allen anderen kann ich allen Ernstes nur raten: Finger weg von
"End".

Das mag zwar etwas harsch oder sonstwie klingen... aber: Man gibt einem Seil
und Haken gewohnten Bergsteiger keine gewagten Free-Climbing-Tipps - er
könnte sich damit nur all zu leicht unbedacht umbringen - auch wenn es beim
"End" nur um's "Umbringen" von störrischen Anwendungen geht.

> Denn auch
> ich kann nach 20 Jahren Programmierung (zur Zeit nur noch Hobby) etwas
dazulernen und
> ich nehme die HIlfe auch gerne an.

Mir geht es nicht anders...

Harald Stowasser

unread,
Jul 14, 2000, 3:00:00 AM7/14/00
to

Friedrich Weiner schrieb:

> Warum habe ich Sleep(xxxx) verwendet:
>
> Ursprünglich 'raste' mein Programm durch und eventuelle Fehlermeldungen konnten nicht
> gelesen werden. Danach versuchte ich über Msg-Boxen das Thema abzufangen. Die Kritik
> der Anwender war die, dass man zu oft den OK-Button drücken muss. Also verlängerte ich
> die Anzeige des Textes ... Seit dieser Zeit habe ich keine Beschwerden mehr gehört.

Dann hattest du Glück. Mir ist das nämlich passiert! Was hab ich
gesucht. Natürlich trat das problem nicht kontinuierlich auf, sondern
nur 1-2* in der Woche! Sleep ist eigentlich nur für sehr kurze
wartezeiten brauchbar oder in separaten Tasks die nicht auf Nachrichten
reagieren müssen.
Eine 'Bessere' Warteschleife währe z.b eine ähnliche konstruktion wie
diese:


Declare Function GetInputState Lib "user32" Alias "GetInputState" () As
Long

Dim KillMe as Boolean
Dim Running as Boolean

public sub Form1_Click()
dim Zeit as Single
Zeit=Timer
Running = True
do
If GetInputState() Then DoEvents
if Timer<Zeit then Zeit=Timer ' auf mitternacht aufpassen!
if KillMe=True then
Running =False
exit sub
end if
until Zeit+5<Timer
Running =False
End Sub

public Sub Form1_Unload(...)
' Handshake die schleife in Form1_Click
' beim beenden des Programms auch beendet!
do while Running = True
KillMe = True
doevents
loop
end sub


Hast du schonmal über ein 'Report'-fenster Nachgedacht?


> DoEvents habe ich in dem Fall deswegen gewählt, weil Me.Refresh oder ähnliches nicht
> das Problem auf dem KundenPC gelöst hat. Dort gab und gibt es Probleme mit dem
> Graphikkartendriver, der zu einem unschönen Bildaufbau führt.

DoEvents ist nicht grundsätzlich verkehrt. Oft auch Notwendig . Und ich
kenne die ganze Funktion deines Programmes auch gar nicht. Aber du
bekommst durch DoEvents auch sehr viele Probleme. Z.b. wenn jemand
währen dem Ablauf des Programmes auf das X clickt dann wird zwar die
Form geschlossen. Aber das Programm läuft weiter. Du hast dann eine
prima 'Speicherleiche'. Helfen würde dann nur noch ein Abwürgen mittels
End!
Beim Beispiel weiter oben wird diese Situation durch ein 'Handshake'
verhindert.

(Vorsicht auch bei DoEvents in SubClassing-Handlern.)

> Trotzdem bin ich für die Diskussion dankbar, gerade auch zum Thema 'End' ...Denn auch
> ich kann nach 20 Jahren Programmierung (zur Zeit nur noch Hobby) etwas dazulernen und
> ich nehme die HIlfe auch gerne an.

Hui. Dann programmierst du schon 4 Jahre länger als ich. ! RESPEKT ! Mit
welchem system hast du angefangen?
Ich hatte damals eine Spielkonsole die man mit einem 'simplen Basic'
erweitern konnte (Philips G7000) konnte ganze 100 befehls zeilen
aufnehmen. *lol* (danach dann ZX81 und C64)

P.S. Du solltest deine Zitate kürzen.
http://learn.to/quote

Ingo Moch

unread,
Jul 14, 2000, 3:00:00 AM7/14/00
to
Hallo,
Friedrich Weiner <friedric...@t-online.de> schrieb in im Newsbeitrag:
396EC93D...@t-online.de...

> Also ... Natürlich kann man meinen Code optimieren und dies sollte auch in
einer
> Newsgroup wie dieser geschehen. Über die Form kann man sich streiten. Eine
sachliche
> Antwort, wie sie z.B. von Harald M. Genauck schon öfters kam, findet
sicherlich auch
> viel Verständnis.
Zustimmung. Meine Antworten werden wohl zu 70% nochmal nachgebessert. Somit
lerne ich doch dazu. Damit ist das Grundprinzip einer NG in genialer Weise
erfuellt: Helfen lassen und Anderen helfen.

Ich habe bisher erst eine Frage in einer VB-NG gestellt, mein Wissen um VB
ist trotzdem Dank dieser Korrekturen um einiges gestiegen.

Nicht vergessen darf man, dass in einem schriftlichen Medium die
Gefuehlsausserungen durch Gesichtverziehen u.ae. fehlen. Dadurch kommt
manches haerter rueber, als es gemeint ist.

> Warum habe ich Sleep(xxxx) verwendet:
> Ursprünglich 'raste' mein Programm durch und eventuelle Fehlermeldungen
konnten nicht
> gelesen werden. Danach versuchte ich über Msg-Boxen das Thema abzufangen.
Die Kritik
> der Anwender war die, dass man zu oft den OK-Button drücken muss. Also
verlängerte ich
> die Anzeige des Textes ... Seit dieser Zeit habe ich keine Beschwerden
mehr gehört.

Du kannst Dir z.B. eine Form mit Label oder TextBox und OK-Button machen und
immer, wenn Du einen Hinweis o.ae. machen moechtest, zeigst Du die Form an
und schreibst den betreffenden Text in die TextBox. Wenn Du noch eine
Meldung anzeigen moechtest, laesst Du beide untereinander in der TextBox
anzeigen. Wenn der User OK klickt laesst Du die Form verschwinden.

Das ganze ist so aehnlich wie Haralds Loesung, die Meldungen, werden nur
sofort angezeigt. Somit kannst Du dem User die Moeglichkeit geben, die
Schleife abzubrechen, wenn er merkt "Upps, da passt was nicht. Da brauche
ich ja gar nicht erst weiter machen".

Du siehst: Ich verbessere/korregiere auch gerne ;-)

-----------
An Stefan
-----------
Es ist wieder typisch: (Halb-)Anonym (jaja, hab' die eMail-Adresse gesehen),
Fullquote, erstes Posting ... und gleich Langzeitnutzern/-helfern erklaeren,
wie die sich in dieser NG richtig verhalten.

Ganz toll.

Tschau
Ingo


Friedrich Weiner

unread,
Jul 14, 2000, 3:00:00 AM7/14/00
to
Hallo,

so wünsche ich mir die Newsgroup ... Die Idee von Harald ist gut. Ich habe sie in dem
Hauptprogramm eingesetzt und schreibe über einen globalen Errorhandler die Fehler in eine
datenbank weg. Dort kann sich der 'wissende' Anwender die Info's holen.

Hier in der speziellen Situation war es so, dass die Anwender ca. 60-75 Jahre alt sind, also
nicht mit PC aufgewachsen sind und vor jedem Mouseclick Angst haben. Daher wählte ich diese
Version.

zum Thema End: Ja ich kenne auch die ganzen Diskussionen auch wenn ich oft nur lesend dabei
bin. Meine anderen Programme beende ich mit 'unloads' aber in diesem speziellen Fall, wo ich
gerade ja vorher erst abfrage ob die File-Copy zu Ende ist, war's mir egal ...

btw ... ich habe mit einer UNIVAC und Fortran IV (1976) begonnen, danach auf einem Commodore
PET (1979) meine ersten BASIC Erfahrungen gemacht usw ...

Gruß
Friedrich

Harald Stowasser wrote:

> Friedrich Weiner schrieb:


>
> > Warum habe ich Sleep(xxxx) verwendet:
> >
> > Ursprünglich 'raste' mein Programm durch und eventuelle Fehlermeldungen konnten nicht
> > gelesen werden. Danach versuchte ich über Msg-Boxen das Thema abzufangen. Die Kritik
> > der Anwender war die, dass man zu oft den OK-Button drücken muss. Also verlängerte ich
> > die Anzeige des Textes ... Seit dieser Zeit habe ich keine Beschwerden mehr gehört.
>

> > DoEvents habe ich in dem Fall deswegen gewählt, weil Me.Refresh oder ähnliches nicht
> > das Problem auf dem KundenPC gelöst hat. Dort gab und gibt es Probleme mit dem
> > Graphikkartendriver, der zu einem unschönen Bildaufbau führt.

> DoEvents ist nicht grundsätzlich verkehrt. Oft auch Notwendig . Und ich
> kenne die ganze Funktion deines Programmes auch gar nicht. Aber du
> bekommst durch DoEvents auch sehr viele Probleme. Z.b. wenn jemand
> währen dem Ablauf des Programmes auf das X clickt dann wird zwar die
> Form geschlossen. Aber das Programm läuft weiter. Du hast dann eine
> prima 'Speicherleiche'. Helfen würde dann nur noch ein Abwürgen mittels
> End!
> Beim Beispiel weiter oben wird diese Situation durch ein 'Handshake'
> verhindert.
>
> (Vorsicht auch bei DoEvents in SubClassing-Handlern.)
>

> > Trotzdem bin ich für die Diskussion dankbar, gerade auch zum Thema 'End' ...Denn auch
> > ich kann nach 20 Jahren Programmierung (zur Zeit nur noch Hobby) etwas dazulernen und
> > ich nehme die HIlfe auch gerne an.

Folke Kieseler

unread,
Jul 14, 2000, 3:00:00 AM7/14/00
to

"Harald M. Genauck" <hmg...@aboutvb.de> schrieb im Newsbeitrag
news:ujqrBhX7$GA.75@cppssbbsa04...
>............Und wenn der Anwender

> dieses Protokoll dann vielleicht noch ausdrucken oder auf die Platte
> speichern kann - wäre das nicht sogar noch ein Extra-Service...?

Hallo,
das bringt mich auf die Idee mit der *.log Datei.
Dazu eröffne ich aber mal einen extra Thread.
Siehe dann oben weiter. :-))


Siegfried Keim

unread,
Jul 15, 2000, 3:00:00 AM7/15/00
to
Hallo Harald S.,

warum nennst Du Stefans Posting ein TOFU-Posting?
Nach Deiner Erläuterung enthält ein TOFU-Posting Fullquoting. Bei
Fullquoting muß - nach meiner Logik - aber die Antwort größer sein,
als das Beantwortete, da alles Beantwortete eine Untermenge der
Antwort ist. Aber Stefans Posting ist im Gegentum kleiner.

Außerdem hat er jede Menge Quoting gelöscht.

--
Sachdienliche Hinweise bitte nur posten.
Mit freundlichem Gruß, Siegfried Keim.
----------------------------------------


Harald Stowasser <h...@zitunidat.de> schrieb in im Newsbeitrag:

396EC59A...@zitunidat.de...
> [...]


>
> Ausserdem hast du ein sog. TOFU Posting abgesetzt (Text Oben Fullquote
> Unten).
>

> [...]

Ingo Moch

unread,
Jul 15, 2000, 3:00:00 AM7/15/00
to

Hallo Siegfried,
Siegfried Keim <Siegfri...@ruhr-uni-bochum.de> schrieb in im
Newsbeitrag: 8kovv2$66f$2...@sunu789.rz.ruhr-uni-bochum.de...

> Bei Fullquoting muß - nach meiner Logik - aber die
> Antwort größer sein, als das Beantwortete, da alles
> Beantwortete eine Untermenge der Antwort ist.
Da braeuchtest Du ja 'ne DIN oder ISO fuer ;-)

Du brauchst doch nur mal das Wort zu uebersetzen. Da kommt dann sowas wie
"Vollzitat" raus. Jetzt nur noch nachschauen, wofuer zitieren gut ist.

Kurz gefasst: "Zitate machst Du, wenn Du klarmachen moechtest, auf welchen
Teil des im Bezug stehenden Schreiben Du dich beziehst".

Was bringt es dem Leser, wenn Du 1:1 ein Schreiben zitierst, welches er
sowieso mit einem Mausklick vor sich hat?

Es ist reine Bequemlichkeit des Verfassers, die auf Kosten _aller_ Leser
geht (eine Person hat eine (unkonzentrierte) Sekunde gespart, dafuer geben
100 Personen eine (konzentrierte) Minute. Es koennte ja was dazwischen
stehen).

Eine NG lebt von einem ruecksichtsvollen Miteinander. Alles Zitierte, was
nicht zum Verstaendnis des Postings beitraegt, ist ueberfluessig. Der
entsprechende Poster (auf Wiederholungstaeter ;-) bezogen) ist egoistisch,
ruecksichtslos und beschert unnoetigen Traffic.

Tschau
Ingo


Siegfried Keim

unread,
Jul 16, 2000, 3:00:00 AM7/16/00
to
Hallo Ingo,

Du hast vollkommen recht, aber ich hatte kein Verständnisproblem mit
Fullquote oder Vollzitat.
Ich habe nur gesagt, daß Stefans Posting, an dem unsere hängen gar
kein Fullquoting enthält.

--
Sachdienliche Hinweise bitte nur posten.
Mit freundlichem Gruß, Siegfried Keim.
----------------------------------------


Ingo Moch <myjun...@gmx.de> schrieb in im Newsbeitrag:
#XSgsKl7$GA.276@cppssbbsa05...


>
> Hallo Siegfried,
> Siegfried Keim <Siegfri...@ruhr-uni-bochum.de> schrieb in im
> Newsbeitrag: 8kovv2$66f$2...@sunu789.rz.ruhr-uni-bochum.de...
> > Bei Fullquoting muß - nach meiner Logik - aber die
> > Antwort größer sein, als das Beantwortete, da alles
> > Beantwortete eine Untermenge der Antwort ist.
> Da braeuchtest Du ja 'ne DIN oder ISO fuer ;-)
>
> Du brauchst doch nur mal das Wort zu uebersetzen. Da kommt dann sowas wie
> "Vollzitat" raus. Jetzt nur noch nachschauen, wofuer zitieren gut ist.
>

> [...]

0 new messages