19. august 2008 - 15:27Der er
12 kommentarer og 1 løsning
Progressmeter i sit eget vindue
Er der nogen der ligger inde på et progressmeter som man kan includere og kalde så det vises i sit eget vindue der står fast i front?
Jeg kan forestille mig at der skal være min 3 procedurer der skal kaldes: 1 der opretter/viser baren med rigtige caption 1 der opdaterer progress til at vise aktuelle værdi 1 der fjerner baren igen
Jeg har rodet en del med det men kan ikke få noget fornuftigt ud af det synes jeg ikke.
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.
Der er da ikke de store problemer med det. Lav en form, smæk en TProgrssBar på. Lav den StayOnTop. Lav tre properties Min, Max, Progress (eller proceduren Increase(aStep: integer)) og du er kørende:
FormStyle := fsStayOnTop; Position := poOwnerFormCenter;
procedure TProgressForm.SetMin(Value: integer); begin ProgressBar.Min := Value; end;
procedure TProgressForm.SetMax(Value: integer); begin ProgressBar.Max := Value; end;
procedure TProgressForm.SetPosition(Value: integer); begin if ProgressBar.Position <= Value then begin ProgressBar.Position := Value; Application.ProcessMessages; end;
end;
function TProgressForm.GetMin: integer; begin result := ProgressBar.Min; end;
function TProgressForm.GetMax: integer; begin result := ProgressBar.Max; end;
function TProgressForm.GetPosition: integer; begin result := ProgressBar.Position; end;
procedure Increase(const aStep: integer); var i: integer; begin for i := ProgressBar.Position to ProgressBar.Position + aStep do SetPosition(i); end;
Hvis dette ikke virker for dig kan man lave det som en tråd og sende Messages til den - skal gerne prøve lave et eksempel. Bare ikke nu, for jeg skal hjem
Hvis du skulle få en ledig stund på et tidspunkt, så må du da meget gerne brygge et eksempel sammen. Jeg kender godt det der med at skulle hjem - jeg er ved at lave nyt badeværelse, så lillemor synes også at arbejdet tager for meget af min fritid :-)
Jeg har lidt her som du måske kan bruge. Der er en status-form som du kan få frem vha. ShowStatus, fjerne igen med HideStatus og justere vha. SetPosition.
Kan godt poste det hele her, men det fylder meget at skulle poste testprogram, unit, dfm-filer så hvis du hellere vil have en zip-fil må jeg have en email.
Glemte at lagre filen et sted hvor jeg kunne sende den fra arbejdedet. Sender i eftermiddag. Den flyvske idé med en tråd er ikke relevant; det var et vildskud. Den tunge behandlingsdel burde trådes, ikke statusvisningensformen.
Eksempelvis har jeg en billedklasse, der nedarver fra TImage, som bruger sin egen tråd til at hente billedet fra tabellen. Når formen åbnes, hentes ID på billederne frem, billedobjekterne oprettes. Samtidig med de fyldes i et TScrollPanel startes hente-trådene. Fra et nørdet synspunkt ser det ret godt ud når billederne popper op. En variant af dette: Når tråden har hentet billedet, sender den besked til næste billede i rækken om at aktivere sin tråd. Det ser lidt pænere ud at billederne dukker op i rækkefølge, det tager bare lidt længere tid.
Nu er du ude i noget der lyder meget 'nørdet' i mine ører :-)
Jeg er kun databaseprogrammør så alle de der fancy ting overlader jeg til dem der er eksperter i det - så kommer jeg ikke galt af sted.
Det jeg er igang med er et program der læser nogle records fra en masse Paradox filer og smider dem op på en MySQL server. (nogle records er måske en underdrivelse - der er >4.000.000 i alt)
Det er i øjeblikket > 500 filer af 11 forskellige typer og hver type kan være forskellig i antal felter så jeg har lavet et program der lister filerne en efter en og overfører dem - jeg bruger MyDAC komponenten som jeg har indkøbt til formålet. Det er meningen at konverteringen skal køre 'unattended' 1 gang hver weekend så det skal være rimeligt foolproof :-)
Lige nu strugler jeg med at finde en eller anden måde at få udført nogle ting under initialisering. Jeg skal have checket om forbindelsen til Paradoxfilerne er OK og om forbindelsen til MySQL er OK. Al min kode ligger i hovedformularen og der kan jeg ikke finde ud af at køre noget kode inden formen vises. Men som jeg vist har nævnt så er Delphi ikke mit hovedsprog :-)
if PDoxCount > 500 then begin DataPump := false Gnarrl(true); end else begin if Option_1 then begin DataPumpAll; CopyPDOX_In_MySQL_To_NewMySQL_Database; end else if Option_2 then for i = 0 to PdoxTableCount - 1 do LotOfBesvær := ExplicitTableCopy(PDoxTables[i]) = LotOfWork; end;
procedure ShowStatus(aOwner: TComponent; const aMinValue, aMaxValue, aPosition: integer); begin if assigned(frmStatus) then begin frmStatus.MinValue := aMinValue; frmStatus.MaxValue := aMaxValue; frmStatus.Position := aPosition; end else frmStatus := TfrmStatus.Create(aOwner, aMinValue, aMaxValue, aPosition);
frmStatus.Show; end;
procedure HideStatus; begin if assigned(frmStatus) then frmStatus.Close; end;
procedure SetPosition(const aValue: integer); begin if assigned(frmStatus) then begin frmStatus.Position := aValue; Application.ProcessMessages; end; end;
procedure TfrmStatus.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end;
procedure TfrmStatus.FormDestroy(Sender: TObject); begin frmStatus := nil; end;
function TfrmStatus.GetValue(const Index: Integer): integer; begin case Index of 0: result := pbStatus.Position; 1: result := pbStatus.Min; 2: result := pbStatus.Max; end; end;
procedure TfrmStatus.SetValue(const Index, Value: integer); begin case Index of 0: pbStatus.Position := Value; 1: pbStatus.Min := Value; 2: pbStatus.Max := Value; end; end;
procedure TfrmStatus.Step(const aSteps: integer); begin pbStatus.StepBy(aSteps); end;
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.