Autor |
Beitrag |
GiuStyler
Beiträge: 65
Erhaltene Danke: 1
Win 8.1
Delphi XE6
|
Verfasst: Fr 26.09.14 11:55
Hallo Leute, nachdem ich das Alte Probleme behoben haben, habe ich nun ein neues. Wie muss ich es nun machen, dass mein (,) nicht als Zeichen gezählt wird.
Zur Erläuterung. Mein Taschenrechner darf maximal nur 10 Zahlen, aber wenn man ein (,) macht, dann kann man nur noch 9 Zahlen. Ich möchte es aber nun so haben das man 10 Zahlen machen kann und falls ein (,) vorhanden ist auch.
Einfache Lösung wäre, wenn ich sage man kann 11 Zeichen machen, aber trotzdem angebe das man 10 kann, so könnte es gut gehen sofern keiner auf die Idee käme es mal zu testen.
mein Aktueller Code sieht nun so aus
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:
| procedure TFormTaschenrechner.EditZahlKeyPress(Sender: TObject; var Key: Char); begin if Key = '.' then Key := ','; if not (Key in [#8, '0'..'9', ',']) then Key := #0; if ((Sender as TEdit).Text = '') and ((Key = '0') or (Key = ',')) then begin (Sender as TEdit).Text := '0,'; (Sender as TEdit).SelStart := Length((Sender as TEdit).Text); Key := #0; if Key = '0' then begin if (pos('0',(Sender as TEdit).Text) > 0) then Key := #0; end; end else begin if Key = ',' then if (pos(',', (Sender as TEdit).Text) > 0) then Key := #0; end;
end; |
Wäre Dankbar für jede Hilfe.
MfG
|
|
jasocul
Beiträge: 6388
Erhaltene Danke: 146
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Fr 26.09.14 12:47
Wie üblich kein Delphi zum Testen dabei, aber so sollte es funktionieren:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| if Key = ',' then if (length((Sender as TEdit).Text) > 10) then Key := #0; else if (length((Sender as TEdit).Text) > 9) then Key := #0; |
|
|
GiuStyler
Beiträge: 65
Erhaltene Danke: 1
Win 8.1
Delphi XE6
|
Verfasst: Fr 26.09.14 13:12
Danke jasocul,
funktioniert noch nicht ganz, aber damit kann ich weiterarbeiten.
Aktuell ist es so, dass er mir das (,) trotzdem noch macht, aber trotzdem nur 9 zahlen dann zulässt, außer es sind schon 9 bzw. 10 zahlen da.
Was ich genau brauche ist, dass er das (,) nicht mitzählt.
Aktuell ist es so
1,23456789 (9 Zahlen inklusive (,))
ich brauche es so
1,234567890 (10 Zahlen mit (,))
aber wenn kein (,) vorhanden ist, dass er dann trotzdem 0123456789 macht und danach das (,) nicht mehr zulässt
MfG
|
|
WasWeißDennIch
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: Fr 26.09.14 13:25
Schreib Dir doch eine kleine Hilfsfunktion, die prüft, ob ein Komma zugelassen werden soll. Das ist ja dann der Fall, wenn noch keins enthalten und die Stringlänge kleiner als 10 ist.
|
|
GiuStyler
Beiträge: 65
Erhaltene Danke: 1
Win 8.1
Delphi XE6
|
Verfasst: Fr 26.09.14 14:28
Bin dabei WasWeißDennIch
sieht aktuell so aus
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| if (Pos(',', (Sender as TEdit).Text) > 0) and (length((Sender as TEdit).Text) > 11) then begin Key := #0; end else if (Pos(',', (Sender as TEdit).Text) = 0) and (length((Sender as TEdit).Text) > 10) then Key := #0; |
Aktuell ist es aber so, dass er mir immer 11 macht mit und ohne (,) da ist nun noch der Wurm drin, aber es läuft schon mal wie ich es haben will. Ich komme der Sache näher
MfG
|
|
WasWeißDennIch
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: Fr 26.09.14 15:09
|
|
GiuStyler
Beiträge: 65
Erhaltene Danke: 1
Win 8.1
Delphi XE6
|
Verfasst: Mo 29.09.14 09:00
So. Das Wochenende ist vorbei weiter ans Werk. Sry das ich das nicht mehr am Freitag gesehen habe, aber habe mit einem Kollegen an einem Rechner gearbeitet.
Also, mein Code sieht nun komplett so aus und es Funktioniert auch.
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:
| procedure TFormTaschenrechner.EditZahlKeyPress(Sender: TObject; var Key: Char); begin if Key = '.' then Key := ','; if not (Key in [#8, '0'..'9', ',']) then Key := #0; if ((Sender as TEdit).Text = '') and ((Key = '0') or (Key = ',')) then begin (Sender as TEdit).Text := '0,'; (Sender as TEdit).SelStart := Length((Sender as TEdit).Text); Key := #0; if Key = '0' then begin if (pos('0',(Sender as TEdit).Text) > 0) then Key := #0; end; end else begin if Key = ',' then if (pos(',', (Sender as TEdit).Text) > 0) then Key := #0; end;
if (length((Sender as TEdit).Text) > 10) and (pos(',', (Sender as TEdit).Text) > 0) then begin Key := #0; end else if (length((Sender as TEdit).Text) > 9) and (pos(',', (Sender as TEdit).Text) = 0) then Key := #0; end; |
Klappt auch wunderabar. Habe gerade mal dein getestet bei dem Code
Delphi-Quelltext 1: 2: 3:
| if Key = ',' then if not CommaPossible((Sender as TEdit).Text) then Key := #0; |
kommt in der Zeile if not ... die Fehlermeldung das es Boolean sein muss.
Ich muss nun noch das gleiche mit dem (,) für die Tastatur auch nun für die Buttons machen. Habe das so gemacht, aber funktioniert nicht.
Nur den Code in den {} beachten, der Rest funktioniert ohne probleme.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure TFormTaschenrechner.Zeichenhinzu(Eingabefeld: TEdit; Eingabe: string); begin if Length(Eingabefeld.Text) <= 9 then begin if (Eingabe = ',') then if (pos (',', Eingabefeld.Text) > 0) then Eingabe := ''; if ((Eingabefeld.Text = '') and ((Eingabe = '0') or (Eingabe = ','))) then Eingabefeld.Text := '0,' else Eingabefeld.Text := Eingabefeld.Text+Eingabe; end;
end; |
|
|
WasWeißDennIch
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: Mo 29.09.14 09:03
CommaPossible ist doch eine Boolean-Funktion, hast Du sie auch in Deinen Code eingebaut?
|
|
GiuStyler
Beiträge: 65
Erhaltene Danke: 1
Win 8.1
Delphi XE6
|
Verfasst: Mo 29.09.14 09:12
Das hier
Delphi-Quelltext 1: 2: 3: 4:
| function CommaPossible(const s: string): Boolean; begin Result := (Pos(',', s) = 0) and (Length(s) < 10); end; |
muss ja unterhalb end; sein oder? und das hier
Delphi-Quelltext 1: 2: 3:
| if Key = ',' then if not CommaPossible((Sender as TEdit).Text) then Key := #0; |
muss in die procedure oder?
|
|
baumina
Beiträge: 305
Erhaltene Danke: 61
Win 7
Delphi 10.2 Tokyo Enterprise
|
Verfasst: Mo 29.09.14 09:29
Du solltest dich wirklich bei solch grundlegenden Programmierfragen an deinen Ausbilder wenden, oder ein paar Basics im Internet oder Büchern lesen. Der Weg jede einzelne Zeile deines Programmcodes hier zu erfragen hilft dir echt nicht und für uns ist es sehr anstrengend immer bei Adam und Eva anzufangen um dir eine Programmzeile zu erklären.
|
|
WasWeißDennIch
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: Mo 29.09.14 09:58
Das sehe ich genauso. Für den Einstieg kann ich diese Seite (englisch) empfehlen.
|
|
GiuStyler
Beiträge: 65
Erhaltene Danke: 1
Win 8.1
Delphi XE6
|
Verfasst: Mo 29.09.14 10:58
Danke. Werde ich mir mal anschauen. Mein Sprachenglisch ist nun nicht so besonderns, aber ich verstehe es zum Glück besser als das ich es spreche ^^
PS: Habe es nun auch bei den Buttons geschafft. Der Code sieht nun so aus und macht das gleiche für die Buttons wie das andere für die Tastatur.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TFormTaschenrechner.Zeichenhinzu(Eingabefeld: TEdit; Eingabe: string); begin if (Length(Eingabefeld.Text) > 10) and (pos (',', Eingabefeld.Text) > 0) then begin Eingabe := ''; end else if (Length(Eingabefeld.Text) > 9) and (pos (',', Eingabefeld.Text) = 0) then Eingabe := ''; if (Eingabe = ',') then if (pos (',', Eingabefeld.Text) > 0) then Eingabe := ''; if ((Eingabefeld.Text = '') and ((Eingabe = '0') or (Eingabe = ','))) then Eingabefeld.Text := '0,' else Eingabefeld.Text := Eingabefeld.Text+Eingabe; end; |
|
|
|