
24.11.2012, 06:31
|
Прохожий
|
|
Регистрация: 08.06.2012
Сообщения: 32
Версия Delphi: 10 Lite, 2007
Репутация: 10
|
|
Объединение EditLetNum и AlignEdit
Здравствуйте, уважаемые!  Нужна ваша помощь в таком деле: есть два компонента на основе TEdit - первый EditLetNum дает возможность вводить в поле только цифры либо только буквы. Второй выравнивает текст по центру, либо по краям. Нужно объединить два этих компонента в один, который бы обладал всеми заданными свойствами.
EditLetNum:
Код:
unit EditLetNum;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TEditLetNum = Class(TEdit)
private
{private declarations}
FClear:TNotifyEvent;{Поля события OnClear}
FEnableNum:boolean;
FenableLet:boolean;
FModified:boolean;
protected
{protected declarations}
procedure SetEnableNum(Value:boolean);{Процедура записи}
procedure SetEnableLet(Value:boolean);{Процедура записи}
procedure KeyPress(var Key:Char);override;
public
{public declarations}
property Modified:boolean read FModified default true;
constructor create(AOwner:TComponent);override;{Конструктор}
procedure Clear;override;
published
{published declarations}
property OnClear:TNotifyEvent read FClear write FClear;{событие}
property EnableNum:boolean read FEnableNum write SetEnableNum default true;
property EnableLet:boolean read FEnableLet write SetEnableLet default true;
end;
procedure Register;
implementation
procedure TEditLetNum.SetEnableNum(Value:boolean);
begin
FEnableNum:=Value; {Присвоение значения полю FEnableNum}
{Если значения FEnableNum и FEnableLet =false, то полю FenableLet присваевается true}
if (not Value)
then if (not FEnableLet) then FEnableLet:=true;
end;
procedure TEditLetNum.SetEnableLet(Value:boolean);
begin
FEnableLet :=Value;{присвоение значения полю FEnableLet}
{Если значения FEnableNum и FEnableLet=false, то полю FEnableNum присваевается true}
if (not Value)
then if (not FEnableNum) then FEnableNum:=true;
end;
procedure Register;
begin
RegisterComponents('MyComponents',[TEditLetNum]);
end;
constructor TEditLetNum.create(AOwner:TComponent);
begin
inherited create(AOwner);{Вызов конструктора класса родителя}
FEnableNum:=True;
FenableLet:=True;
FModified:=False;
end;
procedure TEditLetNum.KeyPress(var Key:Char);
begin
if (not FEnableNum) and (Key in ['0'..'9'])
then Key:=#0;
if (not FenableLet) and not (Key in ['0'..'9'])
then Key:=#0;
if (Key<>#0) then FModified:=true;
inherited KeyPress(Key);
end;
procedure TEditLetNum.Clear;
begin
{Вызов обработчика пользователя}
if assigned(FClear) then OnClear(Self);
{Вызов родительского метода}
inherited Clear;
FModified:=false;
end;
end.
AlignEdit
Код:
unit AlignEdit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TAlign = (eaLeft, eaCenter, eaRight);
TAlignEdit = class(TEdit)
private
{ Private-Deklarationen }
FAlign: TAlign;
procedure SetAlign(const Value: TAlign);
protected
{ Protected-Deklarationen }
procedure CreateParams(var Params: TCreateParams); override;
public
{ Public-Deklarationen }
constructor Create(AOwner: TComponent); override;
published
{ Published-Deklarationen }
property Alignment: TAlign read FAlign write SetAlign default eaLeft;
end;
procedure Register;
implementation
constructor TAlignEdit.Create(Aowner: TComponent);
begin
inherited Create(AOwner);
FAlign := eaLeft;
end;
procedure TAlignEdit.SetAlign(const Value: TAlign);
begin
if FAlign <> Value then
begin
FAlign := Value;
RecreateWnd;
end;
end;
procedure TAlignEdit.CreateParams(var Params: TCreateParams);
begin
inherited;
case FAlign of
eaLeft: Params.Style := Params.Style or ES_LEFT;
eaCenter: Params.Style := Params.Style or ES_CENTER;
eaRight: Params.Style := Params.Style or ES_RIGHT;
end;
end;
procedure Register;
begin
RegisterComponents('MyComponents', [TAlignEdit]);
end;
end.
буду благодарен за любую помощь. 
|