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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 05.08.2008, 09:57
bananan bananan вне форума
Прохожий
 
Регистрация: 05.08.2008
Сообщения: 24
Репутация: 10
По умолчанию Работа с множеством компонентов

Уважаемые пользователи. Помогите пожалуйста.
Проблема: есть 15 кнопок меню. Как сделать так, чтобы при событии "нажатие кнопки" в соответствии с самой кнопкой (N1...N15) выполнялось определенное действие. (например если нажата кнопка N1 прибавляем 1 к переменной, если N2, то 2...)
Можно сделать для каждой кнопки обработчик... но 15 обработчиков события OnClick - это неэстетично на первый взгляд.
Ответить с цитированием
  #2  
Старый 05.08.2008, 11:03
PashaXP PashaXP вне форума
Новичок
 
Регистрация: 05.02.2008
Сообщения: 81
Репутация: 15
По умолчанию

Кидаешь на форму 15-ть кнопок и к примеру 1- TEdit.
Затем кликаешь, поочередно, два раза в кнопку и видишь на экране -
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
 //Здесь пишешь код, например
 Edit1.Text:=IntToStr(StrToInt(Edit1.Text)+1);
end;
предварительно в инспекторе обьектов компонента Edit1 в свойстве Text сотри Edit1и поставь ноль, либо програмно присвой Edit1.Text:=0;

и так далее обрабатывай щелчек каждой кнопки...

Последний раз редактировалось PashaXP, 05.08.2008 в 11:15.
Ответить с цитированием
  #3  
Старый 05.08.2008, 11:12
xchrom xchrom вне форума
Начинающий
 
Регистрация: 08.04.2008
Сообщения: 177
Репутация: 15
По умолчанию

эстетичнее будет сделать один обработчик для всех кнопок, инкремент хранить например в Tag кнопки а обработчик для всех кнопок например такой
Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
  Caption := IntToStr((sender as TButton).Tag);
end;
Sender здесь ссылка на объект, вызвавший обработчик
Ответить с цитированием
  #4  
Старый 05.08.2008, 11:16
ART ART вне форума
Продвинутый
 
Регистрация: 13.02.2006
Адрес: Магнитогорск
Сообщения: 669
Репутация: 14745
По умолчанию

Кидай на форму 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  
Старый 05.08.2008, 11:17
PashaXP PashaXP вне форума
Новичок
 
Регистрация: 05.02.2008
Сообщения: 81
Репутация: 15
По умолчанию

Если тебе нужно производить эти действия именно в МЕНЮ, то принцип тот же -
Код:
procedure TForm1.N11Click(Sender: TObject);
begin
 Edit1.Text:=IntToStr(StrToInt(Edit1.Text)+1);
end;
Ответить с цитированием
  #6  
Старый 05.08.2008, 11:20
bananan bananan вне форума
Прохожий
 
Регистрация: 05.08.2008
Сообщения: 24
Репутация: 10
По умолчанию

Цитата:
Сообщение от PashaXP
Кидаешь на форму 15-ть кнопок и к примеру 1- TEdit.
Затем кликаешь, поочередно, два раза в кнопку и видишь на экране -
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
 //Здесь пишешь код, например
 Edit1.Text:=IntToStr(StrToInt(Edit1.Text)+1);
end;
предварительно в инспекторе обьектов компонента Edit1 в свойстве Text сотри Edit1и поставь ноль, либо програмно присвой Edit1.Text:=0;

и так далее обрабатывай щелчек каждой кнопки...

Павел, Вы слегка не так меня поняли. Я хочу "красиво" это сделать. А не писать 15 обработчиков для каждой кнопки.
Ответить с цитированием
  #7  
Старый 05.08.2008, 11:21
PashaXP PashaXP вне форума
Новичок
 
Регистрация: 05.02.2008
Сообщения: 81
Репутация: 15
По умолчанию

Тогда, сори....
Ответить с цитированием
  #8  
Старый 05.08.2008, 11:30
bananan bananan вне форума
Прохожий
 
Регистрация: 05.08.2008
Сообщения: 24
Репутация: 10
По умолчанию

Цитата:
Сообщение от ART
Кидай на форму 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.

Спасибо. Примерно понятно. Но примерно. Дело в том что, "инкремент" - это я для примера просто написал. А не знаешь, как примерно реализовать следущее:
чтобы при нажатии определенного пункта меню ( от 1 до 15) создавался файл с названием пункта меню. Функции создания файла я знаю - можно заменить на //создание файла.
Ответить с цитированием
  #9  
Старый 05.08.2008, 11:41
xchrom xchrom вне форума
Начинающий
 
Регистрация: 08.04.2008
Сообщения: 177
Репутация: 15
По умолчанию

Код:
procedure TForm1.ItemClick(Sender: TObject);
begin
  AssignFile(f,'D:\'+(Sender as TMenuItem).Caption+'.test');
  Rewrite(f);
  Write(...);
  CloseFile(...)
end;
Admin: Пользуемся тегами, иначе санкции!

тут фишка в том что Sender это просто указатель на объект, но если его привести явно к типу, то становяться доступны его методы и свойства...

Последний раз редактировалось Admin, 05.08.2008 в 11:43.
Ответить с цитированием
  #10  
Старый 05.08.2008, 11:47
bananan bananan вне форума
Прохожий
 
Регистрация: 05.08.2008
Сообщения: 24
Репутация: 10
По умолчанию

Спасибо всем )
разобрался. все работает. Можно закрывать
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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