Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Hilfe: Delphi Taschrechner

  Alt 23. Nov 2013, 16:34
Oder eben ohne Komma-Abfrage, dafür funktioniert das aber auch, wenn der User Teile des Edit-Feldes markiert hat ...
Delphi-Quellcode:
unit NumericEditValidator;

interface

  uses
    Classes,
    StdCtrls;

  type
    TNumericEditValidator = class( TComponent )
    protected
      procedure EditKeyPress( Sender : TObject; var Key : Char );
    public
      constructor Create( AOwner : TEdit ); reintroduce;
    end;

implementation

  uses
    SysUtils;

  { TNumericEditValidator }

  constructor TNumericEditValidator.Create( AOwner : TEdit );
    begin
      inherited Create( AOwner );
      AOwner.OnKeyPress := EditKeyPress;
    end;

  procedure TNumericEditValidator.EditKeyPress( Sender : TObject; var Key : Char );
    var
      LEdit : TEdit;
      LNewText : string;
      LText1, LText2 : string;
      LValue : Extended;
    begin
      LEdit := Sender as TEdit;

      LText1 := Copy( LEdit.Text, 1, LEdit.SelStart );
      LText2 := Copy( LEdit.Text, LEdit.SelStart + 1 + LEdit.SelLength );

      if ( Key = #8 )
      then
        if LEdit.SelLength > 0
        then
          LNewText := LText1 + LText2
        else
          LNewText := Copy( LText1, 1, Length( LText1 ) - 1 ) + LText2
      else
        LNewText := LText1 + Key + LText2;

      if ( LNewText <> '' ) and not TryStrToFloat( LNewText, LValue )
      then
        Key := #0;
    end;

end.
In deiner Form bindest du diese unit ein und im FormCreate das hier
Delphi-Quellcode:
uses
  NumericEditValidator;

procedure TForm1.FormCreate( Sender : TObject );
begin
  TNumericEditValidator.Create( Edit1 );
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat