![]() |
|
|
Регистрация | << Правила форума >> | 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
|
|||
|
|||
![]() Спасибо всем )
разобрался. все работает. Можно закрывать |