![]() |
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!!! :) |
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