Форум: "Основная";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];
ВнизВопрос по перекрытию события в потомке класса. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.028 c