Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Validedit-Komponente (https://www.delphipraxis.net/72033-validedit-komponente.html)

Ghostwalker 24. Jun 2006 09:31


Validedit-Komponente
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo DP'ler,

wieder einmal stand ich vor dem Problem, das ich Benutzereingaben prüfen mußte und ein Mask-Edit nicht
ausgereicht hat. Also hab ich mir eine kleine Komponente geschrieben.

Sie ist abgeleitet vom normalen TEdit. Im Gegensatz dazu, hat sie 2. zusatzliche Events (onValidate und
onValidateError), mithilfe deren ich Prüfungen und entsprechende Fehlerbehandlungen realisieren kann.

Da ich sicher nicht der einzige bin, der immer wieder vor diesen Problemen steht, möchte ich euch
die Komponente zur Verfügung stellen.


Feedback jeglicher Art ist natürlich immer erwünscht :)


*UPDATE 26.06.2006*

Compiler-Schalter hinzugefügt, damit die Komponente auch unter D3 installiert werden kann.

*UPDATE 27.06.2006*

- Sender als Parameter für onValidate und onValidateError
- Rückgabewert für onValidate Integer (für unterschiedliche Fehler)
0 bedeutet Kein Fehler, Rückgabewert ungleich 0 Fehler.

- Zusätzliche Label-Komponente integeriert für automatische Caption
* mit Positionsangabe (über dem Edit,unter dem Edit, Rechts und Links davon)
* mit Font (eigenständiger Font)
* mit Farbe (Hintergrundfarbe des Labels)

- Zusätzliche kann eine Fehlerfarbe angegben werden, die das Editfeld bei einem Fehler einfärbt.

- Es kann weiterhing gewählt werden, ob der Text im Editfeld markiert werden soll, wenn ein Fehler
auftritt.

EDatabaseError 24. Jun 2006 15:49

Re: Validedit-Komponente
 
Läuft leider nicht auf Delphi 3

Ghostwalker 24. Jun 2006 18:51

Re: Validedit-Komponente
 
hm..hab hier nur D7..sorry.

Kannst mal beschreiben was passiert ?

Den eigentlich sollte sich der Standard-Edit nicht so viel unterscheiden.

jbg 24. Jun 2006 19:46

Re: Validedit-Komponente
 
Zitat:

Zitat von Ghostwalker
Kannst mal beschreiben was passiert ?

EDatabaseError scheint ein Kunde/Benutzer und kein Programmierer zu sein. Denn nur von Kunden bekommt man so aussagekräftige Fehlerberichte wie "Das geht nicht".

Ich rate mal, dass es an der MaskUtils Unit liegt, die es noch nicht in Delphi 3 gibt, dass schon 9 Jahre auf dem Buckel hat und wohl nicht mehr State of the Art ist.

EDatabaseError 24. Jun 2006 20:20

Re: Validedit-Komponente
 
:? nein ich wollte das ding kurz testen (lag unter zeitdruck) aber du hast recht die Unit fehlt. und delphi kennt die eigentschaften anchors... nicht ich schau morgen nochmal nach.

@jgb
Ich hab keine Lust 100000 seiteige Fehlerberichte zu schreiben...und ich bin kein kunde sondern ich hab welche ;-) ok.

Ghostwalker 25. Jun 2006 14:14

Re: Validedit-Komponente
 
Hmm..also, die Unit kann an und für sich raus, die Komponente braucht sie nicht.

Den Rest...könnte jemand mal testen bei welchen Propertys er meckert ? Dann könnt ich die
per Compilerschalter (Version) entsprechend einbinden bzw. raus lassen.

EDatabaseError 25. Jun 2006 14:22

Re: Validedit-Komponente
 
Also folgendes muss raus / fand D3 nicht:
MaskUtils
property Anchors;
property BevelEdges;
property BevelInner;
property BevelOuter;
property BevelKind;
property BevelWidth;
property BiDiMode;
property Constraints;
property DragKind;
property ParentBiDiMode;
property OnEndDock;
property OnStartDock;


und dann installiert er es. also wenn das ganze zeug da oben weg ist.sieht jetzt so aus:

Delphi-Quellcode:
unit validEditU;
{$R-,T-,H+,X+}

interface
uses Windows, SysUtils, Classes, StdCtrls, Controls, Messages,
  Forms, Graphics, Menus;


TYPE
  TOnValidate = function (value:TCaption):boolean of object;
  TOnInvalidate = procedure (value:TCaption) of object;

  TCustomValidEdit = Class(TCustomEdit)
  private
     fonValidate : TOnValidate;
     fonInvalidate : TOnInvalidate;

     procedure CMExit(var Message: TCMExit);  message CM_EXIT;    
  PROTECTED
    procedure ValidateEdit;
    procedure KeyPress(var Key: Char); override;
  PUBLIC
    constructor Create(AOwner: TComponent); override;


  PUBLISHED
    Property onValidate : TOnValidate read fonValidate write fonValidate;
    Property OnValidateError : TOnInvalidate read fonInvalidate write fonInvalidate;
  end;

{ TMaskEdit }

  TValidEdit = class(TCustomValidEdit)
  published
    property Align;
    property AutoSelect;
    property AutoSize;
    property BorderStyle;
    property CharCase;
    property Color;

    property Ctl3D;
    property DragCursor;

    property DragMode;
    property Enabled;
    property Font;
    property ImeMode;
    property ImeName;
    property MaxLength;

    property ParentColor;
    property ParentCtl3D;
    property ParentFont;
    property ParentShowHint;
    property PasswordChar;
    property PopupMenu;
    property ReadOnly;
    property ShowHint;
    property TabOrder;
    property TabStop;
    property Text;
    property Visible;
    property OnChange;
    property OnClick;
    property OnDblClick;
    property OnDragDrop;
    property OnDragOver;

    property OnEndDrag;
    property OnEnter;
    property OnExit;
    property OnKeyDown;
    property OnKeyPress;
    property OnKeyUp;
    property OnMouseDown;
    property OnMouseMove;
    property OnMouseUp;
   
    property OnStartDrag;
  end;


procedure Register;

implementation


procedure Register;
begin
  registerComponents('Standard',[TValidEdit]);
end;

{ TCustomValidEdit }

procedure TCustomValidEdit.CMExit(var Message: TCMExit);
begin
  if not (csDesigning in ComponentState) then
    ValidateEdit;
  inherited;
end;

constructor TCustomValidEdit.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  fonValidate := NIL;
  fonInvalidate := NIL;
end;

procedure TCustomValidEdit.KeyPress(var Key: Char);
begin
  inherited KeyPress(Key);
  if (Word(Key) = VK_RETURN) then
  begin
    ValidateEdit;
    Exit;
  end;
end;

procedure TCustomValidEdit.ValidateEdit;
begin
  if (assigned(fonValidate)) then
  begin
    if not fOnValidate(self.text) then
    begin
      fonInvalidate(text);
      setfocus;
      SelectAll;
    end;
  end;
end;

end.
Mfg
Tobi

Khabarakh 25. Jun 2006 14:29

Re: Validedit-Komponente
 
[OT]
Zitat:

Zitat von EDatabaseError
@jgb
Ich hab keine Lust 100000 seiteige Fehlerberichte zu schreiben...und ich bin kein kunde sondern ich hab welche ;-) ok.

In was für einer Welt leben wir denn, wenn man sich nicht einmal 5 Sekunden zum Rauskopieren der Fehlermeldungen nehmen kann?
[/OT]

@Ghotswalker: OnInvalidate solltest du in OnInvalid(ated) umbenennen, da ist es ja schon zu spät ;) . Außerdem könnte man noch "Sender" und eine Option, ob der Inhalt markiert werden soll, hinzufügen. Dann könntest du noch Goodies einfügen, damit man bei Trivialfällen überhaupt keine Eventhandler benötigt. Also z.B. ein Regex als Property, der statt OnValidate prüft, und eine color-Property, die das Edit bei invaliden Eingaben färbt.

EDatabaseError 25. Jun 2006 14:33

Re: Validedit-Komponente
 
Zitat:

Zitat von Khabarakh
[OT]
Zitat:

Zitat von EDatabaseError
@jgb
Ich hab keine Lust 100000 seiteige Fehlerberichte zu schreiben...und ich bin kein kunde sondern ich hab welche ;-) ok.

In was für einer Welt leben wir denn, wenn man sich nicht einmal 5 Sekunden zum Rauskopieren der Fehlermeldungen nehmen kann?
[/OT]

ne minute war da fei schnell weg vorallem mit soner notebook maus... :lol:

Ghostwalker 26. Jun 2006 06:46

Re: Validedit-Komponente
 
@EDatabaseError

Danke für die Mühe :)


@Khabarakh

Zitat:

OnInvalidate solltest du in OnInvalid(ated) umbenennen, da ist es ja schon zu spät Wink
Ähm...fonInvalidate ist nur intern. Nach aussen hin heißt das onValidate und onValidateError :)

Zitat:

Außerdem könnte man noch "Sender" und eine Option, ob der Inhalt markiert werden soll, hinzufügen. Dann könntest du noch Goodies einfügen, damit man bei Trivialfällen überhaupt keine Eventhandler benötigt. Also z.B. ein Regex als Property, der statt OnValidate prüft, und eine color-Property, die das Edit bei invaliden Eingaben färbt.
Das mit dem Sender und der Option, wird sicher kommen. Für Trivialfälle gibts TMaskEdit :)
Auch das mit der Farbe ist ne gute Idee :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:40 Uhr.
Seite 1 von 2  1 2   

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