Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Наследование [D6, WinXP]


webpauk ©   (2007-11-21 18:10:00) 

TDel = class(TComponent)
public
fID: Integer;
LblDel: TLabel;
procedure pLblDelClick(Sender: TObject);
end;

procedure TDel.pLblDelClick(Sender: TObject);
begin
 if MessageDlg('Удалить:: '+LblDel.Caption+'?', mtConfirmation, [mbYes, mbNo], 0)<>mrYes then Abort;
end;

var
 fLbl: TDel;
begin
 fLbl:=TDel.Create(Self);
 fLbl.OnClick=MyLblClick;
end;

procedure Form.MyLblClick(SeTobject);
begin
 inherited;

 doSomeThing...
end;


наследования метода Click (TDel.pLblDelClick) - не происходит.
Как?


Leonid Troyanovsky   (2007-11-21 19:29:00) [1]


> Johnmen ©   (21.11.07 18:59) [16]

> Хотел поглумиться. Не буду...

А ведь надо было дать коленом под зад.
Надо.

--
Regards, LVT.


webpauk   (2007-11-21 19:11:00) [2]

эх вы...
всего то делов:


 TDelLabel = class(TLabel)
 private
   fOnClick: TNotifyEvent;
   procedure Click; override;
 published
   property OnClick: TNotifyEvent read fOnClick write fOnClick;
 end;

procedure TDelLabel.Click;
begin
 MessageDlg('Click', mtInformation, [mbOk], 0);
 if Assigned(FOnClick) then FOnClick(Self);
end;

 TMyClass = class(TComponent)
 public
   Lbl: TDelLabel;
   constructor Create(AOwner: TComponent); override;
 end;


Johnmen   (2007-11-21 18:59:00) [3]

Хотел поглумиться. Не буду...


webpauk   (2007-11-21 18:43:00) [4]


> Плохиш ©   (21.11.07 18:39) [14]


unit Unit1;

interface

uses
 SysUtils, Types, Classes, QGraphics, QControls, QForms, QDialogs,
 QStdCtrls;

type
 TMyClass = class(TComponent)
 public
   Lbl: TLabel;
   procedure LblClick(Sender: TObject);
   constructor Create(AOwner: TComponent); override;
 end;

 TForm1 = class(TForm)
   procedure FormCreate(Sender: TObject);
 end;

var
 Form1: TForm1;

implementation

{$R *.xfm}

constructor TMyClass.Create(AOwner: TComponent);
begin
 Lbl:=TLabel.Create(Self);
 Lbl.Caption:='Click Me';
 Lbl.OnClick:=LblClick;
end;

procedure TMyClass.LblClick(Sender: TObject);
begin
 MessageDlg('Clicked', mtInformation, [mbOk], 0);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
 fMyClass: TMyClass;
begin
 fMyClass:=TMyClass.Create(Self);
 with fMyClass do
 begin
   Lbl.Parent:=Self;
   Lbl.Left:=10;
   Lbl.Top:=10;
 end;
end;

end.


Плохиш   (2007-11-21 18:39:00) [5]


> webpauk ©   (21.11.07 18:37) [12]
>
> > Плохиш ©   (21.11.07 18:35) [11]
>
> ага...
> кодом

и каким же?


Плохиш   (2007-11-21 18:39:00) [6]


> webpauk ©   (21.11.07 18:33) [10]
> да я понимаю ошибку...
> как правильно унаследовать

По моему, тебе уже года два назад советовали что-нибудь почитать


webpauk   (2007-11-21 18:37:00) [7]


> Плохиш ©   (21.11.07 18:35) [11]

ага...
кодом


Плохиш   (2007-11-21 18:35:00) [8]


> webpauk ©   (21.11.07 18:27) [8]
> но ведь событие OnClick - определено...
> и если fLbl.OnClick=MyLblClick; не прописывать, обработчиком
> будет TDel.pLblDelClick

Нифигасе, и обосновать сиё утверждение сможешь?


webpauk   (2007-11-21 18:33:00) [9]

да я понимаю ошибку...
как правильно унаследовать


Reindeer Moss Eater   (2007-11-21 18:30:00) [10]

А при чем здесь наследование?

Или ты про это?
procedure Form.MyLblClick(SeTobject);
begin
inherited;

А у предка Form есть метод MyLblClick?


webpauk   (2007-11-21 18:27:00) [11]

но ведь событие OnClick - определено...
и если fLbl.OnClick=MyLblClick;не прописывать, обработчиком будет TDel.pLblDelClick


Reindeer Moss Eater   (2007-11-21 18:25:00) [12]

Или ты думаешь, что если создать такой класс

TDummy = class(TComponent)
...
property OnLightOn : TNotifyEvent;
...
end;

То он волшебным образом реагировать на зажигание люстры в комнате?


Reindeer Moss Eater   (2007-11-21 18:23:00) [13]

а что как?
начни с того, что у TComponent нет вообще никакого OnClick. И твой чудесный  TDel тоже никак не реагирует на клики мыши.


webpauk   (2007-11-21 18:20:00) [14]

а как?


Reindeer Moss Eater   (2007-11-21 18:19:00) [15]

Это тебе только так кажется.
Это простое присвоение значения свойству.


webpauk   (2007-11-21 18:18:00) [16]

var
fLbl: TDel;
begin
fLbl:=TDel.Create(Self);
fLbl.OnClick=MyLblClick; - наследует TDel.pLblDelClick
end;


Reindeer Moss Eater   (2007-11-21 18:12:00) [17]

Главное что именно и у кого именно.
:)


Reindeer Moss Eater   (2007-11-21 18:11:00) [18]

А есть что наследвать?


Наверх

Титульная страница Поиск, карта сайта Написать письмо