Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   TProgressBar.Max > 4 GB? (https://www.delphipraxis.net/192032-tprogressbar-max-4-gb.html)

hoika 15. Mär 2017 08:31

TProgressBar.Max > 4 GB?
 
Hallo,
ich möchte in einem ProgressBar die verfügbare Anzahl an Bytes einer CD/DVD anzeigen.
CD -> ~700MB OK
DVD -> 4.7 GB -> > Int32

Gibt es da einen Trick, dem ProgressBar mehr als Int32 zuzuweisen?


Dass ich das per Code ändern kann, ist klar, will ich aber nicht unbedingt ;)

Neutral General 15. Mär 2017 08:32

AW: TProgressBar.Max > 4 GB?
 
1 Step = 1KB,
schon hast du Platz für 4TB

hoika 15. Mär 2017 08:51

AW: TProgressBar.Max > 4 GB?
 
Hallo,
das ist klar, wobei Step ja hier falsch ist,
weil ich nicht den Fortschritt, sondern das Max > 4 GB brauche.

Neutral General 15. Mär 2017 08:59

AW: TProgressBar.Max > 4 GB?
 
Jo, aber wenn du nicht jedes einzelne Byte anzeigst, sondern die größe auf KB-Basis, dann hast du kein Problem mehr

t.roller 15. Mär 2017 09:04

AW: TProgressBar.Max > 4 GB?
 
Delphi-Quellcode:
var
  Dr : Integer;
begin
  Dr:= 3;
  ProgressBar1.Max:= DiskSize(Dr)div 1000;
  ProgressBar1.Position:= (DiskSize(Dr)-DiskFree(Dr))div 1000;
...
// Alternative: ist schöner und praktischer
  Gauge1.Progress:= (System.SysUtils.DiskFree(Dr)*100) div DiskSize(Dr);
  Application.ProcessMessages;
  Label1.Caption:= INTTOSTR(Gauge1.Progress)+' % free';// auf Gauge1

Daniel 15. Mär 2017 09:05

AW: TProgressBar.Max > 4 GB?
 
Rechne es doch intern auf Prozent - oder wenn Du es genauer willst - auf Promille herunter.
Dann bekommt der ProgressBar lediglich einen Wert zwischen 0 und 100 (bzw. 1000).

//edit: Am Ende muss doch der ProgressBar eh auf einen Pixel runden. Das kannst Du auch vorher machen und Dir die großen Zahlen sparen.

nahpets 15. Mär 2017 09:35

AW: TProgressBar.Max > 4 GB?
 
Sagen wir mal so:

Angenommen, die ProgressBar sei 4096 Pixel Breit, wieviele unterschiedliche Werte kann man dann anzeigen lassen?

Genau 4096.

Die 4 TB müssen also zwangsläufig auf diese 4096 Werte runtergebrochen werden, entweder von Dir oder von der Progressbar.

Letztlich muss bei der Anzeige von 4 TB für eine kontinuierliche Darstellung eine Berechnung durchgeführt werden, die die Zwischenwerte zwischen dem Minimalwert und dem Maximalwert gleichmäßig auf die Breite der Progressbar verteilt.

Ein Problem mit Int32 bekommst Du erst, wenn die Breite der Progressbar größer Int32 ist.

a.def 15. Mär 2017 11:01

AW: TProgressBar.Max > 4 GB?
 
Zitat:

Rechne es doch intern auf Prozent - oder wenn Du es genauer willst - auf Promille herunter.
Dann bekommt der ProgressBar lediglich einen Wert zwischen 0 und 100 (bzw. 1000).
Ich bin zwar kein Profi, aber so handhabe ich es auch.

Das ist wesentlich angenehmer als sich einen rauchenden Kopf über Bytes und irgendein Maximum zu machen.
Eine Einteilung von 0 bis 100 oder wie Daniel sagte 1000, reicht vollkommen und ist genau genug.
Als Hint oder woanders in der GUI kann man ja trotzdem die Bytes ausgeben statt die Prozent.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz