Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.05.2012, 09:19
Аватар для R-18Rus
R-18Rus R-18Rus вне форума
Новичок
 
Регистрация: 08.04.2012
Сообщения: 68
Версия Delphi: Delphi 7
Репутация: 127
По умолчанию Обращение к процедурам на форме

Как можно обратиться к процедурам формы из собственноручно написанной процедуры? Выпадает ошибка: Undeclarated identifier: 'Sender'. Пробовал писать (Sender) и (Sender: TObject) - ошибка не проходит.

Код:
Код:
procedure procedure1;
begin
if Form1.Label6.Caption<>('') then
  if MessageDlg('Файл не сохранён. Сохранить?',mtConfirmation,[mbYes, mbNo],0)=6
    then Form1.N10Click(Sender: TObject);
end;
Ответить с цитированием
  #2  
Старый 13.05.2012, 09:45
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

Код:
procedure procedure1;
begin
if Form1.Label6.Caption<>('') then
  if MessageDlg('Файл не сохранён. Сохранить?',mtConfirmation,[mbYes, mbNo],0)=6
    then Form1.N10Click(nil);
end;
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
Этот пользователь сказал Спасибо Yurk@ за это полезное сообщение:
R-18Rus (14.05.2012)
  #3  
Старый 13.05.2012, 11:29
icsander icsander вне форума
Новичок
 
Регистрация: 17.04.2011
Сообщения: 87
Репутация: 10
По умолчанию

Цитата:
Сообщение от Yurk@
Код:
procedure procedure1;
begin
if Form1.Label6.Caption<>('') then
  if MessageDlg('Файл не сохранён. Сохранить?',mtConfirmation,[mbYes, mbNo],0)=6
    then Form1.N10Click(nil);
end;
Можно и
Код:
procedure procedure1;
begin
if Form1.Label6.Caption<>('') then
  if MessageDlg('Файл не сохранён. Сохранить?',mtConfirmation,[mbYes, mbNo],0)=6
    then Form1.N10Click(Self);
end;
если в N10Click обрабатывается Sender.
Ответить с цитированием
  #4  
Старый 13.05.2012, 12:26
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Интерфейс навесь, потом будешь приводить, если привелось - дернешь нужный метод.
Ответить с цитированием
  #5  
Старый 14.05.2012, 07:33
Аватар для R-18Rus
R-18Rus R-18Rus вне форума
Новичок
 
Регистрация: 08.04.2012
Сообщения: 68
Версия Delphi: Delphi 7
Репутация: 127
По умолчанию

Self не сработал.
А почему сработал Nil? Насколько мне известно - это указатель вникуда.
Ответить с цитированием
  #6  
Старый 14.05.2012, 07:46
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от R-18Rus
Self не сработал.
А почему сработал Nil? Насколько мне известно - это указатель вникуда.

Ну, если к нему нет обращения, то, собственно, почему бы ему и не сработать. Вот если внутри обработчика N10Click ты попробуешь обратиться к Sender - получишь ошибку.

А Self не сработал потому что у тебя его и нет, т.к. данная процедура не является методом класса (в смысле, объекта, для метода класса, который of class, тоже нет Self).

Учите матчасть, это всегда полезно.
Ответить с цитированием
  #7  
Старый 14.05.2012, 07:48
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

Цитата:
Сообщение от R-18Rus
Self не сработал.
А почему сработал Nil? Насколько мне известно - это указатель вникуда.
Что значит Self не сработал?
Это не указатель, а объект, который вызывает данную процедуру. Опять же как сказано выше, если в обработчике нажатия на указанный пункт меню не обрабатывается sender, то указывай nil.
__________________
Google в помощь
Ответить с цитированием
  #8  
Старый 14.05.2012, 07:50
Аватар для cotseec
cotseec cotseec вне форума
Активный
 
Регистрация: 16.07.2008
Сообщения: 353
Версия Delphi: D7,TDE06,RAD09
Репутация: 1443
По умолчанию

если в N10Click(Sender:TObject); обрабатывать аргумент (Sender), то nil тоже не сработает, здесь значение nil является просто заглушкой, т.к. процедура требует какого-либо аргумента

значение Self не сработало, т.к. процедура, из которой происходит вызов (согласно примера выданного icsander' ом) не является методом какого либо класса, соответственно значения self у нее вообще не существует и обращение к этому значению выдает ошибку

опередили

Последний раз редактировалось cotseec, 14.05.2012 в 07:53.
Ответить с цитированием
Этот пользователь сказал Спасибо cotseec за это полезное сообщение:
R-18Rus (19.05.2012)
  #9  
Старый 14.05.2012, 07:54
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

Цитата:
Сообщение от lmikle
А Self не сработал потому что у тебя его и нет...
Ну да, не заметил блин:
Код:
procedure TForm1.procedure1;
__________________
Google в помощь
Ответить с цитированием
  #10  
Старый 14.05.2012, 08:33
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
Смех

Код:
  Form1.Button1Click(nil);
  Form1.Button1Click(Form1);
  Form1.Button1Click(Application);
  Form1.Button1Click(TButton.Create(Application));
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #11  
Старый 15.05.2012, 16:12
icsander icsander вне форума
Новичок
 
Регистрация: 17.04.2011
Сообщения: 87
Репутация: 10
По умолчанию

Цитата:
Сообщение от Ildar-tsr
Ну да, не заметил блин:
Код:
procedure TForm1.procedure1;
Блин, у меня косоглазие (не заметил, что процедура не метод класса, привык по умолчанию ).
Self - это явное задание экземпляра класса в его методе.
Например для формы - это указание на саму форму:
Код:
procedure TForm1.N10Click(Sender: TObject);
begin
Showmessage(Self.classname+#13#10+Self.name);
end;
Т.е. Sender - это <Form1>.
Self иногда, еще называют безопасным аргументом методов класса, поэтому предпочтительно использовать именно его.

Последний раз редактировалось icsander, 15.05.2012 в 16:33.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:18.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025