| Autor |
Beitrag |
ThePriest
      
Beiträge: 43
|
Verfasst: 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 raziel: Topic aus Sonstiges verschoben am Sa 08.10.2005 um 08:38
|
|
Grishnak
      
Beiträge: 221
Windows XP Home
Delphi 7 PE, Delphi 2005 PE
|
Verfasst: 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 
      
Beiträge: 43
|
Verfasst: 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 : 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
      
Beiträge: 777
(Win98, WinMe) WinXP Prof
D3 Prof, D6 Pers, D2k5 Pers., Turbo C++ Explorer
|
Verfasst: Sa 08.10.05 13:36
schreibste
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 
      
Beiträge: 43
|
Verfasst: Sa 08.10.05 13:57
Dankeschön ! Problem soweit gelöst ! Hätte da nur eine Kleinigkeit die mich persönlich stört... 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 begin Key:=#0 end; end;
procedure TFRM_zahlenraten.EDT_eingabeChange(Sender: TObject); begin
if strtoint(EDT_eingabe.text)>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
      
Beiträge: 777
(Win98, WinMe) WinXP Prof
D3 Prof, D6 Pers, D2k5 Pers., Turbo C++ Explorer
|
Verfasst: Sa 08.10.05 15:32
bei 1 : musste so ändern:
Delphi-Quelltext 1: 2:
| if not (edit1.text='') and (strtoint(edit1.text)>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
      
Beiträge: 180
WinXP, SP2
D6 Enterprise
|
Verfasst: 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:
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 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; if StrToInt(EDT_eingabe.text) > 100 then EDT_eingabe.text:='100'; end; |
Cu
Crowbar
|
|
ThePriest 
      
Beiträge: 43
|
Verfasst: Sa 08.10.05 16:00
Ja vielen Dank 1) ist gelöst !
Jetzt bin ich bei 2) soweit... 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) 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
      
Beiträge: 777
(Win98, WinMe) WinXP Prof
D3 Prof, D6 Pers, D2k5 Pers., Turbo C++ Explorer
|
Verfasst: 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 
      
Beiträge: 43
|
Verfasst: Sa 08.10.05 16:23
Also meinst du so 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) 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
      
Beiträge: 180
WinXP, SP2
D6 Enterprise
|
Verfasst: Sa 08.10.05 18:34
Hi,
gebe doch einfach Dein "Info-Fenster" im "KeyPress"-Ereignis aus:
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 Application.MessageBox ('Bitte nur zwischen 0-100', 'Hilfe'); Key:=#0 end; end; |
Cu
Crowbar
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: 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:
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)>100) then 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
      
Beiträge: 777
(Win98, WinMe) WinXP Prof
D3 Prof, D6 Pers, D2k5 Pers., Turbo C++ Explorer
|
Verfasst: 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 
      
Beiträge: 43
|
Verfasst: So 09.10.05 15:58
Danke an alle für die Hilfe !
PS: Hab den Link gespeichert, ist echt hilfreich danke !
|
|