рдбреЗрд▓реНрдлреА 2010 рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдиреЗрдВред рдЙрджрд╛рд╣рд░рдг - рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди

рдмрд▓реНрд▓рд╛ рдЕрдкрдиреЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдбреЗрд▓реНрдлреА 2010 рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ , рдореИрдВрдиреЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ, рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдФрд░ рдорддрджрд╛рди рдХрд░рдиреЗ рд╕реЗ рдЬреБрдбрд╝реА рдореВрд▓ рдмрд╛рддреЗрдВ рджрд┐рдЦрд╛рдИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВрдиреЗ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рджрд┐рдпрд╛ рдХрд┐ рдЖрдк рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рд╕рдВрднрд╡рддрдГ рд╕рдмрд╕реЗ рдЖрдо рдЙрджрд╛рд╣рд░рдг рджреГрдврд╝рддрд╛ рдХреЗ рд▓рд┐рдП рд╣реИ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рд╕реА рдиреЗ рд╡рд┐рдВрдЧреНрд╕ рдСрдл рд╡рд┐рдВрдб рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдПрдХ рд╕рдорд╛рди рдЙрджрд╛рд╣рд░рдг рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИред рдореИрдВ рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди (рд╕рддреНрдпрд╛рдкрди) рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдЕрдиреНрдп рдЖрд╡реЗрджрди рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред





рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдиреАрдЪреЗ рдЬреЛ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╡рд╣ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рди рдХрд┐ рдбреЗрдЯрд╛ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрдг рд░реВрдкрд░реЗрдЦрд╛ред рдЗрд╕реЗ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреА рдкрд░реАрдХреНрд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЛрдЪреЗрдВ, рди рдХрд┐ рддреИрдпрд╛рд░ рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВред



рдЗрд╕рд▓рд┐рдП, рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЗ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдореИрдВ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдЬреЛ рдореЗрд░реА рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рддреНрдпрд╛рдкрди рдирд┐рдпрдореЛрдВ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЯреАрдкрд░реНрд╕рди рд╡рд░реНрдЧ рдХреЛ рд╕рд╣реА рдорд╛рдирд╛ рдЬрд╛рдП рдЬрдм рдирд╛рдо рдПрдХ рдЧреИрд░-рд░рд┐рдХреНрдд рдорд╛рди рд╣реИ рдФрд░ рдЖрдпреБ рдорд╛рди 18 рд╕реЗ 65 рддрдХ рд╣реИред рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрди рдирд┐рдпрдореЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдмрдВрдзрд┐рдд рдЧреБрдг рдкреНрд░рджрд╛рди рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдХреБрдЫ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдХрд┐рд╕реА рднреА рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╡рд╕реНрддреБ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рдкреВрд░реНрдг рдЖрдХрд╛рд░ рдХреА рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдХреНрд▓рд┐рдХ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд░рдЯреАрдЯреАрдЖрдИ ред рдкреНрд░реЙрдкрд░реНрдЯреА рд╡реИрд▓реНрдпреВ рдЙрдирд╕реЗ рдЬреБрдбрд╝реА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИред





рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЗрд╕реЗ рдкрдХрдбрд╝рд╛? рдорд╣рд╛рди, рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВред



рдореИрдВрдиреЗ рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдХреИрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдЫреЛрдЯрд╛ рдкрджрд╛рдиреБрдХреНрд░рдо рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рд╕рддреНрдпрд╛рдкрди рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдмрдирд╛рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдФрд░ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдмрдирд╛рдИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рд╕рдордЭреЗрдВрдЧреЗред



рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:



MinimumIntegerAttribute = class (BaseIntegerValidationAttribute)

private

FMinimumValue: Integer;

public

constructor Create(MinimumValue : Integer; const FailureMessage : string );

function Validate(Value : Integer) : boolean; override ;

end;










рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛрддреЗ рд╣реИрдВ, рд╕рддреНрдпрд╛рдкрди рд╡рд┐рдзрд┐ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдирд┐рдпрдо рд╕рд░рд▓ рд╣реИ)ред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:



function MinimumIntegerAttribute.Validate(Value: Integer): boolean;

begin

Result := Value >= FMinimumValue;

end;










рдЕрдм рдореИрдВрдиреЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рддрд░рд╣ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ:



TPerson = class

private

FName: String ;

FAge: Integer;

public

[NonEmptyString( 'Must provide a Name' )]

property Name : String read FName write FName;

[MinimumInteger(18, 'Must be at least 18 years old' )]

[MaximumInteger(65, 'Must be no older than 65 years' )]

property Age : Integer read FAge write FAge;

end;








рд╣рд╛рдВ, рдПрдХ рдФрд░ рдЯреАрдкрд░реНрд╕рди ред рдмрд╣реБрдд рдореВрд▓ рдирд╣реАрдВ рд╣реИред



рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдореИрдВрдиреЗ NonEmtpyString рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдирд╛рдо рдЧреБрдг рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛, рдФрд░ рдЕрдорд╛рдиреНрдп рдорд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдЬреЛрдбрд╝рд╛ред рдореИрдВрдиреЗ рдиреНрдпреВрдирддрдо рдФрд░ рдЕрдзрд┐рдХрддрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЖрдпреБ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рднреА рдиреЛрдЯ рдХрд┐рдпрд╛ред рд╕рдВрднрд╡рддрдГ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рдПрдХ рд╕реАрдорд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдПрдХ рд╣реА рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рджреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЖрд╡реЗрджрди рдХреЛ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред



рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдпрд╛ рдЬреЛ рдПрдХ рдЪреЗрдХ рдХрд░рддрд╛ рд╣реИ:



function Validate(Target : TObject; ErrorList : TStrings) : boolean;

var

ctx : TRttiContext;

t : TRttiType;

p : TRttiProperty;

a : TCustomAttribute;

begin

Result := True;



if not Assigned(Target) then

raise Exception.Create( 'Can' 't validate nil object' );



if not Assigned(ErrorList) then

raise Exception.Create( 'Can' 't validate with a nil ErrorList' );



ctx := TRttiContext.Create;

try

t := ctx.GetType(Target.ClassType);

for p in t.GetProperties do

for a in p.GetAttributes do

if a is BaseIntegerValidationAttribute then

begin

if not BaseIntegerValidationAttribute(a).Validate(p.GetValue(Target).AsInteger) then

ErrorList.Add(BaseValidationAttribute(a).FailureMessage);

end

else if a is BaseStringValidationAttribute then

begin

if not BaseStringValidationAttribute(a).Validate(p.GetValue(Target).AsString) then

ErrorList.Add(BaseValidationAttribute(a).FailureMessage);

end

finally

ctx.Free;

end;

end;








рдкрд╣рд▓реЗ рдореИрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд╕реНрддреБ рдХрд╛ рд╡рдлрд╛рджрд╛рд░ рдЙрджрд╛рд╣рд░рдг рд╢реВрдиреНрдп рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдореИрдВ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрджреЗрд╢ рдбрд╛рд▓реВрдВрдЧрд╛ред



рдЕрдЧрд▓рд╛, рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЪрдпрди рдХрд░реВрдВрдЧрд╛ред рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореИрдВ рд╕рддреНрдпрд╛рдкрди рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реВрдВрдЧрд╛, рдорд╛рди рдХреЛ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдпрджрд┐ рдорд╛рдиреНрдп рдХреЙрд▓ рд╡рд┐рдлрд▓ рд╣реБрдИ, рддреЛ рдореИрдВ FailureMessage рдХреЛ ErrorList рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ ред



рдЖрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдмреЗрд╣рддрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЗрд╕ рддрдереНрдп рдХреА рддрд░рд╣ рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рдореБрдЭреЗ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рд╡реИрдз рд╡рд┐рдзрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╕рд┐рд░реНрдл рдЯрд┐рд╕реНрдЯрд░реНрд╕ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рддреНрд░реБрдЯрд┐рдпрд╛рдВред рдорд╛рдиреНрдпрдХрд░рдг рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреЗрд╢ рдХрд░рдиреЗ рд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, 45 рдорд┐рдирдЯ рдХреЗ рдХрд╛рдо рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдЖрдк рдпрд╣рд╛рдБ рдирдореВрдирд╛ рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред



рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рджреГрдврд╝рддрд╛, рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рдпрд╛ рдХреБрдЫ рдФрд░ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдХрдИ рд▓реЛрдЧреЛрдВ рдиреЗ рдХрд╣рд╛ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЧреБрдг рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рджреЗрдЦреАред рд╢рд╛рдпрдж рдЖрдкрдХреЛ рдЙрдирдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЙрдиреНрд╣реЗрдВ рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рд╡реЗ рдЖрдкрдХреЗ рд╕рд┐рд░ рдореЗрдВ "рдкрд░рд┐рдкрдХреНрд╡" рд╣реЛ рд╕рдХреЗрдВред рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реА рднрд╛рд╖рд╛ рд╣рдорд╛рд░реЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдЖрдХрд╛рд░ рджреЗрддреА рд╣реИ, рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдбреЗрд▓реНрдлреА рдиреЗ рдЕрддреАрдд рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛, рд╣рдо рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреЗ рдЕрднреНрдпрд╕реНрдд рдирд╣реАрдВ рд╣реИрдВред рдЬреЗрдиреЗрд░рд┐рдХ, рдЕрдирд╛рдо рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рдореИрдВ рдЙрдирдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддрд╛ рд╣реВрдВ, рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддрдиреЗ рд╣реА рдЕрдзрд┐рдХ рд╡рд┐рдЪрд╛рд░ рдкреНрд░рдХрдЯ рд╣реЛрддреЗ рд╣реИрдВред



translated.by/you/more-attributes-in-delphi-2010/into-ru/trans

рдЕрдиреБрд╡рд╛рдж: ┬й r3code, TDelphiBlog



All Articles