Форум: "Основная";
Текущий архив: 2002.07.22;
Скачать: [xml.tar.bz2];
ВнизМеню, созданное динамически Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c