Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.07.2008, 18:57   #1
Denager
Москоу
Форумчанин
 
Регистрация: 29.01.2008
Сообщений: 138
По умолчанию TPopMenu, TMenuItem и процедура обработки нажатия

Сабж
Имеется массив TPopUpMenu (Для каждого объекта, все однотипны) и добавляю пункты для него:

Код:
PopUpItem:=TMenuItem.Create(Popup[i]);
PopUpItem.Caption:='Заголовок1';
PopUpItem.OnClick:=Form2.CliCkItem;
PopUp[i].Items.Add(PopUpItem);

PopUpItem:=TMenuItem.Create(Popup[i]);
PopUpItem.Caption:='Заголовок2;
PopUpItem.OnClick:=Form2.CliCkItem;
PopUp[i].Items.Add(PopUpItem)

PopUpItem:=TMenuItem.Create(Popup[i]);
PopUpItem.Caption:='Заголовок3';
PopUpItem.OnClick:=Form2.CliCkItem;
PopUp[i].Items.Add(PopUpItem)
Есть процедура обработки OnClick

Код:
Procedure TForm2.CliCkItem(Sender: TObject);
begin
//??
end;
Вопрос заключается в следующем:
Каким образом сделать так, чтобы при уже сформированных пунктах PopUpMenu, при их выборе в буфер копировалась ссылка именного того i-ого PopUpMenu, которое было вызывано
Denager вне форума Ответить с цитированием
Старый 04.07.2008, 19:14   #2
AXS
Программер
Пользователь Подтвердите свой е-майл
 
Аватар для AXS
 
Регистрация: 03.07.2008
Сообщений: 36
По умолчанию

Ну во первых добавлять пункты меню можно проще:
Код:
with PopUpMenu1.Items do
begin
  Add(NewItem('First Menu', 0, False, True, MenuItem0Click, 0, 'MenuItem1'));
  Add(NewItem('Second Menu', 0, False, True, MenuItem0Click, 0, 'MenuItem2'));
  Add(NewItem('Third Menu', 0, False, True, MenuItem0Click, 0, 'MenuItem3'));
  Add(NewLine); // Добавляем разделитель
  Add(NewItem('Fourth Menu', 0, False, True, MenuItem0Click, 0, 'MenuItem4'));
end;
А во-вторых есть такой способ:

Код:
Procedure TForm2.CliCkItem(Sender: TObject);   
begin  
  ShowMessage('Кликнули по '+(Sender as TMenuItem).Caption);   
end;
А вообще можешь каждому пункту присвоить своё значение Tag и писать
Код:
case (Sender as TMenuItem).Tag of
    1: begin

        end;
    2:  //и т д
<AXS> Если один из двух выходов - ловушка, надо найти третий... </AXS>
<AXS> "Живой" - явление временное... </AXS>

<><><> www.mak-ms.com <><><>
AXS вне форума Ответить с цитированием
Старый 04.07.2008, 19:18   #3
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

Sender - это и есть тот TPopupMenu
_Engine_ вне форума Ответить с цитированием
Старый 04.07.2008, 19:28   #4
AXS
Программер
Пользователь Подтвердите свой е-майл
 
Аватар для AXS
 
Регистрация: 03.07.2008
Сообщений: 36
По умолчанию

Совершенно верно. Только не TPopupMenu, а TMenuItem. Sender - это объект вызвавший событие (в нашем случае ClickItem помойму) просто Объект понятие растяжимое поетому пишем (Sender as TMenuItem)
<AXS> Если один из двух выходов - ловушка, надо найти третий... </AXS>
<AXS> "Живой" - явление временное... </AXS>

<><><> www.mak-ms.com <><><>

Последний раз редактировалось AXS; 04.07.2008 в 19:30.
AXS вне форума Ответить с цитированием
Старый 04.07.2008, 19:29   #5
Denager
Москоу
Форумчанин
 
Регистрация: 29.01.2008
Сообщений: 138
По умолчанию

AXS, спасибо, как раз, то что нужно.
тогда еще вопрос, когда делаю вот так

Код:
Procedure TForm2.ClickIt(Sender: TObject);
begin
ClipBoard.Clear;
ClipBoard.AsText:=(Sender as TMenuItem).Caption;
end;
В строке появляется аперсант (&), эт чо и как от него избавится кроме того как искать его в строке и удалять
Denager вне форума Ответить с цитированием
Старый 04.07.2008, 19:38   #6
AXS
Программер
Пользователь Подтвердите свой е-майл
 
Аватар для AXS
 
Регистрация: 03.07.2008
Сообщений: 36
По умолчанию

Цитата:
Сообщение от Denager Посмотреть сообщение
AXS, спасибо, как раз, то что нужно.
тогда еще вопрос, когда делаю вот так

Код:
Procedure TForm2.ClickIt(Sender: TObject);
begin
ClipBoard.Clear;
ClipBoard.AsText:=(Sender as TMenuItem).Caption;
end;
В строке появляется аперсант (&), эт чо и как от него избавится кроме того как искать его в строке и удалять
Этим знаком обозначают букву которая будет подчёркиваться в названии пункта меню
Например:
Файл
Открыть
...

Нажимаешь Alt+ф и активируется пункт "Файл"

AutoHotKeys выставь в maManual
<AXS> Если один из двух выходов - ловушка, надо найти третий... </AXS>
<AXS> "Живой" - явление временное... </AXS>

<><><> www.mak-ms.com <><><>

Последний раз редактировалось AXS; 04.07.2008 в 19:41.
AXS вне форума Ответить с цитированием
Старый 04.07.2008, 19:41   #7
Denager
Москоу
Форумчанин
 
Регистрация: 29.01.2008
Сообщений: 138
По умолчанию

Мммм..Спасибо за раъяснение, значит выдирать ее только через delete();?
Denager вне форума Ответить с цитированием
Старый 04.07.2008, 19:47   #8
AXS
Программер
Пользователь Подтвердите свой е-майл
 
Аватар для AXS
 
Регистрация: 03.07.2008
Сообщений: 36
По умолчанию

Цитата:
Сообщение от Denager Посмотреть сообщение
Мммм..Спасибо за раъяснение, значит выдирать ее только через delete();?
Я ж говорю AutoHotKeys выставь в maManual
<AXS> Если один из двух выходов - ловушка, надо найти третий... </AXS>
<AXS> "Живой" - явление временное... </AXS>

<><><> www.mak-ms.com <><><>
AXS вне форума Ответить с цитированием
Старый 04.07.2008, 21:32   #9
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Все несколько проще
Код:
with Sender as TMenuItem do
  ShowMessage(IntToStr(MenuIndex));
Если нужны строки, создайте TStringList и храните в нем, тогда пункт в меню может называться как-то сокращенно, а в списке будет полная строка.
Тогда будет так:
Код:
with Sender as TMenuItem do
  begin
    ClipBoard.Clear;
    ClipBoard.AsText:=MyStringList[MenuIndex];
  end;
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 04.07.2008 в 21:37.
mutabor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программирование операций обработки файлов Дима82 Фриланс 1 19.05.2008 13:57
Команды обработки строк! Proskurin Помощь студентам 11 06.05.2008 16:11
динамическое содзание компонентов и процедур обработки Prisian Компоненты Delphi 5 11.12.2007 21:17