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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.07.2015, 10:08   #1
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию Элементы PopupMenu - автоматическое добавление

Как добавить элементы в PopupMenu, чтобы их названия можно было загружать из списка ListBox?
Dux вне форума Ответить с цитированием
Старый 24.07.2015, 11:02   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Например так:
Код:
var i:integer; mi:TMenuItem;
begin
 with ListBox1.Items do
  for i:=0 to Count-1 do begin
    mi:=TMenuItem.Create(PopupMenu1);
    mi.Caption:=Strings[i];
    mi.OnClick:=OnClickMe;
    PopupMenu1.Items.Add(mi);
  end;
end;
OnClickMe - обработчик клика, заранее определенный.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.07.2015, 11:21   #3
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

Вот спасибо, Stilet!

Еще маленькое уточнение, как в OnClickMe прописать следующий код?

Код:
 ADOQuery1.FieldByName('Done').AsString:=mi.Caption;
Dux вне форума Ответить с цитированием
Старый 24.07.2015, 11:27   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
ADOQuery1.FieldByName('Done').AsString:=TMenuItem(Sender).Caption;
если не ошибаюсь.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.07.2015, 11:30   #5
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

Я имею ввиду - что такое OnClickMe -это должна быть отдельная процедура? Как в нее поместить код выполнения?

и код выдает ошибку в этой строчке:

Код:
mi:=TMenuItem.Create(PopupMenu1);
говорит:
[DCC Error] Unit23.pas(1110): E2003 Undeclared identifier: 'PopupMenu1'

Последний раз редактировалось Stilet; 24.07.2015 в 12:07.
Dux вне форума Ответить с цитированием
Старый 24.07.2015, 11:37   #6
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 514
По умолчанию

Цитата:
Сообщение от Dux Посмотреть сообщение
и код выдает ошибку в этой строчке:

Код:
mi:=TMenuItem.Create(PopupMenu1);
говорит:
[DCC Error] Unit23.pas(1110): E2003 Undeclared identifier: 'PopupMenu1'
какой то бездумный копипаст
замени PopupMenu1 на компонент в котором создаются элементы
Пишу на Delphi за еду
Toxa вне форума Ответить с цитированием
Старый 24.07.2015, 11:39   #7
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

Спасибо, с этим разобрался.

Вопрос открытый куда прописать строчку, чтобы она выполнялась при клике по меню:

Код:
ADOQuery1.FieldByName('Done').AsString:=TMenuItem(Sender).Caption;
Подскажите пожалуйста.

Последний раз редактировалось Dux; 24.07.2015 в 11:45.
Dux вне форума Ответить с цитированием
Старый 24.07.2015, 11:52   #8
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

у тебя есть форма на которой есть PopUpMenu (та в которую добавляли строки).
в НЕЕ дописываем объявление метода OnClickMi
Код:
type 
  TFormX =class(TForm)
...
  private
    procedure OnClickMi(sender: TObject);
  end;
и потом делаем ее реализацию!!!
Код:
procedure TFormX.OnclickMi(sender: TObject);
begin
  ADOQuery1...:=TMenuItem(sender).....
end;
P.S. "визуальный метод" создания метода
1) открываем форму в редакторе
2) находим PopUpMenu
3) ДОБАВЛЯЕМ туда ОДИН пункт
4) в InspectorObject.Events ЗАДАЕМ ЕМУ OnClick и называем его OnClickMi
5) пишем код(!) этого метода (OnClickMi)
Код:
ADOQuery....
6) УДАЛЯЕМ добавленный пункт из меню(!)
код при этом останется и мы cможем его потом использовать при наших созданиях меню.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 24.07.2015 в 12:01.
evg_m вне форума Ответить с цитированием
Старый 24.07.2015, 11:59   #9
Dux
Delphi Master
Форумчанин Подтвердите свой е-майл
 
Аватар для Dux
 
Регистрация: 31.03.2008
Сообщений: 803
По умолчанию

Всем огромнейшее спасибо! Разобрался!!!

И еще коротенький вопросик, почему при выполнении этой строчки:

Код:
ADOQuery1.FieldByName('Done').AsString:=TMenuItem(Sender).Caption;
в соответствующем столбце 'Done' в ячейке к названию пункта добавляется символ "&"?

Т.е. если пункт называется 'Checked', то в базу он записывается как '&Checked'

Последний раз редактировалось Stilet; 24.07.2015 в 12:12.
Dux вне форума Ответить с цитированием
Старый 24.07.2015, 12:13   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Используй StringReplace для вырезания символа &.
Он говорит о горячей клавише в меню. Или в свойствах меню отключи продуцирование горячей клавиши.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автоматическое добавление запятой Nando Microsoft Office Excel 7 07.04.2014 14:38
Автоматическое добавление значений Adidas7 Microsoft Office Access 1 12.04.2013 23:17
Автоматическое добавление строк Kazzzus Microsoft Office Excel 9 05.06.2012 07:51
Автоматическое добавление подписки Хохол О форуме и сайтах клуба 0 14.03.2011 17:42
Динамическое добавление в PopupMenu k1r1ch Общие вопросы Delphi 1 02.10.2009 10:29