Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Edit genaue eingabe von Zahlen (https://www.delphipraxis.net/131844-edit-genaue-eingabe-von-zahlen.html)

oliver1 1. Apr 2009 07:20


Edit genaue eingabe von Zahlen
 
hallo,
ich habe vor kurzem angefangen zu Programmieren und wollte wissen wie ich es machen kann das keine Buchstaben eingegeben werden dürfen und genau 6 zahlen eingegeben werden müssen!!
Sonst soll eine Fehlermeldung erscheinen!
ich benutze Delphi Version 5.
wo genau soll es in das programm hingeschrieben werden???

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons;

type
  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);


  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
edit2.text:=FormatDateTime('ddmmyy', Now);
edit2.Visible:=false;
end;

procedure TForm1.Button1Click(Sender: TObject);
var a, b, ausgabe: integer ;

begin
a:=strtoint(edit1.text);
b:=strtoint(edit2.text);

ausgabe:= (a xor b xor 840917 mod 1000000);
edit3.text:=inttostr(ausgabe);

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
edit1.clear;
edit2.clear;
edit3.clear;
edit2.text:=FormatDateTime('ddmmyy', Now);
end;

end.
[edit=mkinzler]Tag korrigiert Mfg, mkinzler[/edit]

BAMatze 1. Apr 2009 07:26

Re: Edit genaue eingabe von Zahlen
 
Also du könntest dir eine eigene Komponente von TEdit ableiten und in der die Eingabe nur von bestimmten Zeichen zugelassen sind. Das halte ich für den einfachsten Weg.

oliver1 1. Apr 2009 07:30

Re: Edit genaue eingabe von Zahlen
 
und wie mach ich das dann genau und wo schreib ich das hin???
und wie mach ich das genau 6 zahlen in das edit-feld eingegeben werden müssen!

user0815 1. Apr 2009 07:35

Re: Edit genaue eingabe von Zahlen
 
In das OnKeyPress Event:

Delphi-Quellcode:
procedure TFormMain.Edit1KeyPress(Sender: TObject; var Key: Char);
const
  NURZAHLEN = ['0'..'9', #8];
begin
  if not (Key in NURZAHLEN) then Key := #0;
end;
OnExit

Delphi-Quellcode:
procedure TFormMain.Edit1Exit(Sender: TObject);
begin
  if Length(Edit1.Text) <> 6 then
  begin
    Edit1.SetFocus;
    Application.MessageBox(PAnsiChar('6 Zahlen'), 'Fehler', MB_OK + MB_ICONINFORMATION);
  end;
end;

himitsu 1. Apr 2009 07:41

Re: Edit genaue eingabe von Zahlen
 
oder ist euch schonmal die Eigenschaft .MaxLength bei den Edits aufgefallen? :angel2:

im OI den Wert von MaxLength auf 6 setzen :zwinker:

BAMatze 1. Apr 2009 07:45

Re: Edit genaue eingabe von Zahlen
 
Zitat:

Zitat von user0815
In das OnKeyPress Event:

Delphi-Quellcode:
procedure TFormMain.Edit1KeyPress(Sender: TObject; var Key: Char);
const
  NURZAHLEN = ['0'..'9', #8];
begin
  if not (Key in NURZAHLEN) then Key := #0;
end;
OnExit

Delphi-Quellcode:
procedure TFormMain.Edit1Exit(Sender: TObject);
begin
  if Length(Edit1.Text) <> 6 then
  begin
    Edit1.SetFocus;
    Application.MessageBox(PAnsiChar('6 Zahlen'), 'Fehler', MB_OK + MB_ICONINFORMATION);
  end;
end;

Hier sollte aber das Problem auftreten, dass die Entfern-Taste und auch BackSpace nicht mehr funktionieren. Also müsstest das alles nachprogrammieren oder duschaffst dir, wie ich gesagt hatte alles in eine neue von TEdit abgeleitete Komponente. =komponentenentwicklung]Hier ein sehr gutes Tutorial, wie man neue Komponenten erstellt. Hoffe das hilft dir.

MfG
BAMatze

oliver1 1. Apr 2009 07:46

Re: Edit genaue eingabe von Zahlen
 
maxlength hab ich schon auf 6 gehabt aber wenn man weniger als 6 zahlen eingeben hat geht es ja trotzdem :zwinker:

user0815 1. Apr 2009 07:47

Re: Edit genaue eingabe von Zahlen
 
@himitsu, dachte ich auch zuerst dran, aber laut Frage: "und genau 6 zahlen eingegeben werden müssen!!"

@BAMatze, das funktioniert

oliver1 1. Apr 2009 07:52

Re: Edit genaue eingabe von Zahlen
 
@ BAMatze
:-D :-D Danke für deine hilfe :-D :-D

himitsu 1. Apr 2009 07:53

Re: Edit genaue eingabe von Zahlen
 
ups, verlesen ... aber dann könnte man zumindestens noch die EditMask mit ausnutzen :)

DP-Maintenance 1. Apr 2009 09:43

DP-Maintenance
 
Dieses Thema wurde von "Phoenix" von "Fragen / Anregungen zur DP" nach "VCL / WinForms / Controls" verschoben.
Hat nix mit der DP zu tun

Jürgen Thomas 1. Apr 2009 10:02

Re: Edit genaue eingabe von Zahlen
 
Zitat:

Zitat von BAMatze
Also du könntest dir eine eigene Komponente von TEdit ableiten ...

Auch in Delphi 5 gibt es bereits TMaskEdit, worauf auch himitsu hinweist. Warum soll man das nicht nutzen... Jürgen

hoika 1. Apr 2009 12:10

Re: Edit genaue eingabe von Zahlen
 
Hallo,

um noch mal auf das genau 6 Zahlen zu kommen.

Vor dem Ausführen des Codes, der Edit1 neutzen soll

Delphi-Quellcode:
if Length(Edit1.Text)=6 then
begin
 // ok
end
else
begin
 // Fehler
end;

Heiko

Dipl Phys Ernst Winter 4. Mai 2009 12:13

Re: Edit genaue eingabe von Zahlen
 
Zitat:

ich ... wollte wissen wie ich es machen kann das ... genau 6 zahlen eingegeben werden müssen!!
Sonst soll eine Fehlermeldung erscheinen!
Du benotigst hierfür überhaupt keinen Code!

Nimm eine TMaskEdit Komponente, setze im ObjektInpektor AutoSelect=false, eine Maske '000000;1;' und eine Vorgabe '000000' für den Text.

Dein Anwender kann jetzt die Vorgabe überschreiben. Solange er nicht auf den abwegigen Gedanken kommt, eine der Ziffern zu Löschen ist alles oK. Anderenfalls wird er aufgefordert nach Esc die Änderung rückgangig zu machen. Mit

Delphi-Quellcode:
procedure TForm1.MaskEdit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Key=Vk_Delete) or (Key=Vk_Back) then Key:= 0
end;
kannst Du das Löschen ganz unterbinden und jegliche Fehlermeldung verhindern.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz