Форум: "KOL";
Текущий архив: 2004.02.17;
Скачать: [xml.tar.bz2];
ВнизMainMenu???! Найти похожие ветки
← →
EAccessViolation (2003-05-24 13:31) [0]Переписываю приложение с возможностью динамического дополнения (не создания, а дополнения) меню (например, вышел новый релиз программы и необходимо добавить новые возможности, функции без изменения самой программы). Так вот как я могу отследить уникальность элемента меню, если мне недоступно имя TMenuItem (для VCL)? Определение по идентификатору как это сделано сейчас не годится, т.к. они жестко заданы! Можно конечно, определится "руками" по Handle(или Caption), а если подменю очень много - какя же будет задержка. Как решить задачу при такой постановке?!
Есть предложение к Владимиру Кладову - сделать доступным имя элемента меню, а также сделать возможность перекрытия метода, отвечающего событию OnMenu. Может кто-то знает решение этой проблемы при текущей конфигурации KOL&MCK v1.73
← →
BaRToV (2003-05-24 14:26) [1]> Так вот как я могу отследить уникальность элемента меню, если мне недоступно имя TMenuItem (для VCL)?
Можно!!! В КОЛ это есть просто как и многое другое не документированно, поищи в форуме (Кладов писал как делать, заодно кинь линк здесь, где это в форуме лежит)и в kol.pas.
2 Gandalf
Дим, надо это FAQ добавить.
← →
EAccessViolation (2003-05-24 15:37) [2]И все таки не нашел об этом ничего на сайте, есть правда удаленные сообщения, но...
← →
EAccessViolation (2003-05-24 15:39) [3]И в архивах тоже ничего нет... Будем ждать в FAQе :))
← →
Кладов (2003-05-24 16:57) [4]зачем имя, если есть указатель? имя можно повторить, указатель на объект уникален по определению.
← →
EAccessViolation (2003-05-29 13:55) [5]2Kladov
Да это, действительно так, как я не догадался :). Все это работает, за исключением того, что динамически не удаляется элемент меню отвечающий разделителю (IsSeparator). Как быть? Вот кусок кода (причем другие элементы меню удалаются нормально):
ParentWindowMenu.Items[iChildWindowMenu].Free;
// ParentWindowMenu.Items[iChildWindowMenu]:= Nil;
//невозможно - ReadOnly
if MDIClient1.ChildCount > 1 then
begin
ParentWindowMenu.Items[iChildWindowMenu-1].Checked:= True;
end else
begin
if ParentWindowMenu.Items[iChildWindowMenu-1].IsSeparator then
begin
ParentWindowMenu.Items[iChildWindowMenu-1].Free;
// ParentWindowMenu.Items[iChildWindowMenu-1]:= Nil;
//невозможно - ReadOnly
end;
end;
ParentWindowMenu.RedrawFormMenuBar;
end;
← →
mdw (2003-05-29 15:11) [6]Возможно причина в том, что меню ты создаешь динамически, исползуя AddItem, InsertItem и т.д. Все они используют метод Insert, а в нем свойство IsSeparator не выставляется (почему-то???). Вобще IsSeparator устанавливается только при создании меню (NewMenu).
Поэтому условие
if ParentWindowMenu.Items[iChildWindowMenu-1].IsSeparator then
...
не выполняется, и сответственно не удаляется элемент меню отвечающий разделителю (IsSeparator).
← →
EAccessViolation (2003-05-29 16:06) [7]Да, это действительно так, как ни парадоксально!
← →
mdw (2003-05-29 17:14) [8]2Kladov
Может быть добавите в метод TMenu.Insert строчку
Result.FIsSeparator:= moSeparator in Options;?
А то приходится самому в каждой новой версии править.
← →
Кладов (2003-05-29 19:25) [9]добавлю, больше не правьте :)
← →
Gandalf (2003-06-02 11:15) [10]
> 2 Gandalf
> Дим, надо это FAQ добавить.
Учту, вот только поправлюсь.
ЗЫ: Оффтопик видел, в себя приду вырежу, сайт обновлю...
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2004.02.17;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c