Avatar billede hand Nybegynder
17. november 2000 - 21:00 Der er 9 kommentarer

Installation med ProgressBar/Gauge

Jeg er ved at lave en installations program !

Men hvordan vil man bedst lave det med en Progress ?

jeg har gjort sådan:

For I:=0 to 100 do begin
Progress.Progress := I;
//Filer som den så installere
end,
Progress.Progress := 0;

Men så vidt jeg ved looper den det hele 100 gange. Er der ikke en anden måde at gøre det på eller er dette rigtigt ?
Avatar billede stone Forsker
17. november 2000 - 21:54 #1
procedure TForm1.Timer1Timer(Sender: TObject);
Var
I:integer;
Begin
timer1.Enabled := false;
for i := 1 to 100 do {går til slutning af progressbar, 50 vil gå til  midt på progressbar}
begin
  progressbar1.StepIt;
  Sleep(50);
label1.Caption:=\'Filerne er overført\';
end;
  end;
procedure TForm1.FormCreate(Sender: TObject);
begin
progressbar1.step := 1;
  progressbar1.max := 100;
  timer1.Interval := 1000;  {1000 svarer til 1 sekund}
  timer1.Enabled := true;
begin
  end;
  end;
end.
Avatar billede delphidaner Nybegynder
17. november 2000 - 21:55 #2
Den mest sofistikerede måde at gøre det på er nok at lave en ekstern datafil, hvori du samler filnavnene + indhold, og derefter laver ProgressBar\'en til at vise hvor langt den er med at behandle datafilen.

Dette er dog lidt besværligt at lave, da det kræver meget forarbejde med at konstruere den datafil.
Avatar billede hand Nybegynder
17. november 2000 - 22:42 #3
delphidaner ->

Jeg bruger en RES fil hvor jeg så bruger {$R files.RES} til at få den ind i EXE filen.
Og så bruger jeg koden nedenunder til at extracte filerne med.
ExtractRes(\'EXEFILE\',\'FilNavn\',\'c:\\FilNavn.exe\');

Jeg vil bare gerne havde et eks. som jeg kan bruge.

Altså...:

Bruger Gauge1, Button1, Label1;

Når jeg trykker på Button1 skal den så starte installationen hvor den så ligger filerne i C: drevet. Og Gauge1 skal så vise progressen for hvor langt den er og Label1 skal vise den fil som den er ved at ligge ind!

Det er så bare den optimale måde jeg gerne vil bruge. Men hvis jeg gør på min eller \"stone\'s\" måde kan man ikke bruge programmet før den er færdig med at installere.

Hvordan kan man det ?

Hvis du vil have flere point, så kan jeg da godt ligge nogle flere til.
Avatar billede hand Nybegynder
17. november 2000 - 22:47 #4
ligge :>
Avatar billede delphidaner Nybegynder
20. november 2000 - 09:42 #5
Den metode lyder smart, jeg havde ikke lige overvejet vedhæftelse af filer i EXE\'en.

Den metode du nævner antager jeg at den bare gemmer filen i den mappe du angiver. Hvis det er rigtigt, bliver du sandsynligvis nødt til at lave din egen metode og extracte filen manuelt, hvis du vil have en ProgressBar til at vise status.

Jeg har stort set ingen erfaring med vedhæftelse af ressourcer, så jeg kan ikke hjælpe dig med dette.
Avatar billede hand Nybegynder
20. november 2000 - 19:10 #6
Jeg kan godt selv finde ud af at vedhæfte ressourcer og extracte dem.

Det er bare hvordan man bruger en Gauge eller ProgressBar rigtigt !

Sådan her ville jeg gøre det :
var
I: Integer;
begin
For I:=0 to 100 do begin
Progress.Progress := I;
ExtractRes(\'EXEFILE\',\'FilNavn\',\'c:\\FilNavn.exe\');
end;
Progress.Progress := 0;
end;

Men det gør bare sådan at jeg ikke kan bruge programmet før det er færdig !

Har du en anden måde som man rigtigt kan gøre det på, eller er det den rigtige måde ???
Avatar billede hand Nybegynder
20. november 2000 - 19:16 #7
Er der er nogle andre som ved hvordan man gøre det så svar PLEASE!

I skal nok få lidt flere POINT !
Avatar billede slepee Nybegynder
04. december 2000 - 12:51 #8
Du kan jo gøre som i ovenstående eksempel, hvor du blot laver en Repeat løkke i stedet for, og så sætter du en Variabel Stop f.eks.
Altså:
var i: integer;
begin
  i:=0 {eller 1}
Repeat
  i:=i+1;
  Progress.Progress:=i;
  ExtractRes(\'EXEFILE\',\'FilNavn\',\'c:\\FilNavn.exe\');
end;
Progress.Progress := 0;
end;

Og så kan du jo bruge en Array af strings, til at definere filnavnene!
Avatar billede slepee Nybegynder
04. december 2000 - 12:55 #9
Undskyld! Min kode var ikke helt færdig! Her er den så, og husk at lave den globale BOOL-variabel Stop!
//-------------------
var i: integer;
begin
  i:=0 {eller 1}
Repeat
  i:=i+1;
  Progress.Progress:=i;
  ExtractRes(\'EXEFILE\',\'FilNavn\',\'c:\\FilNavn.exe\');
end;
Until Stop;
Progress.Progress := 0;
end;
;--------------------
Procedure CancelButton1.Click(Sender: TObjekt);
begin
Stop:=True;
end;
;--------------------
P.S: Jeg har ikke chekket min kode da jeg ikke har Delphi installeret lige i øjeblikket...Ret småfejl!
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