Editfeld ohne Buchstaben
Editfeld ohne Buchstaben
hallo zusammen,
zur Zeit arbeiten mein Kollege und ich an einem Projekt für die Uni. Es geht um die Simulation einer Glühlampe. An sich läuft das Programm und ist fast fertig. Allerdings haben wir ein Problem welches wir nicht gelöst bekommen. Und zwar bekommen wir es nicht hin, dass in den Editfeldern, welche zur erfassung der Werte für die Berechnungen sind, nur Zahlen einzugeben. Wenn wir dasProgramm vorstellen darf die Eingabe von Buchstaben in die Felder nicht möglich sein. Haben schon vieles Probiert und uns auch in alten Forenbeiträgen informiert, allerdings ohne erfolg. Vielleicht kann uns ja hier jemand helfen, da unser Abgabetermin Anfang November ist und uns die Zeit davon läuft. Danke schonmal im Vorfeld
lg Philip
zur Zeit arbeiten mein Kollege und ich an einem Projekt für die Uni. Es geht um die Simulation einer Glühlampe. An sich läuft das Programm und ist fast fertig. Allerdings haben wir ein Problem welches wir nicht gelöst bekommen. Und zwar bekommen wir es nicht hin, dass in den Editfeldern, welche zur erfassung der Werte für die Berechnungen sind, nur Zahlen einzugeben. Wenn wir dasProgramm vorstellen darf die Eingabe von Buchstaben in die Felder nicht möglich sein. Haben schon vieles Probiert und uns auch in alten Forenbeiträgen informiert, allerdings ohne erfolg. Vielleicht kann uns ja hier jemand helfen, da unser Abgabetermin Anfang November ist und uns die Zeit davon läuft. Danke schonmal im Vorfeld
lg Philip
Re: Editfeld ohne Buchstaben
Schau mal unter dem Suchbegriff "MaskEdit". Hilfsweise könnte auch im Ereignis OnKeyDown des Edit-Feldes der jeweils eingegeben Key (Taste) geprüft werden, ob er eine Zahl darstellt oder nicht.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: Editfeld ohne Buchstaben
Oder nimm TSpinEdit oder TFloatSpinEdit
- Ally
- Beiträge: 283
- Registriert: Do 11. Jun 2009, 09:25
- OS, Lazarus, FPC: Win und Lazarus Stable release
- CPU-Target: x64
Re: Editfeld ohne Buchstaben
Hallo Philip,
ich habe mir mal die angehängte Komponente (NumEdit) gebastelt.
Vielleicht ist das ja genau das was du suchst.
Die Eingabe ist gut gegen Fehleingaben, auch gegen Einfügen über die Zwischenablage, abgesichert.
MfG
ich habe mir mal die angehängte Komponente (NumEdit) gebastelt.
Vielleicht ist das ja genau das was du suchst.
Die Eingabe ist gut gegen Fehleingaben, auch gegen Einfügen über die Zwischenablage, abgesichert.
MfG
Zuletzt geändert von Ally am Mi 23. Okt 2013, 17:34, insgesamt 1-mal geändert.
- Ally
- Beiträge: 283
- Registriert: Do 11. Jun 2009, 09:25
- OS, Lazarus, FPC: Win und Lazarus Stable release
- CPU-Target: x64
Re: Editfeld ohne Buchstaben
Entschuldigung - falscher Anhang.
Hier der Richtige

Hier der Richtige
- Dateianhänge
-
NumEdit.zip
- (4.59 KiB) 87-mal heruntergeladen
Re: Editfeld ohne Buchstaben
Danke.
Werde das heute abend ausprobieren. Halte euch auf dem Luafenden
Werde das heute abend ausprobieren. Halte euch auf dem Luafenden

Re: Editfeld ohne Buchstaben
Über das Erieignis OnKeyDown bekomme ich immer einnen fatalenn Fehler.
hatte es damit versucht.
@Ally: Ich habe Probleme deine Komponente in mein Programm zu integrieren. Bekomme immer neue Fehler... Gibt es eine möglichkeit die Komponente direkt in mein Programm zu laden?
hatte es damit versucht.
Code: Alles auswählen
if not ((key in [0..9]) or (key = 8) or ((Shift = [ssAlt]) and (key = 115)) or ((Shift = [ssCtrl, ssAlt]) and (key = 12))) then
begin
key := $0;
//MessageBeep(0);
Zuletzt geändert von Lori am Fr 1. Nov 2013, 12:44, insgesamt 1-mal geändert.
Grund: Highlighter
Grund: Highlighter
- Ally
- Beiträge: 283
- Registriert: Do 11. Jun 2009, 09:25
- OS, Lazarus, FPC: Win und Lazarus Stable release
- CPU-Target: x64
Re: Editfeld ohne Buchstaben
Hallo Philip,
die Komponente muss man über Package / Package-Datei (.lpk) öffnen... installieren.
Anschließend kann man sie wie jede andere Komponente auf dem Form platzieren und benutzen.
Mfg
p.s. ich nutze Lazarus 1.12 und Win
die Komponente muss man über Package / Package-Datei (.lpk) öffnen... installieren.
Anschließend kann man sie wie jede andere Komponente auf dem Form platzieren und benutzen.
Mfg
p.s. ich nutze Lazarus 1.12 und Win
Re: Editfeld ohne Buchstaben
Phil_1905 hat geschrieben:if not ((key in [0..9]) or (key =or ((Shift = [ssAlt]) and (key = 115)) or ((Shift = [ssCtrl, ssAlt]) and (key = 12))) then
begin
key := $0;
Falls du das unbeding selber machen willst, nutze doch eine "Case"-Abfrage (Achtung Key ist ein Word, kein Char oder Byte!) z.B:
Code: Alles auswählen
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState
);
begin
case Key of
48..59, //0..9
8, //BackSpace
37, //Pfeil Links
39:; //Pfeil Rechts
// ... //etc.
// else Caption:=IntToStr(Key);
else Key:=0;
end;
end;
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: Editfeld ohne Buchstaben
okay danke.
wie benutze ich denn genau TMaskEdit? Arbeite hier nur von einem Fehler zum anderen.
Ich benutze Lazarus 1.0
wie benutze ich denn genau TMaskEdit? Arbeite hier nur von einem Fehler zum anderen.
Ich benutze Lazarus 1.0
Re: Editfeld ohne Buchstaben
TMaskEdit einfach wie ein normales TEdit auf die Form schieben, dann die gewünschte Maske z.B. im Objektinspektor unter Eigenschaft "EditMask" einstellen. Was alles möglich ist, hatte ich oben in dem Link gepostet, eine bessere Beschreibung habe ich nicht gefunden. Eine Maske könnte dann z.B. so aussehen:
!###,##;1;_
Das ists. Am besten ein bischen damit experimentieren.
Ansonsten, sollen nur Ganzzahlen (mit fester Ober- und Untergrenze) eingegeben werden können, ist evtl. TSpinEdit (wie von wp_xyz empfohlen) für dich das Richtige?! Oder evtl. TFloatSpinEdit, für Float-/Gleitkommazahlen?! Sind auch standardmäßig bei Lazarus dabei!
[Edit] Ich zitiiere mal den Link, bevor er evtl. irgendwann mal down ist (ist allerdings für Delphi, weiss nicht, ob 100%ig gleich in Lazarus?!):
!###,##;1;_
Das ists. Am besten ein bischen damit experimentieren.
Ansonsten, sollen nur Ganzzahlen (mit fester Ober- und Untergrenze) eingegeben werden können, ist evtl. TSpinEdit (wie von wp_xyz empfohlen) für dich das Richtige?! Oder evtl. TFloatSpinEdit, für Float-/Gleitkommazahlen?! Sind auch standardmäßig bei Lazarus dabei!
[Edit] Ich zitiiere mal den Link, bevor er evtl. irgendwann mal down ist (ist allerdings für Delphi, weiss nicht, ob 100%ig gleich in Lazarus?!):
Die Eigenschaft EditMask definiert die Maske, mit der festgelegt wird, welche Eingaben im maskierten Steuerelement gültig sind.
property EditMask: string;
Beschreibung
Mit Hilfe der Eigenschaft EditMask können Sie festlegen, welche Zeichen und Formate im maskierten Steuerelement gültig sind. Versucht der Benutzer, ein ungültiges Zeichen einzugeben, wird dieses nicht angenommen. Die Überprüfung wird von der Methode ValidateEdit zeichenweise durchgeführt.
Eine Maske besteht aus drei Feldern, die durch Semikolons voneinander getrennt sind. Das erste Feld ist die Maske selbst. Das zweite Feld besteht aus einem Zeichen und bestimmt, ob die literalen Zeichen der Maske mit den Daten gespeichert werden. Das dritte Feld legt das Zeichen fest, das für noch nicht eingegebene Zeichen angezeigt wird.
Die folgenden speziellen Zeichen werden im ersten Feld der Maske verwendet:
Zeichen Bedeutung in der Maske
! Das Zeichen ! gibt in einer Maske an, daß optionale Zeichen als führende Leerzeichen dargestellt werden. Ist kein !-Zeichen vorhanden, werden optionale Zeichen im EditText-Objekt als abschließende Leerzeichen dargestellt.
> Wird das Zeichen > in einer Maske angegeben, werden alle nachfolgenden Zeichen in Großbuchstaben umgewandelt, bis das Ende der Maske erreicht ist oder das Zeichen < angetroffen wird.
< Wird das Zeichen < in einer Maske angegeben, werden alle nachfolgenden Zeichen in Kleinbuchstaben umgewandelt, bis das Ende der Maske erreicht ist oder das Zeichen > angetroffen wird.
<> Werden diese beiden Zeichen zusammen verwendet, findet keine Überprüfung der Groß-/Kleinschreibung statt. Die Daten werden in der Schreibweise formatiert, in der sie vom Benutzer eingegeben werden.
\ Nach dem Zeichen \ folgt ein literales Zeichen. Mit seiner Hilfe können die speziellen Maskenzeichen als Literale in den Daten angegeben werden.
L An dieser Stelle muß ein Buchstabe (A-Z, a-z) eingegeben werden.
l An dieser Stelle ist ausschließlich ein Buchstabe erlaubt. Eine Eingabe ist jedoch nicht erforderlich.
A An dieser Stelle muß ein alphanumerisches Zeichen (A-Z, a-z, 0-9) eingegeben werden.
a An dieser Stelle ist ausschließlich ein alphanumerisches Zeichen erlaubt. Eine Eingabe ist jedoch nicht erforderlich.
C An dieser Stelle muß ein beliebiges Zeichen eingegeben werden.
c An dieser Stelle kann ein beliebiges Zeichen eingegeben werden. Eine Eingabe ist jedoch nicht erforderlich.
0 An dieser Stelle muß ein numerisches Zeichen eingegeben werden.
9 An dieser Stelle darf ausschließlich ein numerisches Zeichen angegeben werden. Eine Eingabe ist jedoch nicht erforderlich.
# An dieser Stelle darf ausschließlich ein numerisches Zeichen oder ein Plus- bzw. Minuszeichen eingegeben werden. Eine Eingabe ist jedoch nicht erforderlich.
: Das Zeichen : wird verwendet, um in Zeitangaben Stunden, Minuten und Sekunden zu trennen. Ist unter Ländereinstellungen in der Systemsteuerung ein anderes Trennzeichen eingestellt, wird dieses statt dessen verwendet.
/ Mit dem Zeichen / werden in einer Datumsangabe der Monat, der Tag und das Jahr voneinander getrennt. Ist unter Ländereinstellungen in der Systemsteuerung ein anderes Trennzeichen eingestellt, wird dieses statt dessen verwendet..
; Das Zeichen ; wird verwendet, um die drei Felder der Maske voneinander zu trennen.
_ Das Zeichen _ fügt automatisch Leerzeichen in den Text ein. Bei der Eingabe in das Feld werden diese Zeichen vom Cursor übersprungen.
Alle nicht in der Tabelle aufgeführten Zeichen können im ersten Feld der Maske als literale Zeichen angegeben werden. Literale Zeichen werden automatisch eingefügt und vom Cursor beim Bearbeiten übersprungen. Die speziellen Maskenzeichen können auch als Literale angegeben werden, sofern ihnen das Zeichen \ vorangestellt wird.
Das Zeichen im zweiten Feld der Maske gibt an, ob die in der Maske enthaltenen literalen Zeichen zusammen mit dem Text des Eingabefeldes gespeichert werden. So kann beispielsweise die Maske für eine Telefonnummer mit Vorwahl folgendermaßen angegeben werden:
(00000)_0000000;0;*
Der Wert 0 im zweiten Feld gibt an, daß die Eigenschaft Text des Steuerelements aus den 10 einzugebenden Ziffern besteht und nicht aus den 14 Zeichen, aus denen sich die Nummer im Eingabefeld zusammensetzt.
Eine 0 im zweiten Feld legt fest, daß Literale nicht gespeichert werden. Bei jedem anderen Zeichen werden sie als Teil des Textes behandelt. Dieser Wert kann mit der Eigenschaft EditMask im Objektinspektor oder im Programm durch Ändern der typisierten Konstante MaskNoSave eingestellt werden.
Das dritte Feld der Maske enthält das Zeichen, das im Eingabefeld für Leerstellen (nicht eingegebene Zeichen) angezeigt wird. In der Voreinstellung entspricht es dem für literale Leerzeichen verwendeten Zeichen. Beide Zeichen werden im Eingabefenster identisch angezeigt. Gibt der Benutzer jedoch Informationen in das Feld ein, werden die Leerstellen der Reihe nach ausgewählt, während die Leerzeichen übersprungen werden.
Bei Angabe eines leeren Strings für EditMask wird die Maske entfernt.
Hinweis
Bei Multibyte-Zeichensätzen wie dem japanischen Shift-JIS entspricht jedes Maskenzeichen einem einzelnen Byte. Zum Festlegen von Doppelbyte-Zeichen mit den Bezeichern L, l, A, a, C oder c müssen die Maskenzeichen auch verdoppelt werden. LL stellt beispielsweise zwei alphabetische Einzelbyte-Zeichen oder ein Doppelbyte-Zeichen dar. Es werden nur literale Einzelbyte-Zeichen unterstützt.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;