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

Вниз

Наследие   Найти похожие ветки 

 
webpauk   (2007-09-20 19:48) [0]

Создал форму.
Создаю на её основе наследников: TForm2 = class(TForm1)

Следующий код не работает:
procedure TForm2.btnDelClick(Sender: TObject);
begin
 inherited;
 ShowMessage("");
end;


в чём причина?


 
Anatoly Podgoretsky ©   (2007-09-20 19:51) [1]

> webpauk  (20.09.2007 19:48:00)  [0]

И что?


 
webpauk   (2007-09-20 20:00) [2]

в чём ошибка?
почему обрабатывается inherited и не обрабатывается ShowMessage("");


 
Вася Правильный   (2007-09-20 20:03) [3]


> обрабатывается inherited

и чево он делает в обработчике кнопки?


 
webpauk   (2007-09-20 20:06) [4]


> Вася Правильный   (20.09.07 20:03) [3]

всё что прописано в Form1.btnDelClick(Sender: TObject);


 
webpauk   (2007-09-20 20:11) [5]

собсно говоря мне нужен override для procedure TForm2.btnDelClick(Sender: TObject);


 
webpauk   (2007-09-20 20:18) [6]

упс...
вызов(создание) наследника осуществлялся на основе кода:

class function TForm1.Execute(): Boolean;
begin
 with TForm1.Create(Application) do
 begin
   try
     Result:=ShowModal=mrOk;
   finally
     Free;
   end;
 end;
end;


ошибка помечена жирным наклоном


 
Kolan ©   (2007-09-20 20:25) [7]

Ни че не  понял кроме [5] webpauk   (20.09.07 20:11).

Сделай виртуальный метод в форме 1 и перекрывай его в форме 2 наздаровье.


 
tesseract ©   (2007-09-20 21:30) [8]


> почему обрабатывается inherited и не обрабатывается ShowMessage("");


Откуда он у него возьмёться? Если OnClick есть ссылка на метод?


 
Anatoly Podgoretsky ©   (2007-09-20 21:32) [9]

> tesseract  (20.09.2007 21:30:08)  [8]

Свойство процедурного типа.


 
tesseract ©   (2007-09-20 21:39) [10]


> Свойство процедурного типа.


И какая разница ? Предка, ему не полагаеться.


 
Anatoly Podgoretsky ©   (2007-09-20 21:46) [11]

> tesseract  (20.09.2007 21:39:10)  [10]

Так не откуда браться предку, это же не класс и не метод.


 
Anatoly Podgoretsky ©   (2007-09-20 21:47) [12]


> И какая разница ? Предка, ему не полагаеться.

Я сказал твою же мысль, только другими словами, что бы у него был выбор в понимание.


 
tesseract ©   (2007-09-20 22:01) [13]


> Я сказал твою же мысль, только другими словами, что бы у
> него был выбор в понимание.


тогда это свойтсво процедурного объектного типа, ибо просто процедурный тип в VMT объекта не попадёт. Если маразм не изменяет. Tnotify как раз и создан дабы не париться с областью видимости.


 
{RASkov} ©   (2007-09-21 01:59) [14]

> [2] webpauk   (20.09.07 20:00)

TForm1 = class(TForm)
 ....
 procedure btnDelClick(Sender: TObject); virtual;
end;

procedure TForm1.btnDelClick(Sender: TObject);
begin
ShowMessage("TForm1");
end;
----------------------------------------------------

TForm2 = class(TForm1)
 ....
 procedure btnDelClick(Sender: TObject); override;
end;

procedure TForm2.btnDelClick(Sender: TObject);
begin
inherited;                //Вывод - "TForm1"
ShowMessage("TForm2");    //Вывод - "TForm2"
end;

Что и было сказано в [7]...


 
{RASkov} ©   (2007-09-21 02:02) [15]

> [6] webpauk   (20.09.07 20:18)

Но если даже напишешь так
with TForm2.Create(Application) do
но без virtual(override), то все равно будет вызван метод из TForm1....


 
Kolan ©   (2007-09-21 08:45) [16]

> Что и было сказано в [7]&#133

Я вообще-то предложил несколько другое.

TForm1 = class(TForm)
&#133
procedure SomeMethod; virtual;
end;

procedure TForm1.SomeMethod;
begin
 ShowMessage("TForm1");
end;
----------------------------------------------------

TForm2 = class(TForm1)
&#133
procedure SomeMethod; override;
end;

procedure TForm2.SomeMethod;
begin
inherited;                //Вывод — «TForm1»
ShowMessage("TForm2");    //Вывод — «TForm2»
end;


А в обработчике клика вызывать&#133
procedure TForm2.btnDelClick(Sender: TObject);
begin
 SomeMethod;
end;


Так имхо понятнее


 
Плохиш ©   (2007-09-21 11:08) [17]

Читал посты после [6], всем спасибо, настроение с утра подняли :-))


 
webpauk   (2007-09-21 13:14) [18]

господа! ошибка была не в обработчике наследника,а в методе создания потомка.
есть глупый вопрос:

procedure Tform1.btnDelClick(Sender: TObject);
begin
 if messagebox("Удалить", mtconfirmation, [mbYes, mbNo], 0)<>mrYes then Exit;
end;

procedure Tform2.btnDelClick(Sender: TObject);
begin
 inherited;
end;


как сделать, не используя внешних переменных для сохранения значения вызова messagebox в классе-потомке, чтобы в классе наследнике при обработке inherited происходило прекращения обработчика Tform2.btnDelClick, если Tform1.messagebox("Удалить", mtconfirmation, [mbYes, mbNo], 0)<>mrYes


 
Плохиш ©   (2007-09-21 13:31) [19]

Надо exit заменить на abort.


 
Kolan ©   (2007-09-21 14:38) [20]

> как сделать, не используя внешних переменных


Это?

procedure Tform2.btnDelClick(Sender: TObject);
begin
if inherited btnDelClick(Sender) <> mrYes then
 Exit;
end;


 
Плохиш ©   (2007-09-21 14:44) [21]


> Kolan ©   (21.09.07 14:38) [20]

Ты бы хоть в компиляторе свои глупости проверял для начала :-(


 
Kolan ©   (2007-09-21 15:13) [22]

> Ты бы хоть в компиляторе свои глупости проверял для начала
> :-(

Да, действительно этож, процедура&#133 Да это вообще полный изврат имхо&#133

Вот:

TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
   function SomeFoo: Integer; virtual;
 end;

 TForm2 = class(TForm1)
 public
   function SomeFoo: Integer; override;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 SomeFoo;
 with TForm2.Create(Self) do
 begin
   SomeFoo;
   Free;
 end;
end;

function TForm1.SomeFoo: Integer;
begin
 Result := MessageDlg("Удалить", mtConfirmation, [mbYes, mbNo], 0);
 if Result <> mrYes then
   Exit;
end;

{ TForm2 }

function TForm2.SomeFoo: Integer;
begin
 if inherited SomeFoo <> mrYes then
   Exit;
end;

end.


Незнаю что эта хрень делает, но кажется саюжу соответствует&#133


 
Плохиш ©   (2007-09-21 15:52) [23]

Как только они не извращаются :-))



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

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

Наверх




Память: 0.52 MB
Время: 0.023 c
15-1189596497
FreeTT
2007-09-12 15:28
2007.10.14
Добавление группы в TRZBarGroup


2-1190074315
SerJaNT
2007-09-18 04:11
2007.10.14
PHP и MySQL


1-1185860622
mefodiy
2007-07-31 09:43
2007.10.14
Удалени столбцов Excel по числовым адерсам ячеек


2-1190280036
Kolan
2007-09-20 13:20
2007.10.14
Как поймат событие после изменения Text у DBLookUpComboBox?


15-1189669246
Vlad Oshin
2007-09-13 11:40
2007.10.14
Идея написать программку - статистика футбола, например