Delphi-PRAXiS
Seite 1 von 2  1 2      

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:33 Uhr.
Seite 1 von 2  1 2      

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