Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2011, 22:06   #1
D][mon
Форумчанин
 
Регистрация: 05.01.2010
Сообщений: 150
По умолчанию Delphi наследование компонентов(или как то так)

Доброго Вам времени суток!
Пытаюсь добавить к Label новое событие: изменение Caption
Из всякой литературы удалось сделать следущее(см листинг ниже), но куда написать то, что будет считаться собственно событием непонял...
Код:
unit Unit1;

interface

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

type

  TForm1 = class(TForm)
    Edit1: TEdit;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  TChange =  procedure(Sender: TObject) of object;
  TLabel1 = class(TLabel)
    procedure Label1Change (Sender: TObject);
    private
      FOnChange : TChange;
      { Public declarations }
    public
      MaxLength : Integer;
      property OnChange : TChange read FOnChange write FOnChange;
  end;
var
  Form1: TForm1;
  Label1 : TLabel1;
implementation

{$R *.dfm}

procedure TForm1.Edit1Change(Sender: TObject);
begin
 Label1.Caption:=Edit1.Text;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Label1:=Tlabel1.Create(Form1);
Label1.Parent:=Form1;
 With label1 do
 Begin
 Top:=50;
 Left:=100;
 Height:=10;
 AutoSize:=True;
 Caption:='1234567890';
 MaxLength:=5;
 End;
end;

{ TLabel1 }

procedure TLabel1.Label1Change(Sender: TObject);
begin
 //Здесь делаетсе что то делается если вызывается событие :):)OnChange
end;

end.
D][mon вне форума Ответить с цитированием
Старый 10.02.2011, 23:10   #2
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Учись, студент, а то будешь всю жизнь ключи подавать)

Код:
  TMyLabel = class(TLabel)
  private
    FOnCaptionChange: TNotifyEvent;
  protected
    procedure DoCaptionChanged(var Message: TMessage); message CM_TEXTCHANGED;
  published
    property OnCaptionChange: TNotifyEvent read FOnCaptionChange write FOnCaptionChange;
  end;

  TForm1 = class(TForm)
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
  private
    procedure LabelCaptionChanged(Sender: TObject);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TMyLabel }

procedure TMyLabel.DoCaptionChanged(var Message: TMessage);
begin
  inherited;
  if Assigned(FOnCaptionChange) then
    FOnCaptionChange(Self);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  MyLabel: TMyLabel;
begin
  MyLabel := TMyLabel.Create(self);
  MyLabel.Parent := Self;
  MyLabel.OnCaptionChange := LabelCaptionChanged;
  MyLabel.Caption := 'Метка';
end;

procedure TForm1.LabelCaptionChanged(Sender: TObject);
begin
  Label1.Caption := TLabel(Sender).Caption;
end;
mss вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что с файлом и как его, так сделали или изуродовали? valerij Microsoft Office Excel 4 10.01.2011 16:47
Неявные переменные или как-то так kuzjma PHP 3 24.10.2010 22:33
SQL-сервер или как-то так... Tanilita Microsoft Office Access 4 26.01.2010 19:24
Проблема с ParentWindow или SetParent и так плохо и так(когда одно находится в другом) puga555 Общие вопросы Delphi 1 14.12.2009 23:53