Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.188 c
8-53647
Coder1: TCoder;
2003-10-16 23:10
2004.02.17
Рисование без канвы


1-53633
Мыш
2004-02-06 07:13
2004.02.17
перехват вызовов процедур


11-53441
Mikel
2003-06-03 12:38
2004.02.17
TreeView


1-53546
zamkom
2004-02-09 11:16
2004.02.17
MessageDlg


14-53711
Jony
2004-01-28 14:03
2004.02.17
Как добраться до зараженного файла?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский