![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Меню, созданное динамически [D5, Win95/98]
Doctor Deejay © (2002-07-02 21:54:00)В своей проге я динамически создаю попап меню. Затем обрабатываю нажатие по пунктам
вот так:
....
MenuItem.onClick:=ModeItemClick;
....
procedure TMainForm.ModeItemClick(Sender: TObject);
begin
//////////
end;
Как мне узнать после нажатия на пункт меню какой именно был нажат, его порядковый номер и название.
Все они создаются в цикле и им можно присвоить названия.
Как же к ним обратиться? И как обработь нажатие каждого?
Proton (2002-07-09 19:06:00) [1]C:\Soft\borland\Delphi5\Help\Examples\Menu
C:\Soft\borland\Delphi5\Help\Examples\Menu2
Skier (2002-07-03 11:58:00) [2]>Doctor Deejay
Для дин. создания меню очень удобно испол-ть NewItem
Alx2 (2002-07-03 10:25:00) [3]Еще и это перепишу:
:)
Можно использовать снова tag. Например, старшие два байта - номер пункта, младшие - подпункта.
Номер пункта читаем так: tag shr 16
Номер подпункта читаем так: tag and $FFFF
Номер пункта присваиваем так: tag := (Value shl 16) OR (tag and $FFFF)
Номер подпункта присваиваем так: tag := (tag and $FFFF 0000) or Value
Alx2 (2002-07-03 10:24:00) [4]Ой, сорри!
Очепятался. Переписываю:
Var
tmpTag : Integer;
ComplexNumber : packed record
SubPunkt, Punkt : Word;
end absolute tmpTag;
begin
// Присваиваем
TmpTag := MenuItem.Tag;
ComplexNumber.Punkt := <...>
ComplexNumber.SubPunkt := <...>
MenuItem.Tag := tmpTag;
// Читаем
TmpTag := MenuItem.Tag;
ComplexNumber.Punkt - номер пункта
ComplexNumber.SubPunkt - номер подпункта
end;
Alx2 (2002-07-03 10:22:00) [5]Можно использовать снова tag. Например, старшие два байта - номер пункта, младшие - подпункта.
Номер пункта читаем так: tag shr 16
Номер подпункта читаем так: tag and $FFFF
Номер пункта присваиваем так: tag := (Value shl 16) OR (tag and $FFFF)
Номер подпункта присваиваем так: tag := (tag and $FFFF) or Value
Value лучше быть типа Word.
Либо вот так:
Var
tmpTag : Integer;
ComplexNumber : packed record
SubPunkt, Punkt : Word;
end absolute tmpTag;
begin
// Присваиваем
TmpTag := MenuItem.Tag;
TmpTag.Punkt := <...>
TmpTag.SubPunkt := <...>
MenuItem.Tag := tmpTag;
// Читаем
TmpTag := MenuItem.Tag;
TmpTag.Punkt - номер пункта
TmpTag.SubPunkt - номер подпункта
end;
Doctor Deejay (2002-07-03 10:03:00) [6]Мне кроме номера пункта нужно регистрировать номер подпункта, поэтому одного поля ТАГ не хватает. Нужен еще один!
Как завести запись?
T'Mon (2002-07-03 03:37:00) [7]Я бы завел класс или запись с описанием элемента меню. При создании этого элемента делал новый экземпляр описания и указатель на него пихал в Tag элемента меню.
Doctor Deejay (2002-07-03 00:59:00) [8]А если я не знаю сколько будет пунктов и не знаю их названий. Вернее сделано все так, что они меняются в зависимости от конфигурации компа?
Kuljok (2002-07-03 00:49:00) [9]Или юзать те-же названия
if (Sender as TComponent).Name = "Item1" then .......
LLL (2002-07-02 22:23:00) [10]Ну можно было разные методы назначать.
А так есть Tag
и понеслость
with Sender as TMenuItem
case Tag of
... и т. д.