![]() |
Prozent ausrechnen und Wert zuweisen
Hallo ...
Der Titel mag sich ein wenig blöd anhören, aber das ist tatsächlich das Problem. Wie ich Prozent ausrechne weiss ich, aber wie geb ich einem bestimmten Prozent-Wert einen anderen Wert? Zur verdeutlichung: Ich erstelle ja nach Prozentzahl ein Directory.
Code:
Mein Problem liegt also an dem Statusbalken. Wie realisiere ich diesen? Ich möchte nicht für jede prozentzahl einen Statusbalken schreiben, sondern diesen selbst errechnen lassen.
0%
[##########] - 0% Complete - [AA] 50% [#####-----] - 50% Complete - [AA] 100% [AA] - ( 100% - COMPLETE ) - [AA] |
Re: Prozent ausrechnen und Wert zuweisen
Hai sharkx,
kannst Du dafür nicht einfach eine ProgressBar verwenden? Wenn Du dort Min auf 0 und Max auf 100 setzt wird diese ja Automatisch das anzeigen was Du möchtest. |
Re: Prozent ausrechnen und Wert zuweisen
hmm, ist aber eine Consolenanwenung und nen Progressbar kann ich als VCL auch nicht in ein Directory zaubern?! :/
|
Re: Prozent ausrechnen und Wert zuweisen
Ist die Units StrUtils vorhanden, oder soll es auch ohne sie geh'n?
|
Re: Prozent ausrechnen und Wert zuweisen
vorhanden ist sie nicht, aber geht mit :)
|
Re: Prozent ausrechnen und Wert zuweisen
Hi,
Delphi-Quellcode:
so in etwa?
function EyMannGibStatus(maxLength,anz:integer):string;
var i,i2:integer; begin result:='['; for i:=1 to anz do result:=result+'#'; for i2:=i to maxLength do result:=result+'-'; result:=result+']'; end; anzahlkreuze:=StatusBalkenEinheiten*prozent; Balken:=EyManGibStatus(StatusBalkenEinheiten,anzahlkreuze); |
Re: Prozent ausrechnen und Wert zuweisen
Delphi-Quellcode:
Function Status(Wert: Byte): String;
Var I: Integer; Begin If Wert >= 100 Then Result := '[AA] - ( 100% - COMPLETE ) - [AA]' Else Begin Result := '['; For I := 1 to 10 - (Wert div 10) do Result := Result + '#'; While I <= 10 do Begin Inc(I); {I := I + 1;} Result := Result + '-'; End; Result := Result + '] - ' + IntToStr(Wert) + '% Complete - [AA]'; End; End;
Delphi-Quellcode:
Uses StrUtils;
Function Status(Wert: Byte): String; Begin If Wert >= 100 Then Result := '[AA] - ( 100% - COMPLETE ) - [AA]' Else Result := '[' + DupeString('#', 10 - (Wert div 10)) + DupeString('-', Wert div 10) + '] - ' + IntToStr(Wert) + '% Complete - [AA]'; End; |
Re: Prozent ausrechnen und Wert zuweisen
Zitat:
Ein Directory (Ordner / Verzeichnis) ist eine logische Ordnungseinheit / -struktur auf einem Datenträger. Eine Progressbar ist im Sinne von Windows auch nur ein Fenster - in der Regel auf einem Hauptfenster plaziert. Könntest du mir mal unter diesen Vorraussetzungen die Bedeutung deines Satzes erklären? Ich verstehe ihn nämlich nicht. |
Re: Prozent ausrechnen und Wert zuweisen
Zitat:
|
Re: Prozent ausrechnen und Wert zuweisen
Danke Danke ...
ich hab mich für himitsu´s erste Lösung entschieden. |
Re: Prozent ausrechnen und Wert zuweisen
Huhu ..
Soweit so gut. funktioniert eigentlich auch, aber eines kommt mir spanisch vor. Ich hab eine sfv file gecheckt die insgesammt einen Inhalt von 95 Files hatte. Nach jeder gecheckten bzw CRC Ok File erhöhe ich den Wert FileOK um jeweils 1. Dieser Wert ist dann für mich die Grundlage um die Prozentzahl auszurechnen. Und dies wie folgt ...
Delphi-Quellcode:
function Status(Wert: integer; FileSize: int64): string;
var I: integer; begin if Wert = sfvfile.Count then Result := '[AA] - ( ' + IntToStr(sfvfile.Count) + 'F ' + IntToStr(FileSize div 1024 div 1024) + 'M - COMPLETE ) - [AA]' else begin Result := '['; for i := 0 to (((Wert * sfvfile.Count) div 100) div 10) - 1 do Result := Result + '#'; for i := (((Wert * sfvfile.Count) div 100) div 10) + 1 to 10 do Result := Result + '-'; Result := Result + '] - ' + IntToStr((Wert * sfvfile.Count) div 100) + '% Complete - [AA]'; end; end; // Hier wird gecheckt ob File CRC OK ist // Alten Statusdir löschen // Neuen erzeugen if DFCalcCRC32(UpperCase(dir + filen)) = UpperCase(CRC) then begin WriteLn('OK'); Inc(FileOK); FSize := FSize + GetFileSize(dir + filen); OldStatus := FindFirst(dir + '[*] - *% Complete - [**]', faDirectory, sr); if OldStatus = 0 then try RemoveDir(dir + sr.Name); repeat FindNext(sr); RemoveDir(dir + sr.Name); until FindNext(sr) <> 0; finally Findclose(sr); ForceDirectories(dir + Status(FileOK, FSize)); end; end Das Problem ist nun folgendes: Wenn ich mir die Prozentschritte bei dieser großen SFV File anschaue, dann liegt der Pro File bei etwa 2% Sprüngen, was schon eigentlich nicht sein könnte ( 95 * 2 != 100 ). Aber wenn er dann an der letzten File ist, steht der Prozentbalken bei 85% ( wie der darauf kommt weiß ich bis heute nicht) und springt dann wenn die letzte File fertig ist auf den 100% Balken. Ich hab auch die Proecdur schon neu geschrieben, da ich vieleicht dachte, ich hab nen fehler, finde den zwar nicht, aber wenn ich sie neu schreibe werd ich ihn sicher nicht 2 mal schreiben. Nix :-/ Danke |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz