![]() |
in edit maximal 1 KOMMA zulassen
Moin Leutz :hello:
Also ich hab mal wieder n kleines Problemchen... Ich will, dass in bestimmte Edit-Fenster in meinem Programm nur maximal 1 Komma stehen darf, also, dass man es praktisch auch nur 1 mal eingeben kann. Die 2. Lösung wäre, dass wenn es ein zweites mal steht, eine Showmessage angezeigt wird, dass ein Komma zu viel ist.
Code:
Kann man das vielleicht über solch eine Procedure machen?
procedure TForm7.Edit13KeyPress(Sender: TObject; var Key: Char);
begin if not (key in [#8, #9,#44, #48 .. #57]) then key:=#0; end; {Hier wird das Komma im Editfenster erlaubt... müsste #44 sein, jedoch will ich ja, dass es nur 1 mal erlaubt ist, damit eine eingabe wie 1,2,3,... nicht geht.} thx 4 reply so long Euer HappyTreeFriend |
Hallo und herzlich Willkommen im Forum!
Ist zwar jetzt evtl. nicht die schönste Lösung, aber ein Gedankengang wert. :mrgreen: Also, Du hast ja schon die Prozedur damit die Kommata-Taste schonmal erlaubt ist. Zudem machst Du Dir eine globale Variable vom Typ Boolean. Die ist bei Programmstart erstmal False. Jetzt gibst Du also Deine sachen im Edit ein, im OnChange des Edits, überprüfst Du wann und ob das , gedrückt wurde, in dem Augenblick, setzt Du die Boolean-Variable auf True. Jetzt muss Du bei jedem weiteren Tastendruck prüfen welche Taste es ist, zudem schaust Du noch ob die Variable schon True ist, wenn das der Fall ist und , wurde gedrückt, so schreibst Du "Key := #0;" somit ist das , wirkungslos und sollte nicht/nie mehr im Edit auftauchen, ob Du jetzt auch noch eine Message bringst, ist dann Deine Entscheidung, mich würde es stören. Es gibt "warscheinlich" eine Hilfe zu dem Programm und da kann man durchaus schrieben das im Edit nur ein Kommata erlaubt ist, somit könnte man sich die Message sparen. Zudem könntest Du zu dem Edit noch ein Hint machen mit dem Hinweis das nur ein Kommata erlaubt ist. Grüsse, Daniel :hi: |
Hm... also ich hab versucht, das so zu machen, wie du das sagst, aber irgendwie bekomm ich das ned so ganz hin. wäre vielleicht hilfreich, wenn du mir nen kleinen quelltext schicken könntest. :oops:
|
Hallo,
hier mal was zusammengeklickt.
Delphi-Quellcode:
So ungefähr könnte das aussehen. Es ist nicht fertig, aber den Rest müsstest Du auch alleine hinbekommen. Da gehören noch 1-2 Abfragen rein. Aber im groben sollte es das tun.
var
Form1: TForm1; MyVar: Boolean; implementation {$R *.dfm} procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); var iTemp: Integer; begin if not (Key in [#48..#57, #8, #44]) then Key := #0; for iTemp := 0 to Length(Edit1.Text) do begin if Edit1.Text[iTemp] = #44 then begin MyVar := True; end; //if end; //for iTemp if MyVar and (Key = #44) then begin Key := #0; ShowMessage('Blupp'); end; //if end; Grüsse, Daniel :hi: |
Danke. Werd das mal einbauen... denke, dass das so funzt.
:bouncing4: :bounce1: :bounce2: ENDLICH GEHTS WEITER :bounce2: :bounce1: :bouncing4: |
Ginge da eigentlich nicht auch, dass man im OnChange mit Pos() prüft, ob ein Komma schon vorhanden ist?
|
Hallo,
Zitat:
Aber hier direkt reinhacken und nicht testen! Grüsse, Daniel :hi: |
Code:
P.S.: nicht getestet !
if pos (DecimalSeparator,text) <> 0 then begin // Komma überhaupt da ??
then key := #0; // zweites Komma unterdrücken |
Moin HappyTreeFriend,
sollte so gehen:
Delphi-Quellcode:
Voraussetzung für meine Variante:
procedure TForm7.Edit13KeyPress(Sender: TObject; var Key: Char);
begin if (key = #44) and (pos(#44,(Sender as TEdit).Text) > 0) then begin key := #0; exit; // Vorher kannst Du hier auch noch was anzeigen lassen. end; if not (key in [#8, #9,#44, #48 .. #57]) then key:=#0; end; Dieses Ereignis darf nur für ein TEdit Feld verwendet werden. @Stanlay: Die Idee war gut, nur wirst Du im OnChange das Problem haben zu entscheiden, welches der beiden Kommata das erste war, um das andere wieder löschen zu können. |
also immoment hab ich diese Variante am laufen:
Code:
scheint soweit zu gehen!
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin if not (key in [#8, #9,#44, #48 .. #57]) then key:=#0; if (key = #44) and (Pos(',', edit1.text) > 0) then key:=#0 end; Mal was anderes :) Ich möchte, da ich in manchen Editfenstern Zufallszahlen erzeuge, einen kleinen "Slotmachine" Effekt einbauen. Also dass er irgendwelche zahlen ziemlich schnell hintereinander im editfeld anzeigt und am ende dann die Zufallszahl bringt. Der Effekt muss nicht großartig sein, einfach ein paar zahlen schnell hintereiander ins Editfenster eintragen.. ich dachte es geht ganz einfach mit sowas wie edit1.text:='3' sleep(100); edit1.text:='6' sleep(100); edit1.text:='1' aber da bringt er dann nur die '1' .. kann mir da noch jemand weiterhelfen? :)) Danke!!! :) |
hey, wieso darf das nur in einem tedit feld verwended werden? ich muss das in alle bekommen *gg*
|
Hallo,
mach Bitte bei neuen Fragen auch ein neuen Thread auf! Danke!
Delphi-Quellcode:
Da Sleep das ganze etwas "kaputtmacht" und das Ergebniss nicht das wahre ist, habe ich es mal mit Luckies Delay-Prozedur eingefügt. Die ist wenisgtens verlässlich. :lol:
procedure delay(msec:longint);
var start,stop:longint; begin start := gettickcount; repeat stop := gettickcount; application.processmessages; until (stop - start ) >= msec; end; procedure TForm1.Button1Click(Sender: TObject); begin Edit2.Text := '1'; Delay(500); Edit2.Text := Edit2.Text + '2'; Delay(500); Edit2.Text := Edit2.Text + '3'; end; Grüsse, Daniel :hi: |
hi @all, ich hatte mal sowas vor einiger zeit zusammengeklickert
Code:
vielleicht hilft's
procedure CheckNumEingabe(strCheckText: String; var Key: Char);
begin if not (( (Key >= #48) and (Key <= #57)) or (Key < #32) or((Key = #44) and (Pos(Key, strCheckText) = 0))) then Key := #0; end; |
Zitat:
War ja nur ein Vorschlag...Ich hab auch nicht immer gleich Delphi parat. :? |
Oki Daniel, mach ich beim nächsten mal, ich hab wahrscheinlich noch mehr fragen in den nächsten Tagen. Ich muss mit meinem Kumpel ein Projekt für den Informatik LK schreiben, da brauche nwir manchmal etwas hilfe :).
Aber jetzt mal zu deinem Algorithmus! Er funzt schonmal :) Jetzt noch eine frage: Wie kann ich denn jetzt da nen gescheiten "random zähler" einbauen. Also dass er mir random zahlen in dem editfeld ausgibt müsste doch theoretischerweise so gehen
Code:
wie bau ich denn da ne geeignete schleife ein?
var i:integer;
begin randomize; i:=random(10); {schleife} . . edit1.text:=IntToStr(i); delay(500); {schleife} end; Danek nochmal :) ciao Happy |
Hallo,
dann mach Bitte jetzt ein neuen Thread auf, das ist jetzt wieder eine neue Frage! Daher schliesse ich hier erstmal. Grüsse, Daniel :hi: |
Moin Happy,
Zitat:
Zuweisen kannst Du die Routine beliebig vielen Edits. Zitat:
Neue Frage - Neuer Thread. Danke. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:53 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