|  | 
 
 | 
| 
 | |||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
|  | 
|  | Опции темы | Поиск в этой теме | Опции просмотра | 
| 
			 
			#1  
			
			
			
			
		 | ||||
| 
 | ||||
|  Обращение к процедурам на форме Как можно обратиться к процедурам формы из собственноручно написанной процедуры? Выпадает ошибка: 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  
			
			
			
			
		 | ||||
| 
 | ||||
|   Код: procedure procedure1;
begin
if Form1.Label6.Caption<>('') then
  if MessageDlg('Файл не сохранён. Сохранить?',mtConfirmation,[mbYes, mbNo],0)=6
    then Form1.N10Click(nil);
end; | 
| Этот пользователь сказал Спасибо Yurk@ за это полезное сообщение: | ||
|  
R-18Rus (14.05.2012)
 | ||
| 
			 
			#3  
			
			
			
			
		 | |||
| 
 | |||
|   Цитата: 
 Код: procedure procedure1;
begin
if Form1.Label6.Caption<>('') then
  if MessageDlg('Файл не сохранён. Сохранить?',mtConfirmation,[mbYes, mbNo],0)=6
    then Form1.N10Click(Self);
end; | 
| 
			 
			#4  
			
			
			
			
		 | ||||
| 
 | ||||
|   Интерфейс навесь, потом будешь приводить, если привелось - дернешь нужный метод. | 
| 
			 
			#5  
			
			
			
			
		 | ||||
| 
 | ||||
|   Self не сработал. А почему сработал Nil? Насколько мне известно - это указатель вникуда. | 
| 
			 
			#6  
			
			
			
			
		 | |||
| 
 | |||
|   Цитата: 
 Ну, если к нему нет обращения, то, собственно, почему бы ему и не сработать. Вот если внутри обработчика N10Click ты попробуешь обратиться к Sender - получишь ошибку. А Self не сработал потому что у тебя его и нет, т.к. данная процедура не является методом класса (в смысле, объекта, для метода класса, который of class, тоже нет Self). Учите матчасть, это всегда полезно. | 
| 
			 
			#7  
			
			
			
			
		 | ||||
| 
 | ||||
|   Цитата: 
 Это не указатель, а объект, который вызывает данную процедуру. Опять же как сказано выше, если в обработчике нажатия на указанный пункт меню не обрабатывается sender, то указывай nil. | 
| 
			 
			#8  
			
			
			
			
		 | ||||
| 
 | ||||
|   если в N10Click(Sender:TObject); обрабатывать аргумент (Sender), то nil тоже не сработает, здесь значение nil является просто заглушкой, т.к. процедура требует какого-либо аргумента значение Self не сработало, т.к. процедура, из которой происходит вызов (согласно примера выданного icsander' ом) не является методом какого либо класса, соответственно значения self у нее вообще не существует и обращение к этому значению выдает ошибку опередили  Последний раз редактировалось cotseec, 14.05.2012 в 07:53. | 
| Этот пользователь сказал Спасибо cotseec за это полезное сообщение: | ||
|  
R-18Rus (19.05.2012)
 | ||
| 
			 
			#9  
			
			
			
			
		 | ||||
| 
 | ||||
|   Цитата: 
 Код: procedure TForm1.procedure1;  | 
| 
			 
			#10  
			
			
			
			
		 | ||||
| 
 | ||||
|   Код: Form1.Button1Click(nil); Form1.Button1Click(Form1); Form1.Button1Click(Application); Form1.Button1Click(TButton.Create(Application)); | 
| 
			 
			#11  
			
			
			
			
		 | |||
| 
 | |||
|   Цитата: 
  ). Self - это явное задание экземпляра класса в его методе. Например для формы - это указание на саму форму: Код: procedure TForm1.N10Click(Sender: TObject); begin Showmessage(Self.classname+#13#10+Self.name); end; Self иногда, еще называют безопасным аргументом методов класса, поэтому предпочтительно использовать именно его. Последний раз редактировалось icsander, 15.05.2012 в 16:33. |