Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi in edit maximal 1 KOMMA zulassen (https://www.delphipraxis.net/5955-edit-maximal-1-komma-zulassen.html)

HappyTreeFriend 24. Jun 2003 16:17


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:
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.}
Kann man das vielleicht über solch eine Procedure machen?

thx 4 reply

so long Euer HappyTreeFriend

Daniel B 24. Jun 2003 16:25

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:

HappyTreeFriend 24. Jun 2003 17:04

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:

Daniel B 24. Jun 2003 17:42

Hallo,

hier mal was zusammengeklickt.
Delphi-Quellcode:
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;
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.

Grüsse, Daniel :hi:

HappyTreeFriend 24. Jun 2003 18:30

Danke. Werd das mal einbauen... denke, dass das so funzt.

:bouncing4: :bounce1: :bounce2: ENDLICH GEHTS WEITER :bounce2: :bounce1: :bouncing4:

Stanlay Hanks 24. Jun 2003 18:38

Ginge da eigentlich nicht auch, dass man im OnChange mit Pos() prüft, ob ein Komma schon vorhanden ist?

Daniel B 24. Jun 2003 18:50

Hallo,
Zitat:

Zitat von Stanlay Hanks
Ginge da eigentlich nicht auch, dass man im OnChange mit Pos() prüft, ob ein Komma schon vorhanden ist?

Versuch Dein Glück und zeig uns dann den Code. Ich warte. :mrgreen:
Aber hier direkt reinhacken und nicht testen!

Grüsse, Daniel :hi:

Hansa 24. Jun 2003 19:00

Code:
if pos (DecimalSeparator,text) <> 0 then begin // Komma überhaupt da ??
then
        key := #0; // zweites Komma unterdrücken
P.S.: nicht getestet !

Christian Seehase 24. Jun 2003 19:04

Moin HappyTreeFriend,

sollte so gehen:

Delphi-Quellcode:
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;
Voraussetzung für meine Variante:
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.

HappyTreeFriend 24. Jun 2003 19:11

also immoment hab ich diese Variante am laufen:

Code:
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;
scheint soweit zu gehen!



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!!! :)

HappyTreeFriend 24. Jun 2003 19:12

hey, wieso darf das nur in einem tedit feld verwended werden? ich muss das in alle bekommen *gg*

Daniel B 24. Jun 2003 19:16

Hallo,

mach Bitte bei neuen Fragen auch ein neuen Thread auf! Danke!

Delphi-Quellcode:
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;
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:
Grüsse, Daniel :hi:

n0b0dy@home 24. Jun 2003 19:21

hi @all, ich hatte mal sowas vor einiger zeit zusammengeklickert

Code:
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;
vielleicht hilft's

Stanlay Hanks 24. Jun 2003 19:31

Zitat:

Zitat von Daniel B
Hallo,
Zitat:

Zitat von Stanlay Hanks
Ginge da eigentlich nicht auch, dass man im OnChange mit Pos() prüft, ob ein Komma schon vorhanden ist?

Versuch Dein Glück und zeig uns dann den Code. Ich warte. :mrgreen:
Aber hier direkt reinhacken und nicht testen!

Grüsse, Daniel :hi:


War ja nur ein Vorschlag...Ich hab auch nicht immer gleich Delphi parat. :?

HappyTreeFriend 24. Jun 2003 19:52

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:
var i:integer;
begin
randomize;
i:=random(10);
{schleife}
.
.
edit1.text:=IntToStr(i);
delay(500);
{schleife}
end;
wie bau ich denn da ne geeignete schleife ein?
Danek nochmal :)

ciao
Happy

Daniel B 24. Jun 2003 19:55

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:

Christian Seehase 24. Jun 2003 19:57

Moin Happy,

Zitat:

Zitat von HappyTreeFriend
hey, wieso darf das nur in einem tedit feld verwended werden? ich muss das in alle bekommen *gg*

Die Betonung lag auf TEdit und nicht auf einem ;-), da ich (Sender as TEdit) benutzt habe, was daneben geht, wenn der Sender kein TEdit oder eine Ableitung davon ist.
Zuweisen kannst Du die Routine beliebig vielen Edits.

Zitat:

Zitat von Daniel B
mach Bitte bei neuen Fragen auch ein neuen Thread auf! Danke!

Das war jetzt von Daniel nicht als Witz gemeint:
Neue Frage - Neuer Thread.

Danke.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz