Autor Beitrag
ThePriest
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: Sa 08.10.05 01:29 
Ich habe das Problem bzw. den Wunsch, dass die Eingabe des Users in ein bestimtes Intervall passt. Also soll er in meinem Fall in ein Edit1 zahlen von 0-100 eingeben können und bei Falscheingabe also Buchstaben,Sonderzeichen,Dezimalzahlen(da ich den Typ byte benutze) negative Zahlen nicht eingeben können, bzw. besser wäre ein PopUp erscheint bei Falscheingabe und weist den User darauf hin welche Zeichen er benutzen darf.

Danke schonmal im vorraus ! ;-)


Moderiert von user profile iconraziel: Topic aus Sonstiges verschoben am Sa 08.10.2005 um 08:38
Grishnak
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 221

Windows XP Home
Delphi 7 PE, Delphi 2005 PE
BeitragVerfasst: Sa 08.10.05 01:56 
Zu dieser Frage gibt es hier wirklich schon viele, viele Postings. Einfach mal die Suche bemühen!

_________________
Mach' etwas idiotensicher und irgendjemand erfindet einen besseren Idioten!
ThePriest Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: Sa 08.10.05 13:20 
Titel: Jup sorry :-)
Hab mich mal an der Problemlösug aus diesem Thread orientirt www.delphi-forum.de/...ghlight=eingabe+edit und bin nun soweit, dass die Eingabe in das Edit1 auf ausschlieslich Zahlen von 0-9 ( also #48..#57 ) beschrängt ist.
Mithilfe der Objektinspektor Funtion MaxLength habe ich ausserdem die Zahleneingabe auf 3 beschrängt. Nun stehe ich vor dem Problem das man

1) Nach eingabe der Zahl in das Edit1, diese nicht mehr entfernen kann

2) Dass man Zahlen bis 999 eingeben kann, wobei ich nur bis zur Zahl 100 die Eingabe beschränken will.

Mein Quelltextteil :
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TFRM_zahlenraten.EDT_eingabeKeyPress(Sender: TObject;
  var Key: Char);
begin

    if ( not ( key in [ #48..#57 ] ) )   then
     begin
      Key:=#0
    end;
end;

end.


Ich hoffe einer kann mir weiterhelfen, vielen dank schonmal im Vorraus ;-)
Amateur
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 777

(Win98, WinMe) WinXP Prof
D3 Prof, D6 Pers, D2k5 Pers., Turbo C++ Explorer
BeitragVerfasst: Sa 08.10.05 13:36 
schreibste
ausblenden Delphi-Quelltext
1:
if strtoint(edit1.text)>100 then edit.text:='100';					

und zum löschen musste nur noch die taste für zurück (keine ahnung wie die auf englisch heißt) zu deiner if abfrage mit den zahlen hinzupacken.

_________________
"Kein dummes Gerede. Kein Rumrätseln. Denkt an nichts anderes mehr, nur noch an das, was vor euch liegt. Das ist die wahre Herausforderung. Ihr müßt euch vor euch selbst schützen, Leute." (Rennes in "Cube")
Beiträge: >700
ThePriest Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: Sa 08.10.05 13:57 
Dankeschön ! Problem soweit gelöst ! Hätte da nur eine Kleinigkeit die mich persönlich stört...
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure TFRM_zahlenraten.EDT_eingabeKeyPress(Sender: TObject;
  var Key: Char);
begin

    if ( not ( key in [ #8#48..#57 ] ) )   then   //Prüfung der Eingabe
     begin                                         //schliest alles außer die Zahlen
                                                  //0-9 und Bacspace aus
      Key:=#0
    end;
end;

procedure TFRM_zahlenraten.EDT_eingabeChange(Sender: TObject);
begin

 if strtoint(EDT_eingabe.text)>100   //verhindert das User gerzahl>100 
  then EDT_eingabe.text:='100';

end;

end.


1)so sieht der Quelltext nach der Verbesserung aus die du mir enpfohlen hast. Man kann nun nur Zahlen bis 100 eingeben ud die mithilfe der BackspaceTaste ( #8 ) wieder entfernen. Doch steht dann nur eine 1 z.B. im Edit1 und geht dann auf BackSpace so stürzt das Programm ab und ich muss es reseten. Woran kann das liegen und kann man das Verbessern ?

2)Ausserdem würde ich es gut finden aufgrund der User-Freundlichkeit des Programmes, noch ein Hinweiß einzubauen, dass wenn der User eine Falscheingabe tätigt (die nun nicht mehr möglich ist,siehe Quelltext) aber ihn darauf hinweist warum er z.B. keine Buchstaben eingeben kann. Es wäre nett wenn mir einer erklären könnte wie ich dieses Problem mit einem PopUp-Fenster lösen könnte.

Danke
MfG
ThePriest
Amateur
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 777

(Win98, WinMe) WinXP Prof
D3 Prof, D6 Pers, D2k5 Pers., Turbo C++ Explorer
BeitragVerfasst: Sa 08.10.05 15:32 
bei 1 : musste so ändern:
ausblenden Delphi-Quelltext
1:
2:
if not (edit1.text=''and (strtoint(edit1.text)>100)   //verhindert das User gerzahl>100
  then edit1.text:='100';

zu 2. pop ups kann man mit vielen funktionen machen.
mit showmessage('Dein text'); kann man einfach nur nen kleines fensterchen öffnen.
gibt auch noch messagebox() (oder wars application.messagebox?) damit kann man noch überschirft udn so verändern.
und mit messagedlg() kannste über nen parameter auch nen icon setzen. kannste in der hilfe nachgucken welche parameter für was stehn...

_________________
"Kein dummes Gerede. Kein Rumrätseln. Denkt an nichts anderes mehr, nur noch an das, was vor euch liegt. Das ist die wahre Herausforderung. Ihr müßt euch vor euch selbst schützen, Leute." (Rennes in "Cube")
Beiträge: >700
Crowbar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 180

WinXP, SP2
D6 Enterprise
BeitragVerfasst: Sa 08.10.05 15:40 
*** da war wieder einer schneller *** :)

Hi,
die Fehlermeldung tritt auf, wenn durch die Backtaste der Textinhalt im Editfeld leer wird.
"StrToInt" bei leerem String = Fehlermeldung

Hier der modif. Code als Beispiel:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
Procedure TFRM_zahlenraten.EDT_eingabeKeyPress(Sender: TObject; var Key: Char);
begin
  if ( not ( key in [ #8#48..#57 ] ) ) then
   begin
   { Hinweistext als Beispiel bei "Falscheingabe" }
     MessageDlg('Bitte nur Zahlen eingeben!'+#10#13+'Ihre Eingabe war  '''+Key+''' !',
                 mtInformation,[mbOk],0);
     Key:=#0
   end;
end;

Procedure TFRM_zahlenraten.EDT_eingabeChange(Sender: TObject);
begin
 if EDT_eingabe.Text = '' then Exit;   // sonst Fehler, wenn Eingabefeld leer ist!
 if StrToInt(EDT_eingabe.text) > 100
  then EDT_eingabe.text:='100';
end;


Cu
Crowbar
ThePriest Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: Sa 08.10.05 16:00 
Ja vielen Dank 1) ist gelöst ! :-)

Jetzt bin ich bei 2) soweit...
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TFRM_zahlenraten.EDT_eingabeChange(Sender: TObject);
begin

 if not (EDT_eingabe.text=''and (strtoint(EDT_eingabe.text)>100)   //verhindert das User gerzahl>100
  then EDT_eingabe.text:='100';
    Application.MessageBox ('Bitte nur zwischen 0-100''Hilfe');


end;


...nun wird in der MessageBox die Nachricht 'Bitte nur zwischen 0-100' und die Überschrift 'Hilfe' angezeigt. Das Problem ist nur, irgendwie habe ich es falsch eingebaut, denn nach jeder Zahl die der User eingibt popt die MessageBox auf. Ich will aber nur das sie aufpopt wenn die Eingabe des Users nicht zwischen 0-100 ist. Also soll es als Hilfestellung dienen, dass wenn der User Buchstaben, zu große Zahlen usw. eingibt die nicht zischen 0-100 liegen die MessageBox öffnet und ihm erklärt das seine Eingabe nicht möglich ist.
Amateur
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 777

(Win98, WinMe) WinXP Prof
D3 Prof, D6 Pers, D2k5 Pers., Turbo C++ Explorer
BeitragVerfasst: Sa 08.10.05 16:02 
begin end nach then vergessen. du solltest dir den crashkurs delphi angucken. einfach ma suchen hier im forum

_________________
"Kein dummes Gerede. Kein Rumrätseln. Denkt an nichts anderes mehr, nur noch an das, was vor euch liegt. Das ist die wahre Herausforderung. Ihr müßt euch vor euch selbst schützen, Leute." (Rennes in "Cube")
Beiträge: >700
ThePriest Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: Sa 08.10.05 16:23 
Also meinst du so
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TFRM_zahlenraten.EDT_eingabeChange(Sender: TObject);
begin

 if not (EDT_eingabe.text=''and (strtoint(EDT_eingabe.text)>100)   //verhindert das User gerzahl>100
  then EDT_eingabe.text:='100';

   begin
   Application.MessageBox ('Bitte nur zwischen 0-100''Hilfe');
   end;

end;

end.


Dabei tritt immer noch das selbe Problem auf. Die MessageBox soll nur kommen wenn der User eine Falscheingabe macht (indem Fall wenn er Zahlen über 100 eingiebt,Buchstaben oder Sonderzeichen).
Crowbar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 180

WinXP, SP2
D6 Enterprise
BeitragVerfasst: Sa 08.10.05 18:34 
Hi,
gebe doch einfach Dein "Info-Fenster" im "KeyPress"-Ereignis aus:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
Procedure TFRM_zahlenraten.EDT_eingabeKeyPress(Sender: TObject; var Key: Char);
begin
  if ( not ( key in [ #8#48..#57 ] ) ) then
   begin
   { Hinweistext als Beispiel bei "Falscheingabe" }
     Application.MessageBox ('Bitte nur zwischen 0-100''Hilfe');
     Key:=#0
   end;
end;


Cu
Crowbar
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Sa 08.10.05 19:45 
Hallo,

der begin-end-Block ist falsch gesetzt,
Du musst EDT_eingabe.text:='100' und die MessageBox in begin-end setzen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TFRM_zahlenraten.EDT_eingabeChange(Sender: TObject);
begin
 if not (EDT_eingabe.text=''and (strtoint(EDT_eingabe.text)>100then//verhindert das User zahl>100
   begin
   EDT_eingabe.text:='100';
   Application.MessageBox ('Bitte nur zwischen 0-100''Hilfe');
   end;
end;

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Amateur
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 777

(Win98, WinMe) WinXP Prof
D3 Prof, D6 Pers, D2k5 Pers., Turbo C++ Explorer
BeitragVerfasst: Sa 08.10.05 23:18 
ich sags jetzt nochmal: guck dir den crashkurs delphi an:

www.christian-stelzm...rtikel/crashkurs.htm

solche groben fehler wie nen begin end block zu vergessen passieren nur wenn man gerade mit delphi angefangen hat und dann solltest du dir diesen link angucken bevor du weiter postest.
thx

_________________
"Kein dummes Gerede. Kein Rumrätseln. Denkt an nichts anderes mehr, nur noch an das, was vor euch liegt. Das ist die wahre Herausforderung. Ihr müßt euch vor euch selbst schützen, Leute." (Rennes in "Cube")
Beiträge: >700
ThePriest Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 43



BeitragVerfasst: So 09.10.05 15:58 
Danke an alle für die Hilfe !

PS: Hab den Link gespeichert, ist echt hilfreich danke !