From: Olivier S. <ob...@us...> - 2005-06-29 09:53:43
|
Update of /cvsroot/jvcl/dev/JVCL3/examples/JvValidators/BCB In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27300/dev/JVCL3/examples/JvValidators/BCB Added Files: JvValidatorsDemo.bpr JvValidatorsDemo.cpp MainFrm.cpp MainFrm.dfm MainFrm.h Log Message: Issue 3058: conversion from Korecek --- NEW FILE: JvValidatorsDemo.cpp --- //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop //--------------------------------------------------------------------------- USEFORM("MainFrm.cpp", Form1); //--------------------------------------------------------------------------- WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { Application->Initialize(); Application->CreateForm(__classid(TForm1), &Form1); Application->Run(); } catch (Exception &exception) { Application->ShowException(&exception); } catch (...) { try { throw Exception(""); } catch (Exception &exception) { Application->ShowException(&exception); } } return 0; } //--------------------------------------------------------------------------- --- NEW FILE: JvValidatorsDemo.bpr --- <?xml version='1.0' encoding='utf-8' ?> <!-- C++Builder XML Project --> <PROJECT> <MACROS> <VERSION value="BCB.06.00"/> <PROJECT value="..\..\..\bin\JvValidatorsDemo.exe"/> <OBJFILES value="..\..\..\dcu\JvValidatorsDemo.obj ..\..\..\dcu\MainFrm.obj"/> <RESFILES value="JvValidatorsDemo.res"/> <IDLFILES value=""/> <IDLGENFILES value=""/> <DEFFILE value=""/> <RESDEPEN value="$(RESFILES) MainFrm.dfm"/> <LIBFILES value=""/> <LIBRARIES value=""/> <SPARELIBS value=""/> <PACKAGES value=""/> <PATHCPP value=".;"/> <PATHPAS value=".;"/> <PATHRC value=".;"/> <PATHASM value=".;"/> <DEBUGLIBPATH value="$(BCB)\lib\debug"/> <RELEASELIBPATH value="$(BCB)\lib\release"/> <LINKER value="ilink32"/> <USERDEFINES value="_DEBUG"/> <SYSDEFINES value="NO_STRICT"/> <MAINSOURCE value="JvValidatorsDemo.cpp"/> <INCLUDEPATH value="$(BCB)\include;$(BCB)\include\vcl;$(INCLUDEPATH)"/> <LIBPATH value="$(BCB)\Projects\Lib;$(BCB)\lib\obj;$(BCB)\lib;$(RESPATH)"/> <WARNINGS value="-w-par"/> <OTHERFILES value=""/> </MACROS> <OPTIONS> <IDLCFLAGS value="-I$(BCB)\include -I$(BCB)\include\vcl -I$(INCLUDEPATH) -src_suffix cpp -D_DEBUG -boa"/> <CFLAG1 value="-Od -H=$(BCB)\lib\vcl60.csm -Hc -Vx -Ve -X- -r- -a8 -b- -k -y -v -vi- -c -tW -tWM"/> <PFLAGS value="-N2..\..\..\dcu -N0..\..\..\dcu -$YD -$W -$O- -$A8 -v -JPHNE -M"/> <RFLAGS value=""/> <AFLAGS value="/mx /w2 /zd"/> <LFLAGS value="-I..\..\..\dcu -D"" -aa -Tpe -x -Gn -v"/> <OTHERFILES value=""/> </OPTIONS> <LINKER> <ALLOBJ value="c0w32.obj sysinit.obj $(OBJFILES)"/> <ALLRES value="$(RESFILES)"/> <ALLLIB value="$(LIBFILES) $(LIBRARIES) import32.lib cp32mt.lib"/> <OTHERFILES value=""/> </LINKER> <FILELIST> <FILE FILENAME="JvValidatorsDemo.res" FORMNAME="" UNITNAME="JvValidatorsDemo.res" CONTAINERID="ResTool" DESIGNCLASS="" LOCALCOMMAND=""/> <FILE FILENAME="JvValidatorsDemo.cpp" FORMNAME="" UNITNAME="JvValidatorsDemo" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/> <FILE FILENAME="MainFrm.cpp" FORMNAME="Form1" UNITNAME="MainFrm" CONTAINERID="CCompiler" DESIGNCLASS="" LOCALCOMMAND=""/> </FILELIST> <BUILDTOOLS> </BUILDTOOLS> <IDEOPTIONS> </IDEOPTIONS> </PROJECT> --- NEW FILE: MainFrm.cpp --- //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "MainFrm.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link "JvComponent" #pragma link "JvErrorIndicator" #pragma link "JvValidators" #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { reResults->WordWrap = true; } //--------------------------------------------------------------------------- void __fastcall TForm1::reResultsEnter(TObject *Sender) { SelectNext(reResults,true,true); } //--------------------------------------------------------------------------- void __fastcall TForm1::JvValidators1ValidateFailed(TObject *Sender, TJvBaseValidator *BaseValidator, bool &Continue) { // using the OnValidateFailed event reResults->Lines->Add(Format("FAILED: %s",OPENARRAY(TVarRec,(BaseValidator->ErrorMessage)) ) ); } //--------------------------------------------------------------------------- void __fastcall TForm1::JvValidationSummary1Change(TObject *Sender) { int i; TJvValidationSummary *pJVS; pJVS = dynamic_cast<TJvValidationSummary *>(Sender); if(pJVS!=NULL) { reResults->Lines->Text = pJVS->Summaries->Text; for(i = 0;i<reResults->Lines->Count;++i) { reResults->Lines->Strings[i] = "SUMMARY: " + reResults->Lines->Strings[i]; } } } //--------------------------------------------------------------------------- void __fastcall TForm1::ProviderErrorValidateFailed(TObject * Sender, TJvBaseValidator * BaseValidator, bool & Continue) { JvErrorIndicator1->Error[BaseValidator->ControlToValidate] = BaseValidator->ErrorMessage; reResults->Lines->Add(Format("PROVIDER: %s",OPENARRAY(TVarRec,(BaseValidator->ErrorMessage)) )); } //--------------------------------------------------------------------------- void __fastcall TForm1::JvCustomValidator1Validate(TObject *Sender, Variant &ValueToValidate, bool &Valid) { // custom validation AnsiString stText = ValueToValidate; Valid = (stText==""?false:static_cast<bool >(stText.Length() >= 10)); } //--------------------------------------------------------------------------- void __fastcall TForm1::btnValSumClick(TObject *Sender) { reResults->Lines->Clear(); reResults->WordWrap = false; JvErrorIndicator1->ClearErrors(); JvValidators1->OnValidateFailed = NULL; JvValidators1->ErrorIndicator = NULL; // Setting the ValidationSummary for TJvValidators will delay // triggering the OnChange event until after Validate has completed JvValidationSummary1->Summaries->Clear(); #if __BORLANDC__ < 0x0560 JvValidators1->ValidationSummary = JvValidationSummary1; #else JvValidators1->ValidationSummary = JvValidationSummary1->operator IJvValidationSummary *(); #endif JvValidators1->Validate(); } //--------------------------------------------------------------------------- void __fastcall TForm1::btnCheckClick(TObject *Sender) { reResults->Lines->Clear(); reResults->WordWrap = false; JvErrorIndicator1->ClearErrors(); JvValidators1->ValidationSummary = NULL; JvValidators1->ErrorIndicator = NULL; JvValidators1->OnValidateFailed = JvValidators1ValidateFailed; JvValidators1->Validate(); } //--------------------------------------------------------------------------- void __fastcall TForm1::btnProviderCheckClick(TObject *Sender) { reResults->Lines->Clear(); reResults->WordWrap = false; // calling BeginUpdate/EndUpdate delays the error reporting until all controls have been validated JvErrorIndicator1->BeginUpdate(); try { JvErrorIndicator1->ClearErrors(); JvValidators1->ValidationSummary = NULL; // custom error messages for this type of check JvValidators1->OnValidateFailed = ProviderErrorValidateFailed; JvValidators1->Validate(); } __finally { JvErrorIndicator1->EndUpdate(); } } //--------------------------------------------------------------------------- --- NEW FILE: MainFrm.dfm --- object Form1: TForm1 Left = 307 Top = 129 Width = 599 Height = 274 Caption = 'JvValidators demo' Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = False DesignSize = ( 591 247) PixelsPerInch = 96 TextHeight = 13 object Label1: TLabel Left = 16 Top = 16 Width = 150 Height = 13 Caption = 'This edit must have a(ny) value:' FocusControl = edRequired end object Label2: TLabel Left = 16 Top = 64 Width = 210 Height = 13 Caption = 'This edit must have more than 9 characters:' FocusControl = edRequired10Chars end object Label3: TLabel Left = 16 Top = 114 Width = 205 Height = 13 Caption = 'This edit must match the reg. expr."A.B.C.":' FocusControl = edRegExpr end object Label4: TLabel Left = 16 Top = 160 Width = 186 Height = 13 Caption = 'The value must be between 0 and 100:' FocusControl = edRange0to100 end object Label5: TLabel Left = 272 Top = 16 Width = 33 Height = 13 Caption = 'Result:' end object edRequired: TEdit Left = 16 Top = 32 Width = 217 Height = 21 TabOrder = 0 end object edRequired10Chars: TEdit Left = 16 Top = 80 Width = 217 Height = 21 TabOrder = 1 end object edRegExpr: TEdit Left = 16 Top = 130 Width = 217 Height = 21 TabOrder = 2 end object edRange0to100: TEdit Left = 16 Top = 176 Width = 217 Height = 21 TabOrder = 3 Text = '-1' end object udRange0to100: TUpDown Left = 233 Top = 176 Width = 15 Height = 21 Associate = edRange0to100 Min = -100 Max = 200 Position = -1 TabOrder = 4 Wrap = False end object btnCheck: TButton Left = 381 Top = 210 Width = 156 Height = 25 Anchors = [akLeft, akBottom] Caption = 'Use OnValidateFailed' TabOrder = 5 OnClick = btnCheckClick end object btnProviderCheck: TButton Left = 6 Top = 210 Width = 161 Height = 25 Anchors = [akLeft, akBottom] Caption = 'Use JvErrorIndicator' TabOrder = 6 OnClick = btnProviderCheckClick end object reResults: TRichEdit Left = 272 Top = 32 Width = 306 Height = 167 Cursor = crArrow TabStop = False Anchors = [akLeft, akTop, akRight, akBottom] Ctl3D = True Lines.Strings = ( 'This is a demo for the JvValidators component as well as the JvE' + 'rrorProvider and, to some extent, the JvValidationSummary compon' + 'ent.' '' 'By creating and setting up different validators (at run-time in ' + 'this demo but you can do it at design-time as well), the edit bo' + 'xes can be checked for validity by a single call to the Validate' + ' method. When one of the validators finds that a control doesn'#39't' + ' match the validation criteria, that error can be handled in dif' + 'ferent ways depending on your needs.' '' 'One option is to just check the boolean return value from Valida' + 'te and display a standard message box telling the user that a va' + 'lue didn'#39't match.' '' 'You can also handle the OnValidateFailed event of all validators' + ' at once (the TJvValidators event) or for each validator separat' + 'ely (the TJvBaseValidator event). Yet another option is to assig' + 'n a TJvValidationSummary component to the ValidationSummary prop' + 'erty of tJvValidators and handle it'#39's OnChange event.' '' 'Finally, you can combine the work of the validators with the use' + ' of a TJvErrorIndicator.' '' 'For more info on TJvErrorIndicator, see the demo for that compon' + 'ent (also included).' '' 'By clicking any of the buttons below, you can see how the differ' + 'ent methods described work in real-time.' '' '') ParentColor = True ParentCtl3D = False ReadOnly = True ScrollBars = ssBoth TabOrder = 7 WordWrap = False OnEnter = reResultsEnter end object btnValSum: TButton Left = 174 Top = 210 Width = 200 Height = 25 Anchors = [akLeft, akBottom] Caption = 'Use JvValidationSummary' TabOrder = 8 OnClick = btnValSumClick end object JvValidators1: TJvValidators ValidationSummary = JvValidationSummary1 ErrorIndicator = JvErrorIndicator1 OnValidateFailed = JvValidators1ValidateFailed Left = 258 Top = 104 object JvRequiredFieldValidator1: TJvRequiredFieldValidator Valid = True ControlToValidate = edRequired PropertyToValidate = 'Text' Enabled = True ErrorMessage = 'Value in edRequired cannot be empty' end object JvCustomValidator1: TJvCustomValidator Valid = True ControlToValidate = edRequired10Chars PropertyToValidate = 'Text' Enabled = True ErrorMessage = 'Value in "edRequired10Chars" requires at least 10 characters' OnValidate = JvCustomValidator1Validate end object JvRegularExpressionValidator1: TJvRegularExpressionValidator Valid = True ControlToValidate = edRegExpr PropertyToValidate = 'Text' Enabled = True ErrorMessage = 'Value in "edRegExpr" does not match "A.B.C."' ValidationExpression = '*A.B.C.*' end object JvRangeValidator1: TJvRangeValidator Valid = True ControlToValidate = udRange0to100 PropertyToValidate = 'Position' Enabled = True ErrorMessage = 'Value in "udRange0to100" must be between 0 and 100' MinimumValue = 0 MaximumValue = 100 end end object JvErrorIndicator1: TJvErrorIndicator ImageIndex = 0 Left = 296 Top = 104 end object JvValidationSummary1: TJvValidationSummary OnChange = JvValidationSummary1Change Left = 330 Top = 104 end end --- NEW FILE: MainFrm.h --- //--------------------------------------------------------------------------- #ifndef MainFrmH #define MainFrmH //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include "JvComponent.hpp" #include "JvErrorIndicator.hpp" #include "JvValidators.hpp" #include <ComCtrls.hpp> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TLabel *Label1; TLabel *Label2; TLabel *Label3; TLabel *Label4; TLabel *Label5; TEdit *edRequired; TEdit *edRequired10Chars; TEdit *edRegExpr; TEdit *edRange0to100; TUpDown *udRange0to100; TButton *btnCheck; TButton *btnProviderCheck; TRichEdit *reResults; TButton *btnValSum; TJvValidators *JvValidators1; TJvRequiredFieldValidator *JvRequiredFieldValidator1; TJvCustomValidator *JvCustomValidator1; TJvRegularExpressionValidator *JvRegularExpressionValidator1; TJvRangeValidator *JvRangeValidator1; TJvErrorIndicator *JvErrorIndicator1; TJvValidationSummary *JvValidationSummary1; void __fastcall reResultsEnter(TObject *Sender); void __fastcall JvValidators1ValidateFailed(TObject *Sender, TJvBaseValidator *BaseValidator, bool &Continue); void __fastcall JvValidationSummary1Change(TObject *Sender); void __fastcall btnProviderCheckClick(TObject *Sender); void __fastcall btnValSumClick(TObject *Sender); void __fastcall btnCheckClick(TObject *Sender); void __fastcall JvCustomValidator1Validate(TObject *Sender, Variant &ValueToValidate, bool &Valid); private: void __fastcall ProviderErrorValidateFailed(TObject * Sender, TJvBaseValidator * BaseValidator, bool & Continue); // User declarations public: // User declarations __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif |