Avatar billede razmataz Nybegynder
13. november 2005 - 12:56 Der er 14 kommentarer og
1 løsning

Hvorfor stepper min progressbar ikke?

Jeg har en form med en progressbar på, men den viser ikke når den stepper, i stedet "hænger" min form bare indtil den har steppet færdig og viser slut resultatet..
Min kode er :

        Label1.Caption := 'Scanner ' + rose.Form1.DBEdit1.Text + ' poster i databasen';
        Application.ProcessMessages;
        rose.Form1.ADOQuery1.First;
        Progressbar1.Max := StrToInt(rose.Form1.DBEdit1.Text);
        Progressbar1.Step := Progressbar1.Max div 10;
        while not rose.Form1.ADOQuery1.Eof do
        begin
        Progressbar1.StepIt;
        rose.Form1.ADOQuery1.Next;
        end;

Nogen let løsning på problemet?
Avatar billede stoney Nybegynder
13. november 2005 - 13:44 #1
Label1.Caption := 'Scanner ' + rose.Form1.DBEdit1.Text + ' poster i databasen';
       
        rose.Form1.ADOQuery1.First;
        Progressbar1.Max := StrToInt(rose.Form1.DBEdit1.Text);
        Progressbar1.Step := Progressbar1.Max div 10;
        while not rose.Form1.ADOQuery1.Eof do
        begin
        Progressbar1.StepIt;
Application.ProcessMessages;
        rose.Form1.ADOQuery1.Next;
        end;

Ikke testet

Stoney
Avatar billede razmataz Nybegynder
13. november 2005 - 15:34 #2
har ingen effekt
Avatar billede razmataz Nybegynder
13. november 2005 - 21:35 #3
Er det muligt at skrive koden til det hvis det skal laves som en thread i stedet? Altså her på eksperten.
Avatar billede softtail Nybegynder
13. november 2005 - 22:04 #4
Har du prøvet at skrive

Progressbar1.StepIt
Refresh;

Kommandoen Refresh skulle gerne gennemtvinge en opdatering af formen. Ellers har du ret i at tråde er den rigtige vej, at gå. Det vil også give brugeren mulighed for at afbryde din proces...

Hvad mener du i øvrigt med linjen
Progressbar1.Step := Progressbar1.Max div 10;

Umiddelbart ser det ud til at du vil fastholde den samme position i progressbar hele tiden, da Progressbar1.Max er en statisk værdi...
Avatar billede razmataz Nybegynder
13. november 2005 - 22:08 #5
Den linje betyder at den mængde som step kommandoen skal springe er en tiende del af det fastsatte max af progressbaren.
Avatar billede razmataz Nybegynder
13. november 2005 - 22:09 #6
refresh har heller ingen effekt.
Avatar billede razmataz Nybegynder
13. november 2005 - 22:09 #7
Problemet er at jeg simpelthen ikke kan huske hvordan man leger med tråde, det er 6 år siden jeg sidst har pillet med delphi, så... et eksempel ville være nice til at friske mig op.
Avatar billede softtail Nybegynder
13. november 2005 - 22:17 #8
Med hensyn til Refresh; så kan det godt genere, hvis du kører programmet fra Delphi og har indsat breakpoints m.m.

Jeg har ikke adgang til Delphi lige nu, men med hensyn til tråde, så kan jeg huske, at man skal vælge en Thread unit under Files|New og derefter benytte en wizard. Det giver det nemmeste resultat ;-)

Jeg kan ikke huske fremgangsmåden på stående fod, men man skal have tungen lige i munden, når man programmerer med tråde!
Avatar billede razmataz Nybegynder
13. november 2005 - 22:26 #9
Jow tak .. så meget kan jeg huske :)
Avatar billede razmataz Nybegynder
13. november 2005 - 22:27 #10
Du mener altså at refresh godt kan virke hvis jeg kører programmet uden om delphi efter compile?
Avatar billede vallemanden Nybegynder
14. november 2005 - 08:49 #11
Progressbar1.Position:=Progressbar1.position+1;
Progressbar1.refresh;
Avatar billede lsc Nybegynder
14. november 2005 - 13:42 #12
Prøv at indsætte
  showmessage(inttostr(Progressbar1.Max));
inden du kører while-løkken. Måske måske får du bare udskrevet et 0.

  Application.ProcessMessages;
Skal under alle omstændigheder være inde i while-løkken.
Avatar billede razmataz Nybegynder
14. november 2005 - 13:52 #13
Jeg har skam checket at progressbar'en har de data den skal bruge, det er ikke der fejlen ligger, hele min application hænger mens den kører min lykke. Men jeg kan ikke teste det lige nu, er ikke ved min delphi computer. Vallemanden, hvad er det du har skrevet?? Med den kode du har skrevet, hvordan vil du så bruge den samme progressbar funktion til at scanne 10 poster som til at scanne 8731?
Avatar billede razmataz Nybegynder
20. november 2005 - 17:33 #14
Hmm... lukker igen, der er vidst ikke noget svar jeg kan bruge :(
Avatar billede kroning Nybegynder
20. november 2005 - 22:44 #15
Hvis du bruger Application.ProcessMessages; på det rigtige sted så vil din app. ikke hænge, men det bedste løsning ville være at bruge en tråd, om du skal bruge en tråd eller Application.ProcessMessages; kommer nok an på hvor længe din while-lykke tager, hvis det kun er nogle sekunder kan Application.ProcessMessages; fint bruges men hvis det er flere minutter er en tråd løsningen.
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