Für Java-Spezialisten

Juelin

Bekanntes Mitglied
Hallo Gemeinde,
wie vielleicht einige wissen komme ich von Delphi her und lerne jetzt Java.
Bei uns gab es einen Spruch.
Die meisten Computerfehler sitzen vor dem Bildschirm.
Und das stimmt.
Hier kommt was für absolute Java-Spezialisten.
Nun sollte man, als guter Programmierer, versuchen so viel wie möglich zu verhindern,
das der Anwender Fehler machen kann.
z. B. bei einer Eingabe (ist ja immer ein Textfeld und es können alle Zeichen eingegeben werden)
- bei Integer-Wert nur Zahlen und eventuell Vorzeichen
- bei Double-Wert nur Zahlen und eventuell Komma und Vorzeichen
- bei String-Wert alles
- bei Datum-Wert nur Zahlen und zwei Punkte und Gültigkeit prüfen
- bei Uhrzeit-Wert nur Zhalen und zwei Doppelpunkte und Gültigkeit prüfen
eingeben lassen.
So kann der Anwender schon gar kein Fehler machen und man erspart sich Ärger.
In Delphi habe ich das gemacht (Jetzt kommen Object-Pascal Befehle).

Vor der Eingabe (Variable initialisieren)
Code:
    Edit1.Enabled:=True;
    Edit1.Color:=clWhite;
    Edit1.Font.Color:=clBlue;
    Edit1.ReadOnly:=False;
    Edit1.Text:='';
    ialpha:='';
    inummer:=0;
    iart:=2;
    inumkom:=0;
    ikomma:=0;
    izeich:=3;
    istell:=0;
    ifunc:=6;
    ilanmax:=10;
    ilanmin:=1;
    iautocr:=1;
    Form3.ActiveControl:=Edit1;

Der eigentlich Code während der Eingabe
Code:
unit Eingabe;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

var
  itaste:   char;     // Tastencode
  ifunc:    integer;  // Funktion
                      // 1 = nummerisch ohne Komma ohne Vorzeichen
                      // 2 = nummerich ohne Komma mit Vorzeichen
                      // 3 = nummerisch mit Komma ohne Vorzeichen
                      // 4 = nummerisch mit Komma mit Vorzeichen
                      // 5 = Alphanummerisch
                      // 6 = Datum
                      // 7 = Telefonnummer
                      // 8 = Uhrzeit
   ilanmax: integer;  // Eingabelaenge maximal
   ilanmin: integer;  // Eingabelaenge minimal
   ikomma:  integer;  // Anzahl Nachkommastellen
   iart:    integer;  // Eingabeart
                      // 1 = vorher/nachher anzeigen
                      // 2 = nachher anzeigen
                      // 3 = Stern anzeigen
                      // 4 = nicht anzeigen
                      // 5 = Überschreiben (nur bei ifunc=5)
                      // 6 = Einfügen (nur bei ifunc=5)
   izeich:  integer;  // Zeichenart
                      // 1 = nur Kleinbuchstaben
                      // 2 = nur Grossbuchstaben
                      // 3 = Gross- und Kleinbuchstaben
   iautocr: integer;  // Automatischer Feldsprung
                      // 0 = nein
                      // 1 = ja
   istell:  integer;  // Eingabestelle (vorher immer 0)
   imkom:   integer;  // Merker ob Komma eingegeben worden
   iminus:  integer;  // Merker Plus/Minus 0/1
   ialpha:  string;   // Eingabefeld Alphanummerisch
   inummer: integer;  // Eingabefeld nummerisch mit Vorzeichen
   inumkom: double;   // Eingabefeld nummerisch mit Vorueichen und Komma
   ivz: integer;
   ivk: integer;
   iko: integer;
   ink: integer;
   ivkl: integer;
   procedure FeldEingabe(einfeld: TEdit);

implementation

procedure FeldEingabe(einfeld: TEdit);
 var numm:    integer;
 var htaste:  char;
 var hstell:  integer;
 var hleer:   string;
 var hstern:  string;
 var xstern:  string;
 var hilf1:   integer;
 var hilf2:   integer;
 var hilf3:   integer;
 var hilf4:   integer;
 var hilf5:   string;
 var hilf6:   string;
 var hilf7:   double;
 var hilf8:   integer;
 var hilf9:   integer;

begin
  if ((iart = 5) and (ifunc = 5)) then
  begin
    hilf1:=einfeld.SelStart+1;
    if (izeich = 1) then
    begin
      hilf5:=itaste;
      hilf6:=LowerCase(hilf5);
      itaste:=hilf6[1];
    end;
    if (izeich = 2) then
    begin
      hilf5:=itaste;
      hilf6:=UpperCase(hilf5);
      itaste:=hilf6[1];
    end;
    if hilf1 > ilanmax then
    begin
      einfeld.Text:=ialpha;
      itaste:=char(0);
    end else begin
      hilf5:='';
      hilf6:='';
      if itaste <> chr(13) then
      begin
        if hilf1 > 1 then
        begin
          hilf5:=Copy(einfeld.Text,1,hilf1-1);
        end;
        if hilf1 < ilanmax then
        begin
          hilf2:=ilanmax-hilf1;
          hilf6:=Copy(einfeld.Text,hilf1+1,hilf2);
        end;
        if itaste = char(8) then
        begin
         ialpha:=hilf5+hilf6;
         if hilf1 > 1 then
         begin
           hilf1:=hilf1 - 1;
         end;
        end else begin
         ialpha:=hilf5+char(itaste)+hilf6;
        end;
        itaste:=char(0);
      end else begin
        ialpha:=einfeld.Text;
      end;
      einfeld.Text:=ialpha;
    end;
    einfeld.SelStart:=hilf1;
    einfeld.Update;
  end else begin
    if ((iart = 6) and (ifunc = 5)) then
    begin
      hilf1:=einfeld.SelStart+1;
      if (izeich = 1) then
      begin
        hilf5:=itaste;
        hilf6:=LowerCase(hilf5);
        itaste:=hilf6[1];
      end;
      if (izeich = 2) then
      begin
        hilf5:=itaste;
        hilf6:=UpperCase(hilf5);
        itaste:=hilf6[1];
      end;
      if hilf1 > ilanmax then
      begin
        einfeld.Text:=ialpha;
        itaste:=char(0);
      end else begin
        hilf5:='';
        hilf6:='';
        if itaste <> chr(13) then
        begin
          if hilf1 > 1 then
          begin
            hilf5:=Copy(einfeld.Text,1,hilf1-1);
          end;
          if hilf1 < ilanmax then
          begin
            hilf2:=ilanmax-hilf1;
            hilf6:=Copy(einfeld.Text,hilf1,hilf2);
          end;
          if itaste = char(8) then
          begin
           ialpha:=hilf5+hilf6;
           if hilf1 > 1 then
           begin
             hilf1:=hilf1 - 1;
           end;
         end else begin
            ialpha:=hilf5+char(itaste)+hilf6;
          end;
          itaste:=char(0);
        end;
        einfeld.Text:=ialpha;
      end;
      einfeld.SelStart:=hilf1;
      einfeld.Update;
    end else begin
      if iart > 4 then
      begin
        iart:=1;
      end;
      numm:=ord(itaste);
      hstell:=ilanmax;
      hleer:='';
      hstern:='';
      for hilf1:=1 to ilanmax do
      begin
        hleer:=hleer+' ';
        hstern:=hstern+'*';
      end;
      if (istell = 0) then
      begin
        imkom:=0;
        iminus:=0;
        ivz:=0;
        ivk:=0;
        iko:=0;
        ink:=0;
        ivkl:=0;
        if (ifunc = 2) then
        begin
          ivkl:=ilanmax - 1;
        end;
        if (ifunc = 3) then
        begin
          ivkl:=ilanmax - ikomma - 1;
        end;
        if (ifunc = 4) then
        begin
          ivkl:=ilanmax - ikomma - 2;
        end;
        if (ifunc = 7) then
        begin
          ivkl:=ilanmax - 1;
        end;
        if (iart > 1) then
        begin
          inummer:=0;
          inumkom:=0;
          ialpha:=hleer;
          einfeld.Text:=hleer;
        end else begin
          if (ifunc = 1) then
          begin
            hilf5:='%';
            hilf6:=Format('%d', [ilanmax]);
            hilf5:=hilf5+hilf6+'d';
            ialpha:=Format(hilf5, [inummer]);
            einfeld.Text:=ialpha;
          end;
          if (ifunc = 2) then
          begin
            hilf5:='%-';
            hilf6:=Format('%d', [hstell]);
            hilf5:=hilf5+hilf6+'d';
            ialpha:=Format(hilf5, [inummer]);
            einfeld.Text:=ialpha;
            hilf5:=Copy(ialpha, 1, 1);
            if (hilf5 = '-') then
            begin
              iminus:=1;
            end;
          end;
          if (ifunc = 3) then
          begin
            hilf5:='%';
            hilf4:=ilanmax - ikomma - 1;
            hilf6:=Format('%d', [hilf4]);
            hilf5:=hilf5+hilf6+'.';
            hilf6:=Format('%d', [ikomma]);
            hilf5:=hilf5+hilf6+'f';
            ialpha:=Format(hilf5, [inumkom]);
            einfeld.Text:=ialpha;
            for hilf4:=1 to ilanmax do
            begin
              hilf5:=Copy(ialpha, hilf4, 1);
              if (hilf5 = ',') then
              begin
                imkom:=hilf4;
              end;
            end;
          end;
          if (ifunc = 4) then
          begin
            hilf5:='%-';
            hilf4:=ilanmax - ikomma - 2;
            hilf6:=Format('%d', [hilf4]);
            hilf5:=hilf5+hilf6+'.';
            hilf6:=Format('%d', [ikomma]);
            hilf5:=hilf5+hilf6+'f';
            ialpha:=Format(hilf5, [inumkom]);
            einfeld.Text:=ialpha;
            hilf5:=Copy(ialpha, 1, 1);
            if (hilf5 = '-') then
            begin
              iminus:=1;
            end;
            for hilf4:=1 to ilanmax do
            begin
              hilf5:=Copy(ialpha, hilf4, 1);
              if (hilf5 = ',') then
              begin
                imkom:=hilf4;
              end;
            end;
          end;
          if (ifunc = 5) then
          begin
            einfeld.Text:=ialpha;
          end;
          if (ifunc = 6) then
          begin
            einfeld.Text:=ialpha;
          end;
          if (ifunc = 7) then
          begin
            einfeld.Text:=ialpha;
          end;
          if (ifunc = 8) then
          begin
            einfeld.Text:=ialpha;
          end;
        end;
      einfeld.update;
      end;
      if (istell >= hstell) then
      begin
        itaste:=chr(0);
        numm:=0;
        if (iautocr = 1) then
        begin
          itaste:=chr(13);
          numm:=13;
        end;
      end;
// Tastenwerte 8=Backspace 13=Enter 43=+ 44=, 45=- 46=. 48-57=0-9
      if ((numm = 13) and (istell < ilanmin)) then
      begin
        itaste:=chr(0);
        numm:=0;
        if (istell = 0) then
        begin
          itaste:=chr(13);
          if (ifunc = 1) then
          begin
            hilf5:='%';
            hilf6:=Format('%d', [ilanmax]);
            hilf5:=hilf5+hilf6+'d';
            ialpha:=Format(hilf5, [inummer]);
            einfeld.Text:=ialpha;
          end;
          if (ifunc = 2) then
          begin
            hilf5:='%-';
            hilf6:=Format('%d', [hstell]);
            hilf5:=hilf5+hilf6+'d';
            ialpha:=Format(hilf5, [inummer]);
            einfeld.Text:=ialpha;
            hilf5:=Copy(ialpha, 1, 1);
            if (hilf5 = '-') then
            begin
              iminus:=1;
            end;
          end;
          if (ifunc = 3) then
          begin
            hilf5:='%';
            hilf4:=ilanmax - ikomma - 1;
            hilf6:=Format('%d', [hilf4]);
            hilf5:=hilf5+hilf6+'.';
            hilf6:=Format('%d', [ikomma]);
            hilf5:=hilf5+hilf6+'f';
            ialpha:=Format(hilf5, [inumkom]);
            einfeld.Text:=ialpha;
            for hilf4:=1 to ilanmax do
            begin
              hilf5:=Copy(ialpha, hilf4, 1);
              if (hilf5 = ',') then
              begin
                imkom:=hilf4;
              end;
            end;
          end;
          if (ifunc = 4) then
          begin
            hilf5:='%-';
            hilf4:=ilanmax - ikomma - 2;
            hilf6:=Format('%d', [hilf4]);
            hilf5:=hilf5+hilf6+'.';
            hilf6:=Format('%d', [ikomma]);
            hilf5:=hilf5+hilf6+'f';
            ialpha:=Format(hilf5, [inumkom]);
            einfeld.Text:=ialpha;
            hilf5:=Copy(ialpha, 1, 1);
            if (hilf5 = '-') then
            begin
              iminus:=1;
            end;
            for hilf4:=1 to ilanmax do
            begin
              hilf5:=Copy(ialpha, hilf4, 1);
              if (hilf5 = ',') then
              begin
                imkom:=hilf4;
              end;
            end;
          end;
          if (ifunc = 5) then
          begin
            einfeld.Text:=ialpha;
          end;
          if (ifunc = 6) then
          begin
            einfeld.Text:=ialpha;
          end;
          if (ifunc = 7) then
          begin
            einfeld.Text:=ialpha;
          end;
          if (ifunc = 8) then
          begin
            einfeld.Text:=ialpha;
          end;
          if (iart = 3) then
          begin
            xstern:='';
            if istell > 0 then
            begin
              for hilf9:=1 to istell do
              begin
                xstern:=xstern+'*';
              end;
            end;
            einfeld.Text:=xstern;
          end;
          if (iart = 4) then
          begin
            einfeld.Text:=hleer;
          end;
          einfeld.update;
        end;
      end;
      htaste:=itaste;
      if ((ifunc = 1) or (ifunc = 2) or (ifunc = 3) or (ifunc = 4)) then
      begin
        if ((numm <> 8) and (numm <> 13)) then
        begin
          itaste:=chr(0);
        end;
      end;
      if (ifunc = 6) then
      begin
        if ((numm <> 8) and (numm <> 13)) then
        begin
          itaste:=chr(0);
        end;
      end;
      if (ifunc = 7) then
      begin
        if ((numm <> 8) and (numm <> 13)) then
        begin
          itaste:=chr(0);
        end;
      end;
      if (ifunc = 8) then
      begin
        if ((numm <> 8) and (numm <> 13)) then
        begin
          itaste:=chr(0);
        end;
      end;
      if ((numm = 8) and (istell > 0)) then
      begin
        if (istell = imkom) then
        begin
          imkom:=0;
          iko:=0;
        end;
        istell:=istell - 1;
        if (istell = 0) then
        begin
          iminus:=0;
          ivz:=0;
          ivk:=0;
          iko:=0;
          ink:=0;
          ivkl:=0;
          if (ifunc = 2) then
          begin
            ivkl:=ilanmax - 1;
          end;
          if (ifunc = 3) then
          begin
            ivkl:=ilanmax - ikomma - 1;
          end;
          if (ifunc = 4) then
          begin
            ivkl:=ilanmax - ikomma - 2;
          end;
          if (ifunc = 7) then
          begin
            ivkl:=ilanmax - 1;
          end;
        end;
        if ((ifunc = 1) or (ifunc = 2)) then
        begin
          if (inummer < 0) then
          begin
            inummer:=inummer * -1;
          end;
          hilf7:=inummer;
          hilf7:=hilf7 / 10;
          inummer:=Trunc(hilf7);
          if ((ifunc = 2) and (iminus = 1) and (inummer > 0) and (istell > 0)) then
          begin
            inummer:=inummer * -1;
          end;
        end;
        if ((ifunc = 5) or (ifunc = 6) or (ifunc = 7) or (ifunc = 8)) then
        begin
          hilf5:=ialpha;
          ialpha:='';
          if (istell > 0) then
          begin
            ialpha:=Copy(hilf5, 1, istell);
          end;
          hilf3:=ilanmax - istell;
          for hilf1:=1 to hilf3 do
          begin
            ialpha:=ialpha+' ';
          end;
        end;
      end;
      if ((numm = 8) and (istell = 0)) then
      begin
        itaste:=chr(0);
        numm:=0;
        ivz:=0;
        ivk:=0;
        iko:=0;
        ink:=0;
        ivkl:=0;
        if (ifunc = 2) then
        begin
          ivkl:=ilanmax - 1;
        end;
        if (ifunc = 3) then
        begin
          ivkl:=ilanmax - ikomma - 1;
        end;
        if (ifunc = 4) then
        begin
          ivkl:=ilanmax - ikomma - 2;
        end;
        if (ifunc = 7) then
        begin
          ivkl:=ilanmax - 1;
        end;
      end;
      if ((istell = 0) and (numm <> 13) and (numm <> 0)) then
      begin
        imkom:=0;
        iminus:=0;
        inummer:=0;
        inumkom:=0;
        ialpha:=hleer;
        einfeld.Text:=ialpha;
        if (ifunc = 2) then
        begin
          hilf5:='%-';
          hilf6:=Format('%d', [hstell]);
          hilf5:=hilf5+hilf6+'d';
          ialpha:=Format(hilf5, [inummer]);
          hilf5:=Copy(ialpha, 1, 1);
          if (hilf5 = '-') then
          begin
            iminus:=1;
          end;
        end;
        if (ifunc = 3) then
        begin
          hilf5:='%';
          hilf4:=ilanmax - ikomma - 1;
          hilf6:=Format('%d', [hilf4]);
          hilf5:=hilf5+hilf6+'.';
          hilf6:=Format('%d', [ikomma]);
          hilf5:=hilf5+hilf6+'f';
          ialpha:=Format(hilf5, [inumkom]);
          if (iko = 1) then
          begin
            for hilf4:=1 to ilanmax do
            begin
              hilf5:=Copy(ialpha, hilf4, 1);
              if (hilf5 = ',') then
              begin
                imkom:=hilf4;
              end;
            end;
          end;
        end;
        if (ifunc = 4) then
        begin
          hilf5:='%-';
          hilf4:=ilanmax - ikomma - 2;
          hilf6:=Format('%d', [hilf4]);
          hilf5:=hilf5+hilf6+'.';
          hilf6:=Format('%d', [ikomma]);
          hilf5:=hilf5+hilf6+'f';
          ialpha:=Format(hilf5, [inumkom]);
          hilf5:=Copy(ialpha, 1, 1);
          if (hilf5 = '-') then
          begin
            iminus:=1;
          end;
          if (iko = 1) then
          begin
            for hilf4:=1 to ilanmax do
            begin
              hilf5:=Copy(ialpha, hilf4, 1);
              if (hilf5 = ',') then
              begin
                imkom:=hilf4;
              end;
            end;
          end;
        end;
        if (iart = 3) then
        begin
          xstern:='';
          if istell > 0 then
          begin
            for hilf9:=1 to istell do
            begin
              xstern:=xstern+'*';
            end;
          end;
          einfeld.Text:=xstern;
        end;
        if (iart = 4) then
        begin
          einfeld.Text:=hleer;
        end;
        einfeld.update;
      end;
      if ((ifunc = 5) and (ord(itaste) > 0) and (numm <> 8) and (numm <> 13)) then
      begin
        if (izeich = 1) then
        begin
          hilf5:=itaste;
          hilf6:=LowerCase(hilf5);
          itaste:=hilf6[1];
          numm:=ord(itaste);
        end;
        if (izeich = 2) then
        begin
          hilf5:=itaste;
          hilf6:=UpperCase(hilf5);
          itaste:=hilf6[1];
          numm:=ord(itaste);
        end;
        if (iart = 3) then
        begin
          itaste:='*';
        end;
        if (iart = 4) then
        begin
          itaste:=' ';
        end;
      end;
      if ((ifunc = 6) and (ord(itaste) > 0) and (numm <> 8) and (numm <> 13)) then
      begin
        if (izeich = 1) then
        begin
          hilf5:=itaste;
          hilf6:=LowerCase(hilf5);
          itaste:=hilf6[1];
          numm:=ord(itaste);
        end;
        if (izeich = 2) then
        begin
          hilf5:=itaste;
          hilf6:=UpperCase(hilf5);
          itaste:=hilf6[1];
          numm:=ord(itaste);
        end;
        if (iart = 3) then
        begin
          itaste:='*';
        end;
        if (iart = 4) then
        begin
          itaste:=' ';
        end;
      end;
      if ((ifunc = 7) and (ord(itaste) > 0) and (numm <> 8) and (numm <> 13)) then
      begin
        if (izeich = 1) then
        begin
          hilf5:=itaste;
          hilf6:=LowerCase(hilf5);
          itaste:=hilf6[1];
          numm:=ord(itaste);
        end;
        if (izeich = 2) then
        begin
          hilf5:=itaste;
          hilf6:=UpperCase(hilf5);
          itaste:=hilf6[1];
          numm:=ord(itaste);
        end;
        if (iart = 3) then
        begin
          itaste:='*';
        end;
        if (iart = 4) then
        begin
          itaste:=' ';
        end;
      end;
      if ((ifunc = 8) and (ord(itaste) > 0) and (numm <> 8) and (numm <> 13)) then
      begin
        if (izeich = 1) then
        begin
          hilf5:=itaste;
          hilf6:=LowerCase(hilf5);
          itaste:=hilf6[1];
          numm:=ord(itaste);
        end;
        if (izeich = 2) then
        begin
          hilf5:=itaste;
          hilf6:=UpperCase(hilf5);
          itaste:=hilf6[1];
          numm:=ord(itaste);
        end;
        if (iart = 3) then
        begin
          itaste:='*';
        end;
        if (iart = 4) then
        begin
          itaste:=' ';
        end;
      end;
      if ((numm > 47) and (numm < 58)) then
      begin
        if ((ifunc = 1) or (ifunc = 5)) then
        begin
          itaste:=htaste;
          if (iart = 3) then
          begin
            itaste:='*';
          end;
          if (iart = 4) then
          begin
            itaste:=' ';
          end;
        end;
        if (ifunc = 6) then
        begin
          itaste:=htaste;
          if (iart = 3) then
          begin
            itaste:='*';
          end;
          if (iart = 4) then
          begin
            itaste:=' ';
          end;
        end;
        if (ifunc = 7) then
        begin
          if (ivk < ivkl) then
          begin
            itaste:=htaste;
            if (iart = 3) then
            begin
              itaste:='*';
            end;
            if (iart = 4) then
            begin
              itaste:=' ';
            end;
          end;
        end;
        if (ifunc = 8) then
        begin
          itaste:=htaste;
          if (iart = 3) then
          begin
            itaste:='*';
          end;
          if (iart = 4) then
          begin
            itaste:=' ';
          end;
        end;
        if ((ifunc = 2) or (ifunc = 3) or (ifunc = 4)) then
        begin
          if (ivk < ivkl) then
          begin
            itaste:=htaste;
            ivk:=ivk + 1;
            if (iart = 3) then
            begin
              itaste:='*';
            end;
            if (iart = 4) then
            begin
              itaste:=' ';
            end;
          end;
        end;
        if ((ifunc = 2) or (ifunc = 3) or (ifunc = 4)) then
        begin
          if (iko = 1) then
          begin
            if (ink < ikomma) then
            begin
              itaste:=htaste;
              ivk:=ivk + 1;
              if (iart = 3) then
              begin
                itaste:='*';
              end;
              if (iart = 4) then
              begin
                itaste:=' ';
              end;
            end;
          end;
        end;
      end;
      if (ifunc = 6) then
      begin
        if (numm = 46) then
        begin
          itaste:=htaste;
          if (iart = 3) then
          begin
            itaste:='*';
          end;
          if (iart = 4) then
          begin
            itaste:=' ';
          end;
        end;
      end;
      if (ifunc = 7) then
      begin
        if istell = 0 then
        begin
          if (numm = 43) then
          begin
            itaste:=htaste;
            if (iart = 3) then
            begin
              itaste:='*';
            end;
            if (iart = 4) then
            begin
              itaste:=' ';
            end;
          end;
        end;
        if (numm = 45) then
        begin
          itaste:=htaste;
          if (iart = 3) then
          begin
            itaste:='*';
          end;
          if (iart = 4) then
          begin
            itaste:=' ';
          end;
        end;
      end;
      if (ifunc = 8) then
      begin
        if (numm = 58) then
        begin
          itaste:=htaste;
          if (iart = 3) then
          begin
            itaste:='*';
          end;
          if (iart = 4) then
          begin
            itaste:=' ';
          end;
        end;
      end;
      if (ifunc = 5) then
      begin
        if ((numm = 43) or (numm = 45)) then
        begin
          if (istell = 0) then
          begin
            itaste:=htaste;
            if (iart = 3) then
            begin
              itaste:='*';
            end;
            if (iart = 4) then
            begin
              itaste:=' ';
            end;
          end;
        end;
      end;
      if ((ifunc = 2) or (ifunc = 4)) then
      begin
        if ((numm = 43) or (numm = 45)) then
        begin
          if (istell = 0) then
          begin
            itaste:=htaste;
            iminus:=1;
            ivz:=1;
            if (iart = 3) then
            begin
              itaste:='*';
            end;
            if (iart = 4) then
            begin
              itaste:=' ';
            end;
          end;
        end;
      end;
      if (ifunc = 5) then
      begin
        if (numm = 44) then
        begin
          itaste:=htaste;
          if (iart = 3) then
          begin
            itaste:='*';
          end;
          if (iart = 4) then
          begin
            itaste:=' ';
          end;
        end;
      end;
      if ((ifunc = 3) or (ifunc = 4)) then
      begin
        if (iko = 0) then
        begin
          if (numm = 44) then
          begin
            itaste:=htaste;
            imkom:=istell + 1;
            iko:=1;
            if (iart = 3) then
            begin
              itaste:='*';
            end;
            if (iart = 4) then
            begin
              itaste:=' ';
            end;
          end;
        end;
      end;
      if ((ord(itaste) > 0) and (ord(itaste) <> 8) and (ord(itaste) <> 13) and (numm > 0)) then
      begin
        istell:=istell + 1;
        if ((ifunc = 1) or (ifunc = 2)) then
        begin
          if ((numm <> 43) and (numm <> 45)) then
          begin
            if (inummer < 0) then
            begin
              inummer:=inummer * -1;
            end;
            hilf1:=numm - 48;
            inummer:=inummer * 10;
            inummer:=inummer + hilf1;
            if ((ifunc = 2) and (iminus = 1) and (inummer > 0)) then
            begin
              inummer:=inummer * -1;
            end;
          end;
        end;
        if ((ifunc = 3) or (ifunc = 4)) then
        begin
          if ((numm <> 43) and (numm <> 44) and (numm <> 45)) then
          begin
            if (inumkom < 0) then
            begin
              inumkom:=inumkom * -1;
            end;
            hilf1:=numm - 48;
            hilf2:=Trunc(inumkom);
            hilf4:=0;
            if (imkom > 0) then
            begin
              hilf4:=istell - imkom;
            end;
            if (hilf4 > 0) then
            begin
              hilf7:=hilf1;
              for hilf8:=1 to hilf4 do
              begin
                hilf7:=hilf7 / 10;
              end;
              inumkom:=inumkom + hilf7;
            end else begin
              hilf2:=hilf2 * 10;
              hilf2:=hilf2 + hilf1;
              inumkom:=hilf2;
            end;
            if ((ifunc = 4) and (iminus = 1) and (inumkom > 0)) then
            begin
              inumkom:=inumkom * -1;
            end;
          end;
        end;
        if (ifunc = 5) then
        begin
          Insert(chr(numm),ialpha,istell);
          hilf3:=ilanmax + 1;
          Delete(ialpha, hilf3, 1);
        end;
        if (ifunc = 6) then
        begin
          Insert(chr(numm),ialpha,istell);
          hilf3:=ilanmax + 1;
          Delete(ialpha, hilf3, 1);
        end;
        if (ifunc = 7) then
        begin
          Insert(chr(numm),ialpha,istell);
          hilf3:=ilanmax + 1;
          Delete(ialpha, hilf3, 1);
        end;
        if (ifunc = 8) then
        begin
          Insert(chr(numm),ialpha,istell);
          hilf3:=ilanmax + 1;
          Delete(ialpha, hilf3, 1);
        end;
      end;
      if ((itaste = ' ') and (iart = 4)) then
      begin
        itaste:=chr(0);
      end;
    end;
  end;
end;

end.

Nach der Eingabe
Code:
procedure TForm3.Edit10KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if mlauf = 11 then
  begin
if ((istell = ilanmax) and (ord(itaste) > 0) and (iautocr = 1)) then
    begin
      Key:=ord(chr(13));
    end;
    if ord(Key) = 13 then
    begin
      istell:=0;
      Label2.Caption:='';
      Edit10.ReadOnly:=True;
      Edit10.AutoSelect:=False;
      if ((inummer < 101) and (inummer > 0)) then
      begin
        e3spo:=inummer;

......... weiter im Programm

      end else begin
        Label2.Caption:='Sauerstoffsätigung darf nur maximal 100% und größer Null sein';
        Edit10.Enabled:=True;
        Edit10.Color:=clWhite;
        Edit10.Font.Color:=clBlue;
        Edit10.ReadOnly:=False;
        Edit10.Text:='';
        ialpha:='';
        inummer:=0;
        iart:=2;
        inumkom:=0;
        ikomma:=0;
        izeich:=3;
        istell:=0;
        ifunc:=1;
        ilanmax:=3;
        ilanmin:=1;
        iautocr:=1;
        if mart = 2 then
        begin
          Edit10.Text:=IntToStr(e3spo);
          inummer:=e3spo;
          iart:=1;
        end;
        Form3.ActiveControl:=Edit10;
        Edit10.AutoSelect:=True;
      end;
    end;
  end;
end;

Gibt es sowas auch schon in Java?
Ich bin gerade dabei, das nach Java zu portieren.
Ich glaube aber, dass das die Königsklasse der Programmierung ist, und nur was für absolute Spezialisten.

So, das wollte ich Euch mal mitteilen.
Frohe Ostern und schöner Gruß
Jürgen
 
Schau Dir evtl. einmal die controlsFX Library an. Die bietet einiges rund um das Thema Validierung.
(Wäre da so um die Klasse ValidationSupport)

Generell ist dabei aber immer die Frage, was man genau haben möchte. Das Verhindern von Eingaben ist nicht immer sinnvoll. Eher eine Validierung der fertigen Eingabe. Aber natürlich geht beides. Das Verhindern wäre ein einfaches:
Java:
        TextField restrictedTextField = new TextField();
        restrictedTextField.textProperty().addListener((observable, oldValue, newValue) -> {
            String pattern = "[^a-zA-Z0-9]";
            ((StringProperty) observable).set(newValue.replaceAll(pattern, ""));
        });
(Nur um auf die Schnelle etwas Code zu zeigen. Kann man bestimmt besser umsetzen).

Bei der Validierung würde man z.B. auf die focusProperty() zugreifen um beim Focus-Verlust den Inhalt zu prüfen um dann z.B. Symbole ein/auszublenden oder Nachrichten einblenden.
 
Ich finde den delphi-Code zu kryptisch. Selbst wenn man diese Überprüfung komplett selbst schreiben will, würde ich entweder das in Prozeduren trennen oder aber das mit einer Klassenhierachie machen. Dann würde ich z.B. eher so etwie sie "boolean checkDate( String in)" festlegen. Ist der String "in" ein gültiges Datum, kommt "true" zurück, sonst "false" . In der Prozedur wird dann der übergebene String überprüft, was auch die Anzahl der Variablen etwas übersichtlicher macht.

Ansonsten würde ich das Programm teilen, weil eine Zeilennummer über 1000 schon ziemlich groß ist. Ob und wie das in Delphi geht, weiß ich nicht, es ist in Java aber gängige Praxis.
 
Ob und wie das in Delphi geht, weiß ich nicht
Da ist sehr viel durchaus ähnlich. Delphi ist auch objektorientiert - also durchaus vergleichbar zu Java. Wobei es keine managed Sprache ist, es gibt also keinen Garbage Collector. Du musst also Instanzen selbst wieder entfernen, wenn Du diese nicht mehr brauchst. Also diesbezüglich ähnlich C/C++.
Ich will das aber nicht weiter vertiefen - wenn das interessieren sollte, der findet unter OOPv0.13.doc (manuel-poeter.de) ein PDF (kein .doc wie der Titel erahnen lässt) und kann sich da weiter Informieren.

Das aber nur kurz zur Ergänzung Deiner Aussage - der ich zu 100% zustimme.
 

Zurück
Oben