![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
![]()  | 
	
	
| 
		 | 
	Опции темы | Поиск в этой теме | Опции просмотра | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Уважаемые пользователи. Помогите пожалуйста. 
		
	
		
		
		
		
		
	
		
		
	
	
	Проблема: есть 15 кнопок меню. Как сделать так, чтобы при событии "нажатие кнопки" в соответствии с самой кнопкой (N1...N15) выполнялось определенное действие. (например если нажата кнопка N1 прибавляем 1 к переменной, если N2, то 2...) Можно сделать для каждой кнопки обработчик... но 15 обработчиков события OnClick - это неэстетично на первый взгляд.  | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Кидаешь на форму 15-ть кнопок и к примеру 1- TEdit. 
		
	
		
		
		
		
		
		
			Затем кликаешь, поочередно, два раза в кнопку и видишь на экране - Код: 
	procedure TForm1.Button1Click(Sender: TObject); begin //Здесь пишешь код, например Edit1.Text:=IntToStr(StrToInt(Edit1.Text)+1); end; и так далее обрабатывай щелчек каждой кнопки... Последний раз редактировалось PashaXP, 05.08.2008 в 11:15.  | 
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 эстетичнее будет сделать один обработчик для всех кнопок, инкремент хранить например в Tag кнопки а обработчик для всех кнопок например такой 
		
	
		
		
		
		
		
	
		
		
	
	
	Код: 
	procedure TForm1.Button2Click(Sender: TObject); begin Caption := IntToStr((sender as TButton).Tag); end;  | 
| 
		 
			 
			#4  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Кидай на форму Button и MainMenu. В MainMenu создай первый пункт (типа 'файл' в программах).  
		
	
		
		
		
		
		
	
		
		
	
	
	В обработчиках событий пиши следующее: Код: 
	procedure TForm1.Button1Click(Sender: TObject); var item: TMenuItem; i: integer; begin //динамически создаем пункты меню for i := 1 to 15 do begin item := TMenuItem.Create(self); MainMenu1.Items[0].Add(item); item.Caption := 'item ' + inttostr(i); item.tag := i; item.OnClick := ItemClick; end; end; procedure TForm1.ItemClick(Sender: TObject); begin Showmessage(IntToStr((Sender as TMenuItem).tag)) ; //с tag'ом можешь делать все, что хочешь end; end.  | 
| 
		 
			 
			#5  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Если тебе нужно производить эти действия именно в МЕНЮ, то принцип тот же - 
		
	
		
		
		
		
		
	
		
		
	
	
	Код: 
	procedure TForm1.N11Click(Sender: TObject); begin Edit1.Text:=IntToStr(StrToInt(Edit1.Text)+1); end;  | 
| 
		 
			 
			#6  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
 Павел, Вы слегка не так меня поняли. Я хочу "красиво" это сделать. А не писать 15 обработчиков для каждой кнопки.  | 
| 
		 
			 
			#7  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Тогда, сори.... 
		
	
		
		
		
		
		
	
		
		
	
	
	 | 
| 
		 
			 
			#8  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Цитата: 
	
 Спасибо. Примерно понятно. Но примерно. Дело в том что, "инкремент" - это я для примера просто написал. А не знаешь, как примерно реализовать следущее: чтобы при нажатии определенного пункта меню ( от 1 до 15) создавался файл с названием пункта меню. Функции создания файла я знаю - можно заменить на //создание файла.  | 
| 
		 
			 
			#9  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Код: 
	procedure TForm1.ItemClick(Sender: TObject); begin AssignFile(f,'D:\'+(Sender as TMenuItem).Caption+'.test'); Rewrite(f); Write(...); CloseFile(...) end; тут фишка в том что Sender это просто указатель на объект, но если его привести явно к типу, то становяться доступны его методы и свойства... Последний раз редактировалось Admin, 05.08.2008 в 11:43.  | 
| 
		 
			 
			#10  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Спасибо всем )  
		
	
		
		
		
		
		
	
		
		
	
	
	разобрался. все работает. Можно закрывать  |