Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.07.22;
Скачать: CL | DM;

Вниз

Меню, созданное динамически   Найти похожие ветки 

 
Doctor Deejay ©   (2002-07-02 21:54) [0]

В своей проге я динамически создаю попап меню. Затем обрабатываю нажатие по пунктам
вот так:

....
MenuItem.onClick:=ModeItemClick;
....
procedure TMainForm.ModeItemClick(Sender: TObject);
begin
//////////
end;


Как мне узнать после нажатия на пункт меню какой именно был нажат, его порядковый номер и название.
Все они создаются в цикле и им можно присвоить названия.

Как же к ним обратиться? И как обработь нажатие каждого?


 
LLL   (2002-07-02 22:23) [1]

Ну можно было разные методы назначать.
А так есть Tag
и понеслость
with Sender as TMenuItem
case Tag of
... и т. д.


 
Kuljok ©   (2002-07-03 00:49) [2]

Или юзать те-же названия

if (Sender as TComponent).Name = "Item1" then .......


 
Doctor Deejay ©   (2002-07-03 00:59) [3]

А если я не знаю сколько будет пунктов и не знаю их названий. Вернее сделано все так, что они меняются в зависимости от конфигурации компа?


 
T'Mon ©   (2002-07-03 03:37) [4]

Я бы завел класс или запись с описанием элемента меню. При создании этого элемента делал новый экземпляр описания и указатель на него пихал в Tag элемента меню.


 
Doctor Deejay ©   (2002-07-03 10:03) [5]

Мне кроме номера пункта нужно регистрировать номер подпункта, поэтому одного поля ТАГ не хватает. Нужен еще один!
Как завести запись?


 
Alx2 ©   (2002-07-03 10:22) [6]

Можно использовать снова 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;


 
Alx2 ©   (2002-07-03 10:24) [7]

Ой, сорри!
Очепятался. Переписываю:

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:25) [8]

Еще и это перепишу:
:)
Можно использовать снова tag. Например, старшие два байта - номер пункта, младшие - подпункта.
Номер пункта читаем так: tag shr 16
Номер подпункта читаем так: tag and $FFFF
Номер пункта присваиваем так: tag := (Value shl 16) OR (tag and $FFFF)
Номер подпункта присваиваем так: tag := (tag and $FFFF 0000) or Value


 
Skier ©   (2002-07-03 11:58) [9]

>Doctor Deejay
Для дин. создания меню очень удобно испол-ть NewItem


 
Proton ©   (2002-07-09 19:06) [10]

C:\Soft\borland\Delphi5\Help\Examples\Menu
C:\Soft\borland\Delphi5\Help\Examples\Menu2



Страницы: 1 вся ветка

Текущий архив: 2002.07.22;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.012 c
1-70762
Doctor Deejay
2002-07-02 21:54
2002.07.22
Меню, созданное динамически


3-70583
Muhin-av
2002-06-28 12:09
2002.07.22
Помогите разобраться с суммированием по столбцу


1-70705
lak_b
2002-07-11 12:45
2002.07.22
ТэСпидБатон


1-70819
Дундук
2002-07-09 07:42
2002.07.22
Работа с датой


14-70880
shodan
2002-06-24 23:01
2002.07.22
Компоненты