AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Editfelder für Buchstaben sperren

Ein Thema von naudoc · begonnen am 16. Nov 2006 · letzter Beitrag vom 27. Nov 2006
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#11

Re: Editfelder für Buchstaben sperren

  Alt 25. Nov 2006, 10:23
Zitat von naudoc:
Dies möchte ich verhindern, oder evtl. sogar so Programmieren, dass sich ein eigenes Popupfeld öffnet mit dem Text "Kann man mit Buchstaben rechnen? Depp!", oder einfach nur in nem Label "Rechnen mit Buchstaben geht nicht wirklich" erscheint.
Also erstens: Man kann sehr wohl mit Buchstaben rechnen, sogar auf mehrere Arten. Ist also wohl eher PEBKAC beim Programmierer als "Depp"-User. Und zweitens wirds ein Programm das den User beschimpft wohl kaum größere Verbreitung erfahren. Vielleicht sollte man Dir eine Extraversion von Delphi besorgen die statt "Compiler error" "Du Idiot" ins Log schreibt

Sorry, den konnte ich mir echt nicht verkneifen
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
Cöster

Registriert seit: 6. Jun 2006
589 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: Editfelder für Buchstaben sperren

  Alt 25. Nov 2006, 12:59
Zitat von naudoc:
Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject);
var a,b,c:real;
begin
if ((edit1.text=floattostr(a)) or (edit1.text='-'+floattostr(a)+'') or (edit1.text='0') or (edit1.text=''))
and ((edit2.text=floattostr(b)) or (edit2.text='-'+floattostr(b)+'') or (edit2.text='0') or (edit2.text=''))
and ((edit3.text=floattostr(c)) or (edit3.text='-'+floattostr(c)+'') or (edit3.text='0') or (edit3.text=''))
then
Was willst du mit dem Code denn erreichen? a, b und c sind nicht zugewiesene Real-Typen. Du solltest prüfen, ob die Methode StrToFloat auf das Edit angewendet einen Fehler hervorruft. Das kann man mit einem try...except...end-Block (näheres dazu in der Delphi-Hilfe) machen.
  Mit Zitat antworten Zitat
naudoc

Registriert seit: 7. Nov 2006
92 Beiträge
 
#13

Re: Editfelder für Buchstaben sperren

  Alt 26. Nov 2006, 09:59
Hi,
so solls aussehen.

Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject);
var a,b,c:real;
begin
a:=strtofloat(edit1.Text);
b:=strtofloat(edit2.Text);
c:=strtofloat(edit3.Text);
if ((edit1.text=floattostr(a)) or (edit1.text='-'+floattostr(a)+'') or (edit1.text='0') or (edit1.text=''))
and ((edit2.text=floattostr(b)) or (edit2.text='-'+floattostr(b)+'') or (edit2.text='0') or (edit2.text=''))
and ((edit3.text=floattostr(c)) or (edit3.text='-'+floattostr(c)+'') or (edit3.text='0') or (edit3.text=''))
then
Es soll erreicht werden, das sich ein Labelfeld nur verändert, wenn das Editfeld eine Zahl, oder leer ist...

mfG
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#14

Re: Editfelder für Buchstaben sperren

  Alt 26. Nov 2006, 10:16
Hallo Max,

durch das ständige Umwandeln zwischen String und Float erreichst du nicht das von dir gewünschte Verhalten. So wird z.B. die Eingabe '1E4' durch StrToFloat in den Wert 10000 umgewandelt, die Anwendung von FloatToStr auf diesen Wert führt dann aber nicht zum ursprünglichen Eingabestring. Auch die (versuchte) Berücksichtigung des Vorzeichens ist nicht richtig.

Vielleicht ist der folgende Code ja das, was du suchst:

Delphi-Quellcode:
procedure TForm1.Edit1Change (Sender: TObject);

  function CheckEdit (aEdit: TEdit): Boolean;
    var Dummy : Double;
  begin
    Result := (aEdit.Text = '') or TryStrToFloat(aEdit.Text, Dummy);
  end;

begin
  if CheckEdit(Edit1) and CheckEdit(Edit2) and CheckEdit(Edit3) then
    ...
end;
Gruß Hawkeye
  Mit Zitat antworten Zitat
naudoc

Registriert seit: 7. Nov 2006
92 Beiträge
 
#15

Re: Editfelder für Buchstaben sperren

  Alt 26. Nov 2006, 21:33
Sorry, aber ich versteh nicht wie die Funktion funktioniert, deshalb kann ich sie nicht anwenden...
Weiss nicht was an welche Stelle kommt, und warum...

Danke trotzdem!

mfg naudoc
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#16

Re: Editfelder für Buchstaben sperren

  Alt 26. Nov 2006, 22:05
Erm, lol?

Da gibts doch nicht viel zu verstehen.

Eine bestimmte Aktion wird ausgeführt, wenn die zu überprüfenden Edits entweder leer sind oder gültige Zahlenwerte enthalten.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
naudoc

Registriert seit: 7. Nov 2006
92 Beiträge
 
#17

Re: Editfelder für Buchstaben sperren

  Alt 26. Nov 2006, 22:59
Hallo,
so kann man ja nicht mal mit der Taste über Enter löschen, aber 3,,,4--4,,, usw kann eingegeben werden...
Delphi-Quellcode:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); //Das hier im OnKeyPress fängt alles ab was keine Zahl is
begin
  if not (Key in ['0'..'9']) then Key:= #0;
end;
Geht das nicht noch etwas besser?
mfG naudoc
  Mit Zitat antworten Zitat
naudoc

Registriert seit: 7. Nov 2006
92 Beiträge
 
#18

Re: Editfelder für Buchstaben sperren

  Alt 26. Nov 2006, 23:03
Hallo,
Zitat von 3_of_8:
Erm, lol?

Da gibts doch nicht viel zu verstehen.

Eine bestimmte Aktion wird ausgeführt, wenn die zu überprüfenden Edits entweder leer sind oder gültige Zahlenwerte enthalten.

was ist Dummy, was ist Double, wie funktioniert CheckEdit?

Könntest du das mal programmieren für die variablen a und b, wenn a+b gerechnet werden soll?(Ergebnis soll c sein, und die Editfelder Edit1, Edit2 und Edit3)

Wär vielleicht hilfreich...

Danke!

Naudoc
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#19

Re: Editfelder für Buchstaben sperren

  Alt 26. Nov 2006, 23:17
Aaalso...

Double ist einfach ein Gleitkommatyp, also eine Zahl mit Nachkommastellen. Dummy ist eine Variable, die man einfach braucht, um sie als var-Parameter an die Funktion TryStrToInt zu übergeben.

Wenn du jetzt die Zahlenwerte von edit1 und edit2 addieren willst, geht das so:

showmessage(inttostr(strtointdef(edit1.text, 0)+strtointdef(edit2.text, 0))); Das bedeutet, dass versucht wird, die Zahlenwerte der beiden Edits zu addieren. Wenn ein Edit keine Zahl enthält, wird der Wert als 0 angenommen.

Delphi-Quellcode:
var a, b: Integer;
begin
  if not (trystrtoint(edit1.text, a) and trystrtoint(edit1.text, b)) then
    showmessage('Bitte geben sie gültige Zahlenwerte ein.')
  else
    showmessage(inttostr(a+b));
end;
Das bedeutet, dass die Zahlenwerte der Edits addiert werden, wenn sie gültig sind. Ansonsten wird eine Fehlermeldung ausgegeben.


CheckEdit rufst du am besten in OnChange auf und machst dann irgendne Spielerei wie das Edit rot färben, wenn es keinen gültigen Wert enthält.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#20

Re: Editfelder für Buchstaben sperren

  Alt 27. Nov 2006, 01:37
Zitat von naudoc:
...aber 3,,,4--4,,, usw kann eingegeben werden...
Delphi-Quellcode:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); //Das hier im OnKeyPress fängt alles ab was keine Zahl is
begin
  if not (Key in ['0'..'9']) then Key:= #0;
end;
Die Behauptung ist ja wohl nicht Dein Ernst ? Das hier ist jetzt keine Frage, sondern eine Feststellung : es gibt in dem Fall zwei Fehlerquellen. Entweder wurde nicht Edit1 usw. benutzt sondern Edit2 usw. Die nächste wäre, Edit1 benutzt das Edit2KeyPress oder sonstwas.
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:33 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