Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.06;
Скачать: CL | DM;

Вниз

Вопрос по перекрытию события в потомке класса.   Найти похожие ветки 

 
lipskiy ©   (2004-01-28 22:35) [0]

Допустим, я пишу потомок класса TLabel - TMyLabel. TLabel имеет property OnMouseDown. Мне нужно, чтобы TMyLabel тоже имел это свойство, но так, чтобы при происхождении MouseDown сначала выполнялся код в моем классе TMyLabel, а затем код в обработчике OnMouseDown моего TMyLabel в головной программе, если он назначен.

Как это делается? Что нужно написать в классе TMyLabel, чтобы назначиться на OnMouseDown и после выполнения кода передать обработку OnMouseDown головной программе? Перекрыть вроде бы нечего, поскольку никакого DoMouseDown в TLabel нет.


 
Юрий Федоров ©   (2004-01-28 22:37) [1]

procedure TControl.MouseDown;


 
lipskiy ©   (2004-01-28 22:51) [2]

Да, вроде бы все получилось.
Посмотрите, плиз, все ли корректно:

unit Unit1;

interface

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

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure LabelMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;

TMyLabel = class(TLabel)
private
procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override;
end;

var
Form1: TForm1;
lab:TMyLabel;

implementation

{$R *.dfm}

procedure TMYLabel.MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer);
begin
inherited MouseDown(Button, Shift, X, Y);
Caption:= "Internal ";
if Assigned(OnMouseDown) then OnMouseDown(Self, Button, Shift, X, Y);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
lab:= TMyLabel.Create(Self);
lab.Parent:= Form1;
lab.OnMouseDown:= LabelMouseDown;
lab.Caption:= "Label created";
end;

procedure TForm1.LabelMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
lab.Caption:= lab.Caption + "External";
end;

end.


 
Юрий Федоров ©   (2004-01-28 22:57) [3]

Не все корректно
if Assigned(OnMouseDown) then OnMouseDown(Self, Button, Shift, X, Y);

Это уже вызывается в
inherited MouseDown(Button, Shift, X, Y);

то есть событие вызывается 2 раза


 
lipskiy ©   (2004-01-28 22:58) [4]

Угу, то есть правильно так:?

procedure TMYLabel.MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer);
begin
Caption:= "Internal ";
inherited MouseDown(Button, Shift, X, Y);
end;



Страницы: 1 вся ветка

Текущий архив: 2004.02.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.029 c
14-16746
Andy
2004-01-15 19:51
2004.02.06
№ билда для


3-16115
stud
2004-01-15 13:05
2004.02.06
возможно ли отображение в гриде вложенных таблиц


4-16806
dcii
2003-11-29 20:38
2004.02.06
Спящий режим


14-16629
ИМХО
2004-01-13 02:18
2004.02.06
По поводу Mozilla


1-16482
X-file_
2004-01-22 07:03
2004.02.06
надстройки Word