
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@152 8e941d3f-bd1b-0410-a28a-d453659cc2b4
313 lines
9.4 KiB
ObjectPascal
313 lines
9.4 KiB
ObjectPascal
{*********************************************************}
|
|
{* O32VPOOL.PAS 4.06 *}
|
|
{*********************************************************}
|
|
|
|
{* ***** BEGIN LICENSE BLOCK ***** *}
|
|
{* Version: MPL 1.1 *}
|
|
{* *}
|
|
{* The contents of this file are subject to the Mozilla Public License *}
|
|
{* Version 1.1 (the "License"); you may not use this file except in *}
|
|
{* compliance with the License. You may obtain a copy of the License at *}
|
|
{* http://www.mozilla.org/MPL/ *}
|
|
{* *}
|
|
{* Software distributed under the License is distributed on an "AS IS" basis, *}
|
|
{* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License *}
|
|
{* for the specific language governing rights and limitations under the *}
|
|
{* License. *}
|
|
{* *}
|
|
{* The Original Code is TurboPower Orpheus *}
|
|
{* *}
|
|
{* The Initial Developer of the Original Code is TurboPower Software *}
|
|
{* *}
|
|
{* Portions created by TurboPower Software Inc. are Copyright (C)1995-2002 *}
|
|
{* TurboPower Software Inc. All Rights Reserved. *}
|
|
{* *}
|
|
{* Contributor(s): *}
|
|
{* *}
|
|
{* ***** END LICENSE BLOCK ***** *}
|
|
|
|
{$I OVC.INC}
|
|
|
|
{$B-} {Complete Boolean Evaluation}
|
|
{$I+} {Input/Output-Checking}
|
|
{$P+} {Open Parameters}
|
|
{$T-} {Typed @ Operator}
|
|
{.W-} {Windows Stack Frame}
|
|
{$X+} {Extended Syntax}
|
|
|
|
unit o32vpool;
|
|
{O32ValidatorPool component classes}
|
|
|
|
interface
|
|
|
|
uses
|
|
OvcBase, Classes, Graphics, stdctrls, O32Vldtr, o32ovldr, {$IFNDEF LCL} o32pvldr, {$ENDIF} o32rxvld;
|
|
|
|
type
|
|
TO32ValidatorPool = class;
|
|
|
|
TVPoolNotifyEvent =
|
|
procedure (Sender: TObject; ValidatorItem: Integer) of object;
|
|
|
|
|
|
{ - TO32ValidatorItem - }
|
|
TO32ValidatorItem = class(TO32CollectionItem)
|
|
protected {private}
|
|
FValidator : TO32BaseValidator;
|
|
FValidationEvent : String;
|
|
FValidatorClass : TValidatorClass;
|
|
FValidatorType : String;
|
|
FBeepOnError : Boolean;
|
|
FMask : String;
|
|
|
|
{Component for which this item will validate}
|
|
FComponent : TCustomEdit;
|
|
FComponentColor : TColor;
|
|
FErrorColor : TColor;
|
|
{Event for which this object will execute a validation}
|
|
FEvent : TValidationEvent;
|
|
|
|
procedure DoValidation(Sender: TObject);
|
|
procedure SetComponent(Value: TCustomEdit);
|
|
procedure SetValidatorType(const Value: String);
|
|
procedure AssignValidator;
|
|
procedure SetEvent(Event: TValidationEvent);
|
|
procedure AssignEvent;
|
|
function ValidatorPool: TO32ValidatorPool;
|
|
public
|
|
constructor Create(Collection: TCollection); override;
|
|
property Validator: TO32BaseValidator
|
|
read FValidator write FValidator;
|
|
property ValidatorClass: TValidatorClass read FValidatorClass
|
|
write FValidatorClass;
|
|
published
|
|
property BeepOnError: Boolean
|
|
read FBeepOnError write FBeepOnError;
|
|
property Name;
|
|
property ErrorColor: TCOlor
|
|
read FErrorColor write FErrorColor;
|
|
property Component: TCustomEdit
|
|
read FComponent write SetComponent;
|
|
property Mask: String
|
|
read FMask write FMask;
|
|
property ValidationEvent: TValidationEvent
|
|
read FEvent write SetEvent;
|
|
property ValidatorType : string
|
|
read FValidatorType write SetValidatorType stored true;
|
|
end;
|
|
|
|
TO32Validators = class(TO32Collection)
|
|
protected {private}
|
|
FValidatorPool : TO32ValidatorPool;
|
|
function GetItem(Index: Integer): TO32ValidatorItem;
|
|
public
|
|
constructor Create(AOwner : TPersistent;
|
|
ItemClass : TCollectionItemClass); override;
|
|
function AddItem(ValidatorClass: TValidatorClass): TCollectionItem;
|
|
procedure Delete(Index: Integer);
|
|
procedure DeleteByName(const Name: String);
|
|
function GetValidatorByName(const Name: String): TO32BaseValidator;
|
|
property ValidatorPool: TO32ValidatorPool
|
|
read FValidatorPool;
|
|
property Items[index: Integer]: TO32ValidatorItem
|
|
read GetItem;
|
|
end;
|
|
|
|
{ - TO32ValidatorPool - }
|
|
TO32ValidatorPool = class(TO32Component)
|
|
protected {private}
|
|
FValidators: TO32Validators;
|
|
public
|
|
constructor Create(AOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
published
|
|
property Name;
|
|
property Validators: TO32Validators
|
|
read FValidators
|
|
write FValidators;
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses
|
|
{$IFNDEF LCL} Windows, {$ELSE} LclIntf, MyMisc, {$ENDIF} SysUtils, Controls, Dialogs;
|
|
|
|
{===== TO32ValidatorPool =============================================}
|
|
|
|
constructor TO32ValidatorPool.Create(AOwner: TComponent);
|
|
begin
|
|
inherited Create(AOwner);
|
|
FValidators := TO32Validators.Create(self, TO32ValidatorItem);
|
|
end;
|
|
{=====}
|
|
|
|
destructor TO32ValidatorPool.Destroy;
|
|
begin
|
|
FValidators.Free;
|
|
inherited Destroy;
|
|
end;
|
|
|
|
|
|
{===== TO32Validators ================================================}
|
|
constructor TO32Validators.Create(AOwner : TPersistent;
|
|
ItemClass : TCollectionItemClass);
|
|
begin
|
|
inherited;
|
|
FValidatorPool := TO32ValidatorPool(AOwner);
|
|
end;
|
|
{=====}
|
|
|
|
function TO32Validators.GetValidatorByName(const Name: String): TO32BaseValidator;
|
|
var
|
|
i: Integer;
|
|
begin
|
|
for i := 0 to Count - 1 do begin
|
|
if TO32ValidatorItem(Items[i]).Name = Name then begin
|
|
result := TO32ValidatorItem(Items[i]).Validator;
|
|
exit;
|
|
end;
|
|
end;
|
|
result := nil;
|
|
end;
|
|
{=====}
|
|
|
|
function TO32Validators.AddItem(ValidatorClass: TValidatorClass):
|
|
TCollectionItem;
|
|
var
|
|
NewItem: TO32ValidatorItem;
|
|
begin
|
|
NewItem := TO32ValidatorItem(inherited Add);
|
|
NewItem.ValidatorClass := ValidatorClass;
|
|
NewItem.Validator := ValidatorClass.Create(FValidatorPool);
|
|
result := NewItem;
|
|
end;
|
|
{=====}
|
|
|
|
procedure TO32Validators.Delete(Index: Integer);
|
|
begin
|
|
TO32ValidatorItem(Items[Index]).Validator.Free;
|
|
{$IFDEF VERSION5}
|
|
inherited Delete(Index);
|
|
{$ENDIF}
|
|
end;
|
|
{=====}
|
|
|
|
procedure TO32Validators.DeleteByName(const Name: String);
|
|
var
|
|
i: Integer;
|
|
begin
|
|
for i := 0 to Count - 1 do begin
|
|
if TO32ValidatorItem(Items[i]).Name = Name then begin
|
|
TO32ValidatorItem(Items[i]).Validator.Free;
|
|
{$IFDEF VERSION5}
|
|
inherited Delete(i);
|
|
{$ENDIF}
|
|
exit;
|
|
end;
|
|
end;
|
|
end;
|
|
{=====}
|
|
|
|
function TO32Validators.GetItem(Index : LongInt) : TO32ValidatorItem;
|
|
begin
|
|
result := TO32ValidatorItem(inherited GetItem(Index));
|
|
end;
|
|
|
|
{===== TO32ValidatorItem =============================================}
|
|
type
|
|
TProtectedCustomEdit = class(TCustomEdit);
|
|
TProtectedWinControl = class(TWinControl);
|
|
|
|
constructor TO32ValidatorItem.Create(Collection: TCollection);
|
|
begin
|
|
inherited;
|
|
SetName('ValidatorItem' + IntToStr(Collection.Count));
|
|
FErrorColor := clRed;
|
|
FBeepOnError := true;
|
|
end;
|
|
{=====}
|
|
|
|
procedure TO32ValidatorItem.DoValidation(Sender: TObject);
|
|
begin
|
|
if not (csDesigning in ValidatorPool.ComponentState)
|
|
and (FValidator <> nil) then begin
|
|
{ set the validator's values }
|
|
FValidator.Mask := FMask;
|
|
FValidator.Input := FComponent.Text;
|
|
{ execute validation }
|
|
if not FValidator.IsValid then begin
|
|
{ beep or not }
|
|
if BeepOnError then MessageBeep(0);
|
|
TProtectedCustomEdit(FComponent).Color := FErrorColor;
|
|
FComponent.SetFocus;
|
|
end
|
|
else
|
|
if (FComponent is TCustomEdit) then
|
|
TProtectedCustomEdit(FComponent).Color := FComponentColor;
|
|
end;
|
|
end;
|
|
|
|
procedure TO32ValidatorItem.SetComponent(Value: TCustomEdit);
|
|
begin
|
|
if (Value is TCustomEdit) and (FComponent <> Value) then begin
|
|
FComponent := Value;
|
|
FComponentColor := TProtectedCustomEdit(FComponent).Color;
|
|
AssignEvent;
|
|
end;
|
|
end;
|
|
{=====}
|
|
|
|
procedure TO32ValidatorItem.SetEvent(Event: TValidationEvent);
|
|
begin
|
|
FEvent := Event;
|
|
AssignEvent;
|
|
end;
|
|
{=====}
|
|
|
|
procedure TO32ValidatorItem.AssignEvent;
|
|
begin
|
|
if (FComponent <> nil) then
|
|
case FEvent of
|
|
veOnChange:
|
|
TProtectedCustomEdit(FComponent).OnChange := DoValidation;
|
|
veOnEnter :
|
|
TProtectedCustomEdit(FComponent).OnEnter := DoValidation;
|
|
veOnExit :
|
|
TProtectedCustomEdit(FComponent).OnExit := DoValidation;
|
|
end;
|
|
end;
|
|
{=====}
|
|
|
|
procedure TO32ValidatorItem.SetValidatorType(const Value: string);
|
|
begin
|
|
if FValidatorType <> Value then begin
|
|
FValidatorType := Value;
|
|
AssignValidator;
|
|
end;
|
|
end;
|
|
{=====}
|
|
|
|
procedure TO32ValidatorItem.AssignValidator;
|
|
begin
|
|
if (FValidatorType = 'None') or (FValidatorType = '')then
|
|
FValidatorClass := nil
|
|
else try
|
|
FValidatorClass := TValidatorClass(FindClass(FValidatorType));
|
|
except
|
|
FValidatorClass := nil;
|
|
end;
|
|
|
|
if FValidatorClass <> nil then
|
|
FValidator
|
|
:= FValidatorClass.Create((Collection as TO32Validators).FValidatorPool);
|
|
end;
|
|
{=====}
|
|
|
|
function TO32ValidatorItem.ValidatorPool: TO32ValidatorPool;
|
|
begin
|
|
Result := TO32Validators(Collection).FValidatorPool;
|
|
end;
|
|
{=====}
|
|
|
|
end.
|