Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi wenn edit nicht dem format entspricht dann ... ?? (https://www.delphipraxis.net/65673-wenn-edit-nicht-dem-format-entspricht-dann.html)

delphineuling88 19. Mär 2006 21:04


wenn edit nicht dem format entspricht dann ... ??
 
ich will überprüfen ob edit dem hh:mm:ss format enspricht wenn das nicht so ist soll er ne nachricht zeigen
hab schon mal einen vorschlag nur was muss hinter das gleich?

Delphi-Quellcode:
else if (not(edit5.Text={was kommt hier rein?} ) then showmessage (' ')

mkinzler 19. Mär 2006 21:09

Re: wenn edit nicht dem format entspricht dann ... ??
 
Wenn die Eingabe ein festes Format haben soll, wäre es sinnvoll eine derartige Eingabe im Edit zu erzwingen. An sonsten bleibt dir nichts anderes übrig als den Eingabestring auf die ':' an Pos 3 und 6 zu überprüfen anschlißend zu zerlegen und einzeln die Wertebereiche zu validieren (Stunden zwischen 0 -12 /24; Minuten zwischen 0-60).

SirThornberry 19. Mär 2006 21:15

Re: wenn edit nicht dem format entspricht dann ... ??
 
ich muss mich da mkinzler anschließen. Mit so wenig Zeilen wird das nichts.
Du musst erst prüfen ob der eingegebene Text die richtige länge hat um deinem format zu entsprechen.
Anschließend noch prüfen ob die Doppelpunkte an den richtigen stellen sind.
Dann noch prüfen ob die restlichen zeichen Zahlen sind. Und dann noch prüfen ob die entsprechenden zeichen zusammengefügt keine zu große zahl ergeben.

delphineuling88 19. Mär 2006 21:19

Re: wenn edit nicht dem format entspricht dann ... ??
 
wie erzwinge ich denn eine feste eingabe in dem format?

mkinzler 19. Mär 2006 21:24

Re: wenn edit nicht dem format entspricht dann ... ??
 
Man sucht eine passende Edit-Komponente oder verwendet z.B. TJvMaskEdit (JediVCL) und setzt über die Eigenschaft EditMask das benötigte Format.

delphineuling88 19. Mär 2006 21:27

Re: wenn edit nicht dem format entspricht dann ... ??
 
was heißt eine passende edit komponente?
und den kram mit mask edit blick ich nicht durch hab noch nie was in der richtung gemacht

mkinzler 19. Mär 2006 21:36

Re: wenn edit nicht dem format entspricht dann ... ??
 
Es gibt spezielle Editkomponenten für speziell Inputformate (Datum, Dateinamen u.ä.)
EditMask ist eine Eigenschaft der oben genannten Komponente. Wenn du hierfür den wert '!90:00:00;1;_' setzt sieht der Edit so aus: __:__:__.

Es kann jetzt nur noch an den mit _ markierten Positionen Zahlen eingegeben werden.

delphineuling88 19. Mär 2006 21:51

Re: wenn edit nicht dem format entspricht dann ... ??
 
wo finde ich die komponente und wiekann ich das dann noch machen das ich halt nur 24 stunden und 60 sekunden und minuten eingeben kann also einen gültigen zeitwert?

Lannes 19. Mär 2006 22:31

Re: wenn edit nicht dem format entspricht dann ... ??
 
Hallo,

auf gültige Zeit und Format '00:00:00' prüfen:
Delphi-Quellcode:
var aTime: TDateTime;
Begin
if Length(Edit1.Text) = 8 then
  begin
    try
    ATime := StrToTime(Edit1.Text);
    except
    showmessage('Bitte gültige Zeit angeben');
    end;
  end
  else
    Showmessage('Bitte Zeit im Format "00:00:00" angeben');

delphineuling88 19. Mär 2006 23:10

Re: wenn edit nicht dem format entspricht dann ... ??
 
ok zu spät gesehen hab es jetzt anders gemacht mit drei edit feldern.
hätte ich deins früher gesehen hätte ich das wohl genommen aber finde meine jetzige lösung auch gut.

mquadrat 20. Mär 2006 08:32

Re: wenn edit nicht dem format entspricht dann ... ??
 
Alternativ kannste dir auch mal reguläre Ausdrücke anschauen. Das sollte das sein, was du suchst ;)

delphineuling88 20. Mär 2006 10:14

Re: wenn edit nicht dem format entspricht dann ... ??
 
was meinst du mit reguläre ausdrücke anschauen hast du da mal ein beispiel für mein problem z.b.?

mquadrat 20. Mär 2006 10:18

Re: wenn edit nicht dem format entspricht dann ... ??
 
Reguläre Ausdrücke dienen als Schablonen für Strings. Man kann damit also entweder nach Teilstrings mit bestimmten Format in einem größeren String suchen, oder eben prüfen ob ein bestimmter String ein bestimmtes Format hat.

Je nach Delphi-Version brauchst du eine extra Komponente, die dir die Arbeit mit den Ausdrücken abnimmt.

Beispiel für einen Ausdruck für die Uhrzeit ohne Sekunden (nicht selbstgeschrieben, es gibt ja Google):

Code:
^([0-1]\d|2[0-3]|\d):[0-5]\d$
Bis man die Dinger lesen kann, braucht es seine Zeit ;)


Ich denke mal, hier dürften recht viele Themen zu regulären Ausdrücken zu finden sein, einfach mal die Suchfunktion bemühen.

Nisbo 30. Mär 2006 14:46

Re: wenn edit nicht dem format entspricht dann ... ??
 
Hallo,

stehe gerade vor einem ähnlichen problem. die OH zu reg expr bei delphi ist ja sehr sehr spärlich, zumindest in version 5
ich möchte das ganze in Pos() benutzen

also ala

Delphi-Quellcode:
position  := Pos(ListBox2.items[ccc] + ' [([0-9]){2}]' + FormatDateTime('hh', time),Memo1.Lines.Text);
nur wie muß [([0-9]){2}] in delphi ausschauen damit es in Pos() funktioniert ?

an der stelle soll auf eine zweistellige zahl geprüft werden, das ganze ist der monatstag, aber das ist nicht so wichtig, mir kommt es nur darauf an das an dieser stelle eine zweistellige zahl steht

hat da jemand eine idee ?
nebenbei suche ich natürlich noch weiter bei google ;)

Hansa 30. Mär 2006 17:02

Re: wenn edit nicht dem format entspricht dann ... ??
 
Zitat:

Zitat von delphineuling88
ich will überprüfen ob edit dem hh:mm:ss format enspricht wenn das nicht so ist soll er ne nachricht zeigen ...[/delphi]

Also erst reagieren, wenn die Eingabe abgschlossen ist und sich letztenendes als falsch herausstellt ? Und den User zwingen, wieder von vorne anzufangen und dann andere Fehler zu machen ? Nene. Frage Murphy. :mrgreen: So was ist doch in Delphi narrensicher im OnKeyPress zu regeln.

Delphi-Quellcode:
// Edit muß leer/richtig vorbesetzt sein, z.B. OI-Einstellung nicht auf Edit1
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if key <> #8 then begin
    if length (Edit1.Text) < 8 then begin
// ACHTUNG : hier ist Tastendruck noch nicht verarbeitet für Text, obwohl
// Taste selber bereits verfügbar ! Deshalb "[2,5]" und "< 8" !!
      if length (Edit1.Text) in [2,5] then begin
        if not (key in[':']) then
          key := #0;
      end
      else begin
        if not (key in ['0'..'9']) then
          key := #0;
      end;
    end
    else
      key := #0;
  end;  
end;
Allerdings wäre damit auch als Zeiteingabe '99.99.99' möglich. Also muß das erste Zeichen noch auf 0..2 eingegrenzt werden, das 4. auf 0..5 usw.

Sharky 30. Mär 2006 17:06

Re: wenn edit nicht dem format entspricht dann ... ??
 
Hai ihr,

warum nehmt ihr für einen Zeiteingabe nicht einfach einen TDateTimePicker? Dann hat man keinen Stress mit eingabeprüfungen und hat auch immer das vom Anwender in Windows eingestellt Zeitformat.

OnKeyPress und Co ist dafür doch für die Füsse.


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