Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.11.2012, 06:31
Rabid Coyote Rabid Coyote вне форума
Прохожий
 
Регистрация: 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.


буду благодарен за любую помощь.

Последний раз редактировалось lmikle, 24.11.2012 в 08:57.
Ответить с цитированием
  #2  
Старый 24.11.2012, 08:59
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,048
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну, не вижу каких-то особых проблем. Просто перенеси код из второго компонента, который с выравниванием, в первый. На первый взгляд код вполне совместим и не должен мешать друг другу.
Ответить с цитированием
  #3  
Старый 24.11.2012, 10:42
Rabid Coyote Rabid Coyote вне форума
Прохожий
 
Регистрация: 08.06.2012
Сообщения: 32
Версия Delphi: 10 Lite, 2007
Репутация: 10
По умолчанию lmikle

Объединил. Но в одной процедуре (выделена красным) возникает ошибка "незадекларированный идентификатор" вот код:

unit EditLetNum;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TEditAlignment=(eaLeft, eaCenter, eaRight);
TEditLetNum = Class(TEdit)
private
{private declarations}
FClear:TNotifyEvent;{Поля события OnClear}
FEnableNum:boolean;
FenableLet:boolean;
FModified:boolean;
FAlignment: TEditAlignment;
protected
{protected declarations}
procedure SetAlignment (value: TEditAlignment);
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 Alignment: TEditAlignment read FAlignment write SetAlignment;
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.CreateParams(var Params:TCreateParams);
begin
inherited;
Case FAlignment 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;


procedure TEditLetNum.SetAlignment(value:TEditAlignment);
begin
if FAlignment<> Value then begin
FAlignment:=Value;
end;RecreateWnd;
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.

Последний раз редактировалось Rabid Coyote, 24.11.2012 в 10:44.
Ответить с цитированием
  #4  
Старый 24.11.2012, 11:20
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

Добавьте вот это:
Код:
protected
  { Protected-Deklarationen }
  procedure CreateParams(var Params: TCreateParams); override;
Ответить с цитированием
Этот пользователь сказал Спасибо sariman за это полезное сообщение:
Rabid Coyote (24.11.2012)
  #5  
Старый 24.11.2012, 12:27
Rabid Coyote Rabid Coyote вне форума
Прохожий
 
Регистрация: 08.06.2012
Сообщения: 32
Версия Delphi: 10 Lite, 2007
Репутация: 10
По умолчанию

Sariman, спасибо!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:19.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter