![]() |
formatierter progress string
hallo!
ich hab zwar eine lösung für das folgende problem, nur gefällt sie mir irgendwie nicht sonderlich. ich habe eine anzeige vom format "xxx/yyy" wobei ersterer der aktuelle stand ist und zweiterer der gesamtwert, soll heißen z.b. 10/200 nun will ich diesen eintrag laufend verändern, dass dann z.b. 20/200, 21/200 usw. steht. momentan würde ich den string einfach parsen und den eintrag vor dem "/" holen. denn fortschritt dazufügen und wieder neu schreiben. soweit so gut, es kann hier aber auch sein, dass z.b. 20KB/200KB steht. also muss ich zunächst obiges machen (also alles bis "/" holen) und dann den erhaltenen (teil-)string hernehmen und aus diesem den numerischen wert rausfiltern und die einheit merken. dann wert ändern und string wieder aufbauen. geht das nicht einfach und schöner? mir kommt das irgendwie ziemlich umständlich vor, aber geht das überhaupt einfach bzw. anders? :gruebel: stephan. |
Re: formatierter progress string
Ich würde das mit Format lösen.
Delphi-Quellcode:
Text := Format('%d/%d',[aktuell,total]);
|
Re: formatierter progress string
stimmt eigentlich, allerdings werde ich beim einlesen (d.h. um zu schauen, was jetzt drinnen steht um es zu verändern) des textes nicht um ein abparesen des strings herumkommen, außer ich speichere mir die werte global, was nicht unbedingt eine tolle lösung ist, alles global zu halten.
oder wie seht ihr das? |
Re: formatierter progress string
Wieso willst Du unbedingt einen String parsen? Wenn Du das machst wie in meinem Beispiel hast Du die benötigten Werte als Integer vorliegen und kannst diese auswerten.
|
Re: formatierter progress string
Wenn du dem String schon Werte zuweisen kannst, weißt du doch, wo er gerade von wieviel ist. Wozu noch parsen?
Ausserdem gibt es Klassenglobal und Totalglobal. :P Global in einer Klasse wäre z.B.
Delphi-Quellcode:
Global im Programm (bzw. in der Unit) wäre
type
TForm1 = class (TForm) {...} private MeineVariable: Integer; MeinString: String; MeinIrgendwas: Irgendwas; public {...} end; {...} implementation {...} procedure TForm1.Button1Click (Sender: TObject); begin MeineVariable := 1; {...} end;
Delphi-Quellcode:
Wobei erstere Variante zu bevorzugen wäre. Natürlich kannst du auch die Werte aus dem private nach public schieben, wenn du aus anderen Klassen darauf zugreifen möchtest.
type
TForm1 = class (TForm) {...} private {...} public {...} end; {...} var MeineVariable: Integer; MeinString: String; MeinIrgendwas: Irgendwas; implementation {...} procedure TForm1.Button1Click (Sender: TObject); begin MeineVariable := 1; {...} end; |
Re: formatierter progress string
Ihr immer mit Eurem ...
Zitat:
|
Re: formatierter progress string
ok überzeugt. :-D
aber zumindest beim ersten mal muss ich leider parsen, weil ich seitens des benutzers eine eingabe des maximalwertes zulassen muss, d.h. ich kann z.b. bekommen "1" (also nur zahlen, ein oder mehrstellig) oder "1MB" (also mit einheit, wobei zwischen der zahl und der einheit auch ein leerzeichen sein kann aber nicht muss). der erste schritt ist mir schon klar, da frag ich auf numerisch ab, mit trystrtoint (oder wie genau die heißt) aber für den rest muss ich zunächst solange parsen, bis ich kein numerisches zeichen mehr bekomme und dann den rest hernehmen und überprüfen, ob der keine numerischen zeichen mehr enthält. und die ergebnisse werden dann in den integer maxvalue und den string einheit gespeichert. |
Re: formatierter progress string
Zitat:
ComboBox für die Einheiten. Nur so eine Idee. Grüße Klaus |
Re: formatierter progress string
weil ich diesen wert als übergabeparameter einer funktion bekomme und ihn daher leider nur auf diesem wege bearbeiten kann.
wenn ichs von vornherein trennen könnte, wäre natürlich einfach, geht nur leider nicht. |
Re: formatierter progress string
Wenn du sicherstellen kannst, dass am Anfang eine Zahl steht und erst am Ende Buchstaben (also 1MB und nicht MB1 oder sowas), kannst du das ganz einfach in einer Schleife lösen: Erstes auftauchen eines Buchstabens feststellen und alles was dahinter ist löschen. "Parsen" brauchst du deswegen immernoch nicht.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:23 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