AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Hilfe bei TMaskEdit

Ein Thema von Blamaster · begonnen am 19. Okt 2010 · letzter Beitrag vom 20. Okt 2010
Antwort Antwort
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#1

Hilfe bei TMaskEdit

  Alt 19. Okt 2010, 00:49
Delphi-Version: 7
Hi,

ich benötige etwas Hilfe beim TMaskEdit.

Der User soll die Möglichkeit haben einen Zeitwert in folgendem Format einzugeben:

00:00,000 (S:M:MS)

Meine Maske sieht momentan so aus: 00:00,000;1;0

Ich erhoffte mir daraus Usereingaben verhinder zu können da beim löschen von Zeichen automatisch wieder eine 0 gesetzt wird und so beim späteren umrechnen von String zu Integer keine Fehler auftreten.

Problem ist nur das wenn ich nun einfach lösche zwar überall zu jeder Zeit nullen stehen beim verlassen des Edit feldes allerdings der Fehler "" is not a valid integer value auftritt.

Jemand eine Idee was ich falsch machen ?

Mfg Blamaster
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Hilfe bei TMaskEdit

  Alt 19. Okt 2010, 07:36
Die letzte 0 in Deiner Edit-Maske gibt das dargestellte Zeichen für Leerstellen an. Das wird beim Auslesen des Wertes gegen ein Leerzeichen getauscht. In Deinem Fall kann die Null somit garnicht im übergebenen Wert auftauchen, da jede eingegebene NULL in ein Leerzeichen verwandelt wird.

Nimm eine Maske wie 00:00,000;1;o (kleines o oder halt ein Leerzeichen) und ersetze die Leerstellen vorm Umwandeln mit 0. Also
value := StringReplace(MaskEdit1.Text, ' ', '0', [rfReplaceAll]); .
Zusätzlich kannst Du einen Leerstring verhindern:
if value = 'then value := '00:00,000'; .
...oder anders ausgedrückt, wenn ich mich bei MaskEdit nicht irre, kann es Dir die Werte nicht 100% in dem von Dir gewünschen Format liefern. Aber vieleicht kennt da jemand einen Weg, Leerzeichen nicht nur als Null anzuzeigen, sondern auch im Wert zu setzen.

Dann noch was allgemeines, falls mit MS Millisekunden gemeint waren. 1000 Millisekunden sind eine Sekunde. Mit Deiner Maske kann ich somit keine Sekunden-Werte darstellen. Also schon bei einer Sekunde muss ich mich zw. 999 Millisekunden oder 1 Minute entscheiden.

Geändert von Satty67 (19. Okt 2010 um 07:46 Uhr)
  Mit Zitat antworten Zitat
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#3

AW: Hilfe bei TMaskEdit

  Alt 19. Okt 2010, 13:46
Hi,

danke für den Tipp. Dachte das geht mit dem MaskEdit direkt.

War gestern abend etwas müde. Das Fprmat ist nicht S:M:MS sondern M:S:MS.

Mfg Blamaster
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Hilfe bei TMaskEdit

  Alt 19. Okt 2010, 14:46
Was mir nur gerade auffällt, die NULL als Darstellungszeichen für Leerzeichen kannst Du ja lassen. Darf ja ruhig so aussehen, wie es nach StringReplace wird... das mit dem "o" war nur so eine Idee.
  Mit Zitat antworten Zitat
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#5

AW: Hilfe bei TMaskEdit

  Alt 19. Okt 2010, 16:06
Hi,

Problem ist doch noch nicht ganz gelöst.

Für das Problem mit den Leerzeichen habe ich noch eine andere Lösung gefunden. Mit .EditText lässt sich der sichtbare Edittext inklusive der Nullen als Platzhalter auslesen.

Nun gibt es aber noch ein anderes Problem. Wenn ich alle Edit Felder lösche und der Focus nicht mehr auf dem Edit liegt kommt eine Exception "Invalid Input Value" nur wieso ?

Mfg Blamaster
  Mit Zitat antworten Zitat
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#6

AW: Hilfe bei TMaskEdit

  Alt 20. Okt 2010, 12:30
Hmm,

das einfachste ist wohl im OnChange des Edit alle Leerzeichen durch Nullen zu ersetzen.

Delphi-Quellcode:
procedure TForm1.medtChange(Sender: TObject);
var
  i: integer;
  value: string;
begin
  value := medt1.Text;
  for i := 0 to length(value) do
    if value[i] = ' then value[i] := '0';
  medt1.Text := value;

  ShowMessage(medt1.Text);
end;
Das ganze funktioniert so leider nicht es werden keine leerzeichen durch 0´en ersetzt. Mit StringReplace tritt das gleiche Problem auf.

Jemand eine Idee was falsch ist ?
  Mit Zitat antworten Zitat
Blamaster

Registriert seit: 20. Jul 2007
230 Beiträge
 
#7

AW: Hilfe bei TMaskEdit

  Alt 20. Okt 2010, 13:16
Hab die Lösung gerade gefunden. Das Problem ist das wenn als Maske "0" gesetzt ist das Editfeld die Eingabe einer 0 immer als leerzeichen auffasst. Somit hat die obige Funktion nur leerzeichen durch leerzeichen ersetzt.

Abhilfe konnte ich schaffen indem ich das Maskenzeichen auf "_" gesetzt habe und im OnChange dann alle Leerzeichen sofort durch "0" ersetzen lasse. Somit bekommt keiner die "_" zu sehen.

Mfg Yannic
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:23 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