Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

MainMenu???!


EAccessViolation ©   (2003-05-24 13:31:00) 

Переписываю приложение с возможностью динамического дополнения(не создания, а дополнения) меню (например, вышел новый релиз программы и необходимо добавить новые возможности, функции без изменения самой программы). Так вот как я могу отследить уникальность элемента меню, если мне недоступно имя TMenuItem (для VCL)? Определение по идентификатору как это сделано сейчас не годится, т.к. они жестко заданы! Можно конечно, определится "руками" по Handle(или Caption), а если подменю очень много - какя же будет задержка. Как решить задачу при такой постановке?!
Есть предложение к Владимиру Кладову - сделать доступным имя элемента меню, а также сделать возможность перекрытия метода, отвечающего событию OnMenu.Может кто-то знает решение этой проблемы при текущей конфигурации KOL&MCK v1.73


Gandalf   (2003-06-02 11:15:00) [1]


> 2 Gandalf
> Дим, надо это FAQ добавить.


Учту, вот только поправлюсь.

ЗЫ: Оффтопик видел, в себя приду вырежу, сайт обновлю...


Кладов   (2003-05-29 19:25:00) [2]

добавлю, больше не правьте :)


mdw   (2003-05-29 17:14:00) [3]

2Kladov
Может быть добавите в метод TMenu.Insert строчку
Result.FIsSeparator:= moSeparator in Options;?
А то приходится самому в каждой новой версии править.


EAccessViolation   (2003-05-29 16:06:00) [4]

Да, это действительно так, как ни парадоксально!


mdw   (2003-05-29 15:11:00) [5]

Возможно причина в том, что меню ты создаешь динамически, исползуя AddItem, InsertItem и т.д. Все они используют метод Insert, а в нем свойство IsSeparator не выставляется (почему-то???). Вобще IsSeparator устанавливается только при создании меню (NewMenu).
Поэтому условие
if ParentWindowMenu.Items[iChildWindowMenu-1].IsSeparator then
...
не выполняется, и сответственно не удаляется элемент меню отвечающий разделителю (IsSeparator).


EAccessViolation   (2003-05-29 13:55:00) [6]

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;


Кладов   (2003-05-24 16:57:00) [7]

зачем имя, если есть указатель? имя можно повторить, указатель на объект уникален по определению.


EAccessViolation   (2003-05-24 15:39:00) [8]

И в архивах тоже ничего нет... Будем ждать в FAQе :))


EAccessViolation   (2003-05-24 15:37:00) [9]

И все таки не нашел об этом ничего на сайте, есть правда удаленные сообщения, но...


BaRToV   (2003-05-24 14:26:00) [10]

> Так вот как я могу отследить уникальность элемента меню, если мне недоступно имя TMenuItem (для VCL)?
Можно!!! В КОЛ это есть просто как и многое другое не документированно, поищи в форуме (Кладов писал как делать, заодно кинь линк здесь, где это в форуме лежит)и в kol.pas.

2 Gandalf
Дим, надо это FAQ добавить.


Наверх

Титульная страница Поиск, карта сайта Написать письмо