Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Borland C++ Builder » zahleneingabe beim Edit feld

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
01.05.2006, 16:17 Uhr
~Gast
Gast


hallo!
ich habe jetzt schon bestimmt 1 std das forum durchsucht, aber nicht gefunden, was mir wirklich weitergeholfen hat. da ich am verzweifeln bin, versuch ichs jetzt mal mit nem eigenen thema.

ich muss ein programm schreiben, das die prüfziffer von eans ausgibt. da eine ean nur aus zahlen besteht sollen auch nur die eingegeben werden dürfen.
die eingabe läuft über ein edit feld. ich habs auch mit nem maskedit feld versucht, aber dabei stört mich, dass der cursor nicht an die erste stelle gebunden ist. d.h. man könnte eine zahl eingeben, bei der an der ersten stelle nichts steht (ich hoffe ihr versteht, was ich meine). und das möcht ich vermeiden.

gibt es nicht eine möglichkeit die eingabe über die tastatur erst zu prüfen, ob es eine ziffer ist und nur wenn das auch zutrifft die änderung im edit feld zuzulassen? ich hab da schon mit den ereignissen OnKeyPress und OnKeyDown experimentiert, aber nichts wirklich funktionierendes auf die beine gestellt.

ich hoffe es kann mir jemand weiterhelfen sonst muss ich bei meinem alten programm bleiben, wo die ziffern nur über buttons eingegeben werden können. das ist zwar unabstürzbar, aber auch sehr unkomfortabel.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
01.05.2006, 16:29 Uhr
Reyx
IT-fetischistischer Wurstsalat mit rostigem Berghorn
(Operator)


Da gibt es tausende Möglichleiten.

Eine währe z.B., den Tastendruck abzufangen (eben OnKeyDown bzw. OnKeyPress), da dan prüfen ob der Code der gedrückten Taste der einer der Zahlentasten ist (ich habe die Codes gerade nicht im Kopf, war aber afair so um die 60 herum, frag da mal Google oder nochmal die Forensuche).

Ansonsten würde auch gehen, im OnChange des TEdits einmal folgenden Code platzieren (Achtung, Pseudocode!):

C++:
static int lastEntered = 0;

try   {
   StrToInt(Edit1->Text);
   lastEntered = StrToInt(Edit1->Text);
}   catch(...)   {
   Edit1->Text = lastEntered;
}


Dieser Post wurde am 01.05.2006 um 16:30 Uhr von Reyx editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
03.05.2006, 22:40 Uhr
~Gast
Gast


erstmal danke für die antwort!

also den code für das OnChange versteh ich nicht. mal abgesehen davon, dass ich mit dem "try" und dem "catch(...)" nichts anfangen kann, seh ich nicht an welcher stelle die eingabe von buchstaben oder anderen zeichen, die keine ziffern sind verhindert wird.
aber das ist nicht so schlimm, denn ich hab mir eine andere funktionierende lösung zusammengebastelt. hier ist sie:


C++:
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
  if((Key < 48 || Key > 57) && Key != 8)
    Key = 0;
}


so in der art hatte ich das ja schon mal probiert, aber da war mir nicht klar, wie man verhindert, dass der tastenanschlag "durchkommt". tja...heute ist mir dann die idee mit dem "Key = 0" gekommen.

naja...dann will ich mal weiter programmieren
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
09.05.2006, 22:23 Uhr
~Gast
Gast


also ich brech gleich zusammen
es geht weiter...immernoch das selbe proggie. nun folgendes problem:
für die berechnung der eans brauch ich die länge des strings aus dem TEdit. aber genau das will einfach nicht funktionieren. ich hab mittlerweile alles druch. ich hatte an sowas wie...

C++:
TEdit->Text.length(),
TEdit->Text.GetLength(),
size(TEdit->Text),
StrLen(TEdit->Text)
TEdit->Text.Len()


so...die dürfte ich alle schon ausprobiert haben. und ich hab auch jeweils einmal TEdit->Text an die funktion übergeben und einmal die funktion ohne übergabeparameter und mit punkt verbunden an TEdit->Text drangehängt. das hab ich deswegen bei allen gemacht, weil ich nicht mehr wusste, bei welcher variante es wie rum funktioniert (ich hoffe, dass ich wirklich alle probiert hab).
auf jeden fall kommt bei allen varianten die selbe meldung: "xxx ist kein element von 'ansistring'!"
da kann doch was nicht stimmen! es kann doch nicht so schwer sein, die länge eines ansistrings zu ermitteln...
man man man .....!

wäre echt dankbar für hilfreiche kommentare.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
10.05.2006, 16:44 Uhr
~Felix
Gast


Hey,
also das ist eigentlich kein Prob:

Einfach die Eingabe aus dem Endit unter ner Stringvariablen abspeichern und dann kannsch du des mit

Edit1->Text=IntToStr(s.Length());

z.b. in nem Edit1 ausgeben, bzw du kannsch des auch einfach untern ner Integer abspeichern.

Ich hoffe, dass, du auch das wissen wolltest ;-)
Felix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
10.05.2006, 16:48 Uhr
~Felix
Gast


hatte ganz vergessen,
also du kannsch natürlich auch ohne die EIngabe in ner String abzuseichern des machen, dann einfach:

int i=Edit1->Text.Length();

viele Grüße
Felix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
10.05.2006, 23:05 Uhr
~dominik
Gast


das was du schreibst, ist mir alles schon klar. wenn du nochmal meinen letzten beitrag anschaust findest du deine variante in der ersten zeile des c++ codes.
naja...trotz allem hab ichs dann doch nochmal probiert und siehe da, es funktioniert
jetzt fragt ihr euch: wie zur hölle hat der teufelskerl das denn geschafft? ( )
tja...ganz einfach: ich hab mir einfach mal wieder den anteil meiner grauen zellen angeschaut, in denen steht "c++ ist case sensitive!". vorher hatte ich length einfach nur klein geschrieben.
tut mir leid, dass ich das forum mit solchen lapalien belastet hab.
aber das proggie ist ja noch nicht fertig. vielleicht hab ich schon bald die nächste frage...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Borland C++ Builder ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: