Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.10.14;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.038 c
2-1190303313
webpauk
2007-09-20 19:48
2007.10.14
Наследие


2-1190119267
artem779
2007-09-18 16:41
2007.10.14
Internet Explorer


2-1189751911
nick2000
2007-09-14 10:38
2007.10.14
не работает запрос через Clientdataset


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


2-1189853106
ProgRAMmer Dimonych
2007-09-15 14:45
2007.10.14
Снова проблемы (вырезка элементов массива)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский