Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi NACH einem bestimmten Zeichen im Edit über OnKeyPress reagie (https://www.delphipraxis.net/64537-nach-einem-bestimmten-zeichen-im-edit-ueber-onkeypress-reagie.html)

juergen 4. Mär 2006 22:05


NACH einem bestimmten Zeichen im Edit über OnKeyPress reagie
 
Hallo zusammen,
ich habe nun schon einiges gesucht, aber nicht das richtige gefunden... :oops:

Ich möchte in einem Editfeld NACH einem #58 (Doppelpunkt) prüfen, ob dann
die nächste eingegebene Zahl > 5 ist. (im OnKeyPress Event)
Jetzt habe schon schon einiges gesucht, aber das richtige noch nicht gefunden.


Ich schätze ich muss irgendetwas mit Selstart und Length machen, nur wie?

Kann mir hier jemand helfen?

In meiner 2005er PE Version vermisse ich da als Anfänger Beispiele.
Ich meine in DP 5 mal gesehen zu haben, dass dort in der Hilfe auch Beispiel mit dabei waren...

Nikolas 4. Mär 2006 22:28

Re: NACH einem bestimmten Zeichen im Edit über OnKeyPress re
 
Finde per Pos oder Posex den Doppelpunkt, lese das nächste Zeichen aus und überprüfe es dann auf die Größe;

also grob

Delphi-Quellcode:
str:= edit1.text;
n:= pos(':',str);
if n>-1 do // Überprüfung, ob überhaupt ein Doppelpunkt vorliegt
 begin
 s:= str[n];
 if strttoint(s)>5 then
  bla;
 else
  bla2;
 end;

juergen 4. Mär 2006 23:31

Re: NACH einem bestimmten Zeichen im Edit über OnKeyPress re
 
Hallo Toxman,
erst einmal danke für deine Hilfe.
Leider bekomme ich es nicht hin. :oops:
Ich habe mal folgendes probiert: (den Doppelpunkt brauch ich nicht prüfen, der ist garantiert vorhanden)
Delphi-Quellcode:
var
string1, liTSPos : String;
HighMinute     : Integer;
begin
    string1:= InputA.text;
    HighMinute:= pos(':',string1);
    liTSPos:= string1[HighMinute];
     if strtoint(liTSPos)> 5 then begin
      if not (key in [#8,#13,#48..#53]) then key:=#0 ;
     end
     else
     ...
Sowie ich ein Zeichen eingeben, kommt eine Exception...

Kannst du erkennen, wo hier das Problem ist?


Gruß Jürgen

Lannes 4. Mär 2006 23:51

Re: NACH einem bestimmten Zeichen im Edit über OnKeyPress re
 
Hallo,
mit strtoint(liTSPos) versuchst Du den ':' in einen Integer umzuwandeln.
Delphi-Quellcode:
   HighMinute:= pos(':',string1);
   liTSPos:= string1[HighMinute];//liTSPos enthält jetzt ':'
   if strtoint(liTSPos)> 5 then begin
Versuch es mal damit:
Delphi-Quellcode:
var s : String;
begin
  s := Edit1.Text;
  if (Length(s) > 0) and
     (s[Edit1.Selstart] = ':') and
     (not (key in [#8,#13,#54..#57])) then
      key := #0;

juergen 5. Mär 2006 00:00

Re: NACH einem bestimmten Zeichen im Edit über OnKeyPress re
 
So, ich habs... :-D :bounce1:
Folgendermaßen habe ich es nun gelöst:

Delphi-Quellcode:
if (InputA.SelLength = 0) then begin
    lsText := InputA.Text;
    liTSPos := Pos(#58, lsText);
    if (liTSPos > 0) and (InputA.SelStart = liTSPos) and (Length(lsText) - liTSPos >= 1)
    then begin
        if not (key in [#8,#13,#48..#53]) then key:=#0 ;
      Beep;
  end; // (InputA.SelLength = 0)
  end
else

//Edit
Hallo Lannes,
Das funktioniert auch. (wobei ich noch nicht weiß, WARUM das funktioniert. Muss ich mir unbedingt anschauen)
Das nehme ich jetzt auch. :-D
vielen Dank und gute Nacht!

Grüsse Jürgen

marabu 5. Mär 2006 07:14

Re: NACH einem bestimmten Zeichen im Edit über OnKeyPress re
 
Hallo Jürgen,

teste mal so:
  • versuche die 5 mit der Entf-Taste zu löschen.
  • kopiere die 9 in die Zwischenablage und füge sie vor der 5 wieder ein.
Grüße vom marabu

juergen 5. Mär 2006 13:32

Re: NACH einem bestimmten Zeichen im Edit über OnKeyPress re
 
Hallo Marabu,
jupp, das geht natürlich.
Muss man sowas abfangen, ich meine verhindern?
Ich habe ja noch das OnExit Ereignis, (auch von dir) wo dann z.B. aus 12:9
beim verlassen des Edits 12:09 wird. Aus 12:99 wird dann eben 13:39. Aus 2:5 wird nun doch 12:50 ;-)
Ich meine, der Anwendner sieht ja den Wert mit welchem dann gerechnet wird.
Über den üblichen Weg über Tastatur kann der Anwender nur richtige Werte eingeben, fügt er allerdings
"verbotenerweise" aus der Zwischenablage etwas ein, nun gut, er sieht dann den Wert der dabei raus kommt.
Eine Falschrechnung bzw. sogar Exception kann von meiner Seite aus nicht entstehen.
Über die Kombination des OnKeyPress- und anschließend über das OnExit-Event erreiche ich aus meiner Sicht das "optimale" Ergebnis.

Das ist MEIN Gedankengut dazu. Ob das für den Anwender so richtig ist weiß ich auch nicht so genau...

Gruß Jürgen

marabu 5. Mär 2006 13:55

Re: NACH einem bestimmten Zeichen im Edit über OnKeyPress re
 
Hallo Jürgen,

wenn dir in D2K5 die Komponente TDateTimePicker zur Verfügung steht, dann ziehe die mal auf eine Form, setze Format auf HH:mm und Kind auf dtkTime und schreibe mal wie dir das gefällt.

marabu

juergen 5. Mär 2006 14:34

Re: NACH einem bestimmten Zeichen im Edit über OnKeyPress re
 
Hallo Marabu,
nicht schlecht!!!
Interessant wäre hier für mich "nur" noch 1 Sache:
1) kein Einfügen möglich (für mich eher vernachlässigbar)
2) Cursor springt je nach eingegebener Zahl direkt eine Stelle weiter. Das gefällt.
Aber:
Nach soviel Mühen möchte ich nun aber unbedingt bei dem angepaßten Edit bleiben. :zwinker:
zu 1) werde ich verzichten.
zu 2) das wäre noch eine Herausforderung für mich das anzupassen. :)
Je nach eingegebener Zahl einfach eine Stelle weiter zu springen. Werd' ich wohl auch machen.

In meiner Anwendung kann man für die Stundenwerte x-beliebige Anzahl an Stellen eingeben.(z.B. 9999:56)
Das scheint mit dem DateTimePicker nicht zu gehen.

Auf jeden Fall weiß ich nun für die Zukunft, dass man bei reinen 24 Stundenformat sich unbedingt den DateTiemePicker näher ansehen sollte.

Danke dazu!

Gruß Jürgen


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