AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Validedit-Komponente

Validedit-Komponente

Ein Thema von Ghostwalker · begonnen am 24. Jun 2006 · letzter Beitrag vom 27. Jun 2006
Antwort Antwort
Seite 1 von 2  1 2   
Ghostwalker
Registriert seit: 16. Jun 2003
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.
Angehängte Dateien
Dateityp: zip validedit_172.zip (13,1 KB, 25x aufgerufen)
e=mc² or energy = milk * coffee²
 
EDatabaseError

 
Delphi 2007 Professional
 
#2
  Alt 24. Jun 2006, 15:49
Läuft leider nicht auf Delphi 3
Tobias
  Mit Zitat antworten Zitat
Ghostwalker

 
Delphi 10.3 Rio
 
#3
  Alt 24. Jun 2006, 18:51
hm..hab hier nur D7..sorry.

Kannst mal beschreiben was passiert ?

Den eigentlich sollte sich der Standard-Edit nicht so viel unterscheiden.
Uwe
  Mit Zitat antworten Zitat
jbg

 
Delphi 10.1 Berlin Professional
 
#4
  Alt 24. Jun 2006, 19:46
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.
Andreas aka AHUser aka jbg
  Mit Zitat antworten Zitat
EDatabaseError

 
Delphi 2007 Professional
 
#5
  Alt 24. Jun 2006, 20:20
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.
Tobias
  Mit Zitat antworten Zitat
Ghostwalker

 
Delphi 10.3 Rio
 
#6
  Alt 25. Jun 2006, 14:14
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.
Uwe
  Mit Zitat antworten Zitat
EDatabaseError

 
Delphi 2007 Professional
 
#7
  Alt 25. Jun 2006, 14:22
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
Tobias
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh
 
#8
  Alt 25. Jun 2006, 14:29
[OT]
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.
Sebastian
  Mit Zitat antworten Zitat
EDatabaseError

 
Delphi 2007 Professional
 
#9
  Alt 25. Jun 2006, 14:33
Zitat von Khabarakh:
[OT]
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...
Tobias
  Mit Zitat antworten Zitat
Ghostwalker

 
Delphi 10.3 Rio
 
#10
  Alt 26. Jun 2006, 06:46
@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
Uwe
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:56 Uhr.
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