25. september 2007 - 15:50Der er
2 kommentarer og 1 løsning
talte poster rykker progressbar
Hej eksperter
Jeg er i mit program i gang med at lave en splashscreen som skal tælle alle mine poster i min database. men jeg ved ikke hvordan man gør lige akurat det. jeg har forsøgt mig frem men uden held.
procedure TForm2.FormCreate(Sender: TObject); begin progressbar1.Step:=1; progressbar1.Max:=100; timer1.Interval:=1000; timer1.Enabled:=true; end;
procedure TForm2.Timer1Timer(Sender: TObject); var I:integer; begin timer1.Enabled:=false; for i := 1 to 100 do begin progressbar1.Position:=1; statictext2.Caption:='Tæller Møder'; progressbar1.StepIt:=inttostr(adotable2.RecordCount); progressbar1.Position:=20; statictext2.Caption:='Tæller Opgaver'; progressbar1.StepIt:=inttostr(adotable3.RecordCount); progressbar1.Position:=40; statictext2.Caption:='Tæller Kunder'; progressbar1.StepIt:=inttostr(adotable5.RecordCount); progressbar1.Position:=60; statictext2.Caption:='Tæller Kontakter'; progressbar1.StepIt:=inttostr(adotable6.RecordCount); progressbar1.Position:=80; statictext2.Caption:='Åbner programmet'; progressbar1.StepIt; sleep(50); end; form1.show; close; end;
end.
Den vil ikke gøre det på denne måde. altså har jeg gjort noget helt forkert. Den skal fungere sådan at det den tæller af poster skal den rykke i progressbaren men det tror jeg nok forekommer i mit forsøg på at lave det. håber meget i kan hjælpe mig.
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Du mangler at sætte Max til summen af tabllernes RecordCount, men dem skal du glemme og i stedet køre det procentvis. Men umiddelbart giver konstruktionen alligevel ingen mening. Når du tager RecordCount fra en tabel sker det øjeblikkeligt og du ser ikke trinene. Der hvor pauserne er, er ved åbning af tabellerne:
Jeg forstiller mig en form med en TMemo og en TProgressBar:
type TfrmSplash = class(TForm) // Husk: FormStyle := fsStayOnTop; mStatus: TMemo; pbStatus: TProgressBar; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormDestroy(Sender: TObject); private function GetMax: integer; function GetPosition: integer; procedure SetMax(const Value: integer); procedure SetPosition(const Value: integer); public function Add(const aString: string): integer; overload; function Add(const aString: string; const aArgs: array of const): integer; overload; property Max: integer read GetMax write SetMax; property Position: integer read GetPosition write SetPosition; end;
var frmSplash: TfrmSplash;
implementation
function TfrmSplash.Add(const aString: string; const aArgs: array of const): integer; begin result := mStatus.Lines.Add(format(aString,aArgs)); Application.ProcessMessages; // Opdaterer skærmen end;
function TfrmSplash.Add(const aString: string): integer; begin result := Add(aString,[]); end;
procedure TfrmSplash.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end;
procedure TfrmSplash.FormDestroy(Sender: TObject); begin frmSplash := nil; end;
function TfrmSplash.GetMax: integer; begin result := pbStatus.Max; end;
function TfrmSplash.GetPosition: integer; begin result := pbStatus.Position; end;
For din egen skyld, giv dog dine objekter nogle fornuftige navne. Du løber alt for let sur i det og mister overblikket når du har ADOTable1, ADOTable2, ADOTable3, ... Et stykke tid væk fra programmet og du har ingen anelse om hvad de indeholder.
Synes godt om
Ny brugerNybegynder
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.