Avatar billede blueeye97 Nybegynder
24. juli 2004 - 18:14 Der er 8 kommentarer og
2 løsninger

Form fryser

Jeg har et lille prg. som kopierer en masse filer over på en server. Når der kopieres fryser formen helt og dukker først frem igen når kopieringen er afsluttet. Kan man ikke forhindre det ?
Jeg ville have en progressbar på formen men den vil jo forsvinde som resten af formen.
Avatar billede driis Nybegynder
24. juli 2004 - 18:20 #1
Løkken, der kopierer filerne, skal kalde DoEvents ved hvert gennemløb, evt. oftere. DoEvents giver eksekveringstid til andre ventende tråde, hvorved din Form gentegnes, etc.
Avatar billede blueeye97 Nybegynder
24. juli 2004 - 18:23 #2
Øhh... Er ikke helt med. Nedenstående er mit script. Hvordan gør jeg det til et "doevent" ?

Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")

FSO.CopyFolder "c:\" & org_mappe & "\*", mappe
FSO.CopyFile "c:\" & org_mappe & "\*", mappe
Avatar billede joern Nybegynder
24. juli 2004 - 19:02 #3
Hej.  Er det igen manglende angivelse af, at det er VBA og ikke VB?  M.v.h. Jørn
Avatar billede thesurfer Nybegynder
24. juli 2004 - 19:38 #4
Jeg går ud fra at du har en loop, som løber filerne igennem.. Du skal derfor bruge DoEvents:

for ...
  DoEvents
  'kopier-kode
next

eller med do/loop:

do ...
  DoEvents
  'kopier-kode
loop

- Jeg smider et svar, og håber på at det virker.
Ellers må du lige vise noget kode..
Avatar billede thesurfer Nybegynder
24. juli 2004 - 19:39 #5
Glem mit svar.. jeg læste lige driis' igen.. ordentligt denne gang :-)
Avatar billede driis Nybegynder
24. juli 2004 - 19:44 #6
blueeye97 >> Ved den måde du kopierer på, kopieres alle filerne på én gang, og det er sådan set godt nok. Problemet er at det tager noget tid at kopiere filerne, og imens kopieringen foregår, kan Windows ikke opdatere formen og andet. Løsningen er at kopiere én fil af gangen og kalde DoEvents mellem hver fil. Det kræver godt nok lidt mere kode, men det er din eneste mulighed for at undgå, at formen fryser.
Avatar billede blueeye97 Nybegynder
25. juli 2004 - 00:51 #7
Jørn > Det er VB

Du har ret, det vil være for omfattende. Det er backup-ting. Og filantallet ændres jo løbende så det ville være tåbeligt at begynde på. Jeg finder mig i den lille pause. :o)
Avatar billede jpvj Nybegynder
25. juli 2004 - 00:58 #8
Alternativt skal du oprette en tråd, der laver kopiereingen og lade dit "hovedprogram" tage sig af formen (incl. events og repaints).

Det virker.

Men jeg kan nu ikke se, hvordan du vil lave en progress bar ud af de to kommandoer som du viser...
Avatar billede thesurfer Nybegynder
25. juli 2004 - 16:16 #9
Det bedste (synes jeg) ville være, at loope igennem alle filerne.

Så kan du gøre sådan her:
dim AntalFiler as integer ' indeholder antallet af filer i mappen
dim AntalFilerKopieret as integer ' indeholder antallet af filer som er kopieret

- hent antallet af filer i mappen (variabel: "AntalFiler")
- opdater progressbar (0%)
- doevents
- start loop
--- kopier fil (tilføj 1 til variablen "AntalFilerKopieret")
--- opdater progressbar: 100 - (((AntalFiler - AntalFilerKopieret) * 100 ) / AntalFiler
- hop tilbage til "start loop"-område (sker automatisk)
- når alle filer er kopieret:
-- afslut loop
-- opdater progressbar (100%)

Det med antal procent.. formlen hedder:
100 procent, minus "forskellen mellem AntalFiler og AntalFilerKopieret gange 100, divideret med AntalFiler".

Eksempel:

AntalFiler i mappen er 8
AntalFilerKopieret er 2
Progressbar-værdien er 100 - (((8 - 2) * 100) / 8)) = 25%
Avatar billede thesurfer Nybegynder
25. juli 2004 - 16:18 #10
..eller også skal DoEvents være inde i selve loopen:

...
- start loop
- DoEvents
--- kopier fil...
...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester