Autor |
Beitrag |
joschi
Hält's aus hier
Beiträge: 5
|
Verfasst: Sa 23.10.04 12:40
Hi!
Und zwar möchte ich noch in mein kleinen Rechner einbauen, dass man nur ein Komma eingeben darf, sodass dadurch keine Fehlermeldung mehr entstehen kann.
Ich habe nur leider keine Ahnung wie man das machen kann. Ich dachte zuerst etwa so:
wenn man die Taste #44 (für das Komma) gedrückt hat, dann wird ein Befehl ausgeführt. Und zwar wird dann jede weitere EIngabe durch #0 ersetzt.
Doch irgendwie funzt das nicht richtig, keine Ahnung wieso.
Kann mir jemand helfen? wäre super!
|
|
Kroni
      
Beiträge: 720
Win 98, Win ME, Win2k, Win XP
D3 Pro
|
Verfasst: Sa 23.10.04 12:49
Ich habe eine Eingabeabsicherung mal nach folgendem Prinzip programmiert:
Wenn sich der Text ändert (edit1.change meinetwegen), dann soll er alle Zeichen durchgehen.
Wenn ein Komma gefunden wird, und das Sicherungsargument=false ist (das kannst du zb. über den Ascii-Code kontrollieren), dann soll er das Zeichen akzeptieren, und das Sicherungsargument, ob ein Komma eingeben wurde, auf true setzen. Danach, wenn er nochmal ein Komma findet, soll er das einfach wegfallen lassen.
Ich gehe zb einfach alle Zeichen durch, und die Zeichen, die akzeptiert werden sollen, speichert er in einen String, der dann den "gefilterten" Text enthält. Uund der wird dann hinterher dem Textfeld zugewiesen.
Ich kann dir auch mal nen Ausschnitt, wenn du das hier nicht verstehst, von meinem Source schicken!
|
|
Harry M.
      
Beiträge: 754
Win 2000, XP
D2005
|
Verfasst: Mo 25.10.04 22:43
Delphi-Quelltext 1: 2: 3: 4:
| procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin if key = '.' then key:= ',' end; |
versuche das mal.......
|
|
Kroni
      
Beiträge: 720
Win 98, Win ME, Win2k, Win XP
D3 Pro
|
Verfasst: Di 26.10.04 00:59
Also ich habe mit ihm schon eine Menge geredet....und er wollte einfach nur verhindern, dass nicht mehr als ein Komma eingegeben werden darf, damit es nicht zu einer Fehlermeldung kommt.....
Deine Anweisung machtja nur aus einem Punkt ein Komma, dannkannst du ja immer noch so viele Kommas eingeben wie du willst =)
|
|
Harry M.
      
Beiträge: 754
Win 2000, XP
D2005
|
Verfasst: Di 26.10.04 12:43
du wilst also verhindern das nicht mehr als 1 komma eingegeben werden kann. habe ich das jetzt richtig verstanden???
du kannst bei dir die eingaben über die tastatur machen???
hast du dir mal den windows-standart-rechner angesehen??
gib dem benutzer ein tastenfeld (mit buttons) und arbeite mit einem panel nicht mit einer edit-feld
so kannst du fehler bei der eingabe besser abfangen
z.b. so:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type TForm1 = class(TForm) Eins: TButton; Panel1: TPanel; Null: TButton; Komma: TButton; procedure EinsClick(Sender: TObject); procedure NullClick(Sender: TObject); procedure KommaClick(Sender: TObject); private public end;
var Form1: TForm1; KOMMA_ENTHALTEN : boolean = FALSE;
implementation
{$R *.dfm}
procedure TForm1.NullClick(Sender: TObject); begin Panel1.Caption := Panel1.Caption+'0'; end;
procedure TForm1.EinsClick(Sender: TObject); begin Panel1.Caption := Panel1.Caption+'1'; end;
procedure TForm1.KommaClick(Sender: TObject); begin if KOMMA_ENTHALTEN = FALSE then begin Panel1.Caption := Panel1.Caption+','; KOMMA_ENTHALTEN := TRUE; exit; end; if KOMMA_ENTHALTEN = TRUE then Messagebox(0,'Wie werden mehrere Kommas berechnet?????','Problem',16 ); end;
end. |
learning by imitating...
|
|
Kroni
      
Beiträge: 720
Win 98, Win ME, Win2k, Win XP
D3 Pro
|
Verfasst: Mi 27.10.04 19:27
Es sollte aber bei ihm darum gehen, dass man Eingaben nur per Tastatur machen kann.....weil man das ganze auch auf einen Netto Brutto Rechner usw übertragen werden sollte....aber das wäre natürlich auch eine Möglich keit.
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mi 27.10.04 19:37
das ist so ziemlich das gleiche
Quelltext 1: 2:
| if key = Komma then Komma:=true; if komma = true then key:=0; |
und wenn das feld wieder leer ist oder ein komma gelöscht wurde,
dann muss komma wieder auf true gesetzt werden 
|
|
Kroni
      
Beiträge: 720
Win 98, Win ME, Win2k, Win XP
D3 Pro
|
Verfasst: Mi 27.10.04 23:42
Also ich mache das einfach so....weil ich noch andere Zeichen usw eingeben will:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46:
| var text1:string; zeichen:char; i,ascii:integer; komma,e,minus:boolean; begin
text1:=''; komma:=false; e:=false; minus:=false; for i:= 1 to length(eingabe) do begin
zeichen:=eingabe[i]; ascii:=ord(zeichen); if ((ascii=45) and (i=1)) then begin text1:='-'; minus:=true; end;
if ((ascii=44) and (komma=false)) then begin text1:=text1+zeichen; komma:=true; end;
if (((ascii=69) or (ascii=101)) and (e=false)and (((i>=3) and (minus=true))or (i>=2) and (minus=false))) then begin text1:=text1+zeichen; e:=true; end;
if((ascii>=48) and (ascii<=57)) then begin text1:=text1+zeichen; end;
end;
eingabe:=text1;
end; |
das ist ne Komplette Absicherung für Edit Felder, in denen nur Zahlen eingegeben werden dürfen, weil damit gerechnet werden soll.
Es muss dann nu rnoch auf die Absicherung geachtet werden, was passiert, wenn das Feld leer ist!
|
|
jojo-sp
      
Beiträge: 317
Windows XP Prof, Vista Ultimate & Home Premium, Windows 7
Delphi 7 Enterprise, Delphi 2009
|
Verfasst: Do 28.10.04 11:37
Wieso macht ihr euch das denn so schwer? Bei dem onkeypress oder so kann doch wenn zum ersten mal das Komma gedrückt werden ein Prüfer auf true gesetzt werden, wenn dieser false ist, sonst passiert nichts -> exit;
Wenn man über eine Button-Tastatur aus dem Programm heraus eingibt, einfach dieses True/false setzen bei ButtonKomma.click.
_________________ Ist der Ruf erst ruiniert, lebts sich gänzlich ungeniert...
Wilhelm Busch (1832 - 1908)
|
|
greg
      
Beiträge: 119
Windows2000, WindowsXP
D5 Prof
|
Verfasst: Do 28.10.04 12:02
Öhm ... wie wäre es denn mit einem MaskEdit und der dazugehörigen Property EditMask?
Gruß
Gregor
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Do 28.10.04 15:48
|
|
Kroni
      
Beiträge: 720
Win 98, Win ME, Win2k, Win XP
D3 Pro
|
Verfasst: Do 28.10.04 15:57
also, ich habe dsa als das einfachste gefunden.....
ZB das mit dem Komma auf true setzten, klingt zu Anfang sehr sehr Einfach, nur was machst du, wenn das Komma gelöscht wird?? Wie erkenne ich genau, wann das Komma gelöscht wird??
Position merken, und dann, wenn an der Position die Backspace gedrückt wird, ganz klar, aber was mache ich, wenn vor dem Komma noch eine Zahl zusätzlich eingegeben wird??
Das waren die Fragen, die sehr viel Code und Aufwand brauchen, finde ich, und deshalb habe ich mich für diese Eingabeabsicherung durchgerungen.
Und ich wollte die Eingabe nicht durch Buttons machen, weil sie das Programmfenster zu groß machen, für ein kleines Programmm, dass wir über die Tastatur bedienen bzw über die Tastatur die Eingaben machen sollen.
Das war dann ein Gedankengang, der mich zu dem Code da oben geführt hat!
Zitat: |
alles viel zu kompliziert, du willst doch nur zahleneingaben haben
und die backspacetaste soll man auch noch drücken können,
dann nimm den hier |
ich möchte aber auch noch Komma, das E und sowas alles eingeben, und dann dabei beachten, dass nicht mehr als ein Komma eingegeben werden darf, da es sonst auch wieder zu einer Fehlermeldung kommt, und ich bin dafür, dass man gar nicht erst Falsche eingaben machen sollte, und erst nachher auf die Falsche eingabe aufmerksam geamcht werden sollte.
|
|
grayfox
      
Beiträge: 800
win98, winXP
D4 Standard; D6 Personal
|
Verfasst: Do 28.10.04 16:33
Delphi-Quelltext 1: 2:
| if key = Komma then Komma:=true; if komma = true then key:=0; |
wieso denn so kompliziert?
so gehts doch um einiges einfacher:
Delphi-Quelltext 1: 2:
| if key = #44 then key:= #0; |
mfg, stefan
|
|
Kroni
      
Beiträge: 720
Win 98, Win ME, Win2k, Win XP
D3 Pro
|
Verfasst: Do 28.10.04 16:39
Das schon, nur was mache ich, wenn danach das Komma gelöscht wird?? dann muss ich ja komma wieder auf false setzen. Und dann muss ich dafür, damit das Funktioniert wieder eine Prozedur schreiben, die erkennt, wann ein Komma gelöscht wurde.
Verstehst du, was ich meine? (nich böse gemeint die Frage)
|
|
grayfox
      
Beiträge: 800
win98, winXP
D4 Standard; D6 Personal
|
Verfasst: Do 28.10.04 17:28
hallo kroni!
ich habe zwar eure ganze diskussion nur teilweise mitverfolgt und bin daher bestimmt nicht am laufenden - melde mich aber trotzdem zu wort
du könntest das ganze auch so lösen: in der procedure, in welcher die die eingaben prüfst (keypress, onkeydown, usw...)
bekommst du ja mit, ob ein komma eingegeben wurde. wenn dem so ist, dann überprüfst du, ob sich in deinem eingabestring bereits ein komma befindet. ist eins vorhanden, dann löscht du die eingabe. somit ergeben sich auch keine probleme wenn das komma wieder wegeditiert wurde.
alles klar? falls nicht, dann frag nochmal
mfg, stefan
ps:
Zitat: | (nich böse gemeint die Frage) |
ich dachte immer, dass es keine bösen, sondern nur dumme fragen gäbe? 
|
|
wulfskin
      
Beiträge: 1349
Erhaltene Danke: 1
Win XP
D5 Pers (SSL), D2005 Pro, C, C#
|
Verfasst: Do 28.10.04 17:38
_________________ Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
|
|
Kroni
      
Beiträge: 720
Win 98, Win ME, Win2k, Win XP
D3 Pro
|
Verfasst: Do 28.10.04 17:47
Zitat: | du könntest das ganze auch so lösen: in der procedure, in welcher die die eingaben prüfst (keypress, onkeydown, usw...) |
bekommst du ja mit, ob ein komma eingegeben wurde. wenn dem so ist, dann überprüfst du, ob sich in deinem eingabestring bereits ein komma befindet.[/quote]
das mache ich ja im Prinzip schon....also mit meiner Prozedur, allerdings mache ich das bei jeder neuen eingabe, so dass ich dannauch sofort die Zahlen usw, also alles Kontrolliere!
also so schlecht finde ich das nicht(liegt vlt. daran, dass es ovn mir kommt
|
|
|