![]() |
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... |
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; |
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:
Sowie ich ein Zeichen eingeben, kommt eine Exception...
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 ... Kannst du erkennen, wo hier das Problem ist? Gruß Jürgen |
Re: NACH einem bestimmten Zeichen im Edit über OnKeyPress re
Hallo,
mit strtoint(liTSPos) versuchst Du den ':' in einen Integer umzuwandeln.
Delphi-Quellcode:
Versuch es mal damit:
HighMinute:= pos(':',string1);
liTSPos:= string1[HighMinute];//liTSPos enthält jetzt ':' if strtoint(liTSPos)> 5 then begin
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; |
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 |
Re: NACH einem bestimmten Zeichen im Edit über OnKeyPress re
Hallo Jürgen,
teste mal so:
|
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 |
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 |
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