Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi formatierter progress string (https://www.delphipraxis.net/94371-formatierter-progress-string.html)

stephan007 20. Jun 2007 15:45


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.

DeddyH 20. Jun 2007 15:50

Re: formatierter progress string
 
Ich würde das mit Format lösen.
Delphi-Quellcode:
Text := Format('%d/%d',[aktuell,total]);

stephan007 21. Jun 2007 07:36

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?

DeddyH 21. Jun 2007 07:57

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.

Nuclear-Ping 21. Jun 2007 08:47

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:
type
  TForm1 = class (TForm)
    {...}
  private
    MeineVariable: Integer;
    MeinString: String;
    MeinIrgendwas: Irgendwas;
  public
    {...}
  end;

{...}

implementation

{...}

procedure TForm1.Button1Click (Sender: TObject);
begin
  MeineVariable := 1;
  {...}
end;
Global im Programm (bzw. in der Unit) wäre
Delphi-Quellcode:
type
  TForm1 = class (TForm)
    {...}
  private
    {...}
  public
    {...}
  end;

{...}

var
  MeineVariable: Integer;
  MeinString: String;
  MeinIrgendwas: Irgendwas;

implementation

{...}

procedure TForm1.Button1Click (Sender: TObject);
begin
  MeineVariable := 1;
  {...}
end;
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.

alzaimar 21. Jun 2007 09:39

Re: formatierter progress string
 
Ihr immer mit Eurem ...
Zitat:

Zitat von stephan007
... was nicht unbedingt eine tolle lösung ist, alles global zu halten.

Besser als einen String zu parsen. Ob nun Global oder nicht, ist eh 'ne (globale :mrgreen:) Glaubensfrage.

stephan007 21. Jun 2007 15:38

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.

Klaus01 21. Jun 2007 15:46

Re: formatierter progress string
 
Zitat:

Zitat von stephan007
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).

Um das zu umgehen wieso nutzt Du nicht eine Editfeld für die Werte und eine
ComboBox für die Einheiten.
Nur so eine Idee.

Grüße
Klaus

stephan007 22. Jun 2007 09:10

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.

Nuclear-Ping 22. Jun 2007 17:25

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:54 Uhr.
Seite 1 von 2  1 2      

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