Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi im OnExit Event den String hinter dem Komma auffüllen auf 2 (https://www.delphipraxis.net/63497-im-onexit-event-den-string-hinter-dem-komma-auffuellen-auf-2-a.html)

juergen 19. Feb 2006 19:35


im OnExit Event den String hinter dem Komma auffüllen auf 2
 
Hallo zusammen,
ich möchte über das OnExit Event von einem Edit-Feld den eingegebenen Wert durch den Anwender ggf. "richtig stellen".
Ich suche eine Möglichkeit zu prüfen, ob hinter meinem TimeSeparator (kommt aus dem OnKeyPress-Event) ggf. auf 2 Stellen aufgefüllt werden muss.
Also aus 123:1 wird 123:10.
Zusätzlich muss auch der evtl. vergessene Timeseparator aufgefüllt werden...
Aus 123 wird dann 123:00.
Als "Auffüller" muss es immer eine Null oder halt 2 Nullen sein. (linksbündig auffüllen)
Somit müssen es nach dem OnExitEvent immer 2 Stellen hinter dem TimeSeparator sein...


Nun hab ich schon einiges probiert, aber noch nicht den richtigen Weg gefunden...

Kennt hier jemand eine Lösung?


Danke schon mal vorab!

marabu 19. Feb 2006 20:23

Re: im OnExit Event den String hinter dem Komma auffüllen au
 
Hallo Jürgen.

Die Lösung deines Problems ist nicht sonderlich schwer, wenn du verrätst, was 123:1 darstellen soll. Minuten führen ab 60, Stunden ab 24 zum Übertrag. Und von deiner Aufgabenstellung her würde ich 123:01 erwarten und nicht 123:10.

Grüße vom marabu

juergen 19. Feb 2006 20:37

Re: im OnExit Event den String hinter dem Komma auffüllen au
 
Hallo Marabu,
ich benötige es tatsächlich so wie ich es beschrieben habe.
In meinem Fall soll der Anwender Stundenwerte/Minutenwerte addieren oder
subtrahieren können, durchaus auch Werte größer 24 Stunden...
Gruß Jürgen

marabu 19. Feb 2006 21:45

Re: im OnExit Event den String hinter dem Komma auffüllen au
 
Hallo Jürgen,

hier ein wenig Code für dich - mach was draus:

Delphi-Quellcode:
function ParseStr(var s: string; delimiters: string; purge: boolean = true): string;
var
  i: integer;
begin
  i := 0;
  while (i < Length(s)) and (Pos(s[Succ(i)], delimiters) = 0) do
    Inc(i);
  Result := Copy(s, 1, i);
  Delete(s, 1, i + Ord(purge));
end;

function StrToMinutes(s: String): Cardinal;
begin
  Result := StrToInt(ParseStr(s, TimeSeparator)) * 60;
  if s <> '' then
    Result := Result + StrToInt(ParseStr(s, TimeSeparator));
end;

function MinutesToStr(minutes: Cardinal): String;
begin
  Result := Format('%d:%.2d', [minutes div 60, minutes mod 60]);
end;

procedure TDemoForm.EditExit(Sender: TObject);
begin
  with Sender as TEdit do
    Text := MinutesToStr(StrToMinutes(Text));
end;
Gute Nacht

marabu

juergen 19. Feb 2006 22:51

Re: im OnExit Event den String hinter dem Komma auffüllen au
 
Hallo marabu,
Respekt! :thumb: Funktioniert perfekt. - das hätte ich so nie hinbekommen... :(
Wieder eine sehr qualifizierte Antwort von dir!
Dafür könnte ich :kiss: , naja keine Angst, nur im übertragenem Sinne...

Mit deiner Lösung wird nun aus 123:1 dann 123:01, aber inzwischen denke ich, dass es so eigentlich besser ist.

Vielen Dank und Gute Nacht!


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:25 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