| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Ошибка понятная, но как исправить? |
| Автор: Nic442 30.4.2006, 00:19 | ||
Вопрос довольно легкий, но я чего-то не досоображаю.
Этот код висит у меня на одной из кнопок mainmenu. Повесил его на Toolbar на одну из Toolbutton в свойство MenuItem. Так при щелчке на этом button и выборе пункта меню он выдаёт ошибку. (Хотя из mainmenu нормально работает). Я проверил Reopen1.IndexOf(Sender as TMenuItem)=-1 при вызове через Toolbar. Но весь прикол в том что если я добавляю MessageDlg('1',mtWarning,[mbOk],0); то все работает. Подскажите, пожалуйста, как исправить ошибку. |
| Автор: seer 30.4.2006, 00:37 |
| первое, что напрашивается.. это поставить задержку.. но это непонашенски.. Давай кидай более полную картину. А вообще у меня было нечто такое... в программе память зас%%л и проги выделывали странные штуки. Маловероятно, но бытьтакое может. |
| Автор: Nic442 30.4.2006, 00:44 | ||
| Я то кину. Но ошибка то точно в том коде который я написал сверху. Я даже знаю почему, но как исправить??? Ведь Reopen1.IndexOf(Sender as TMenuItem)=-1 А он не может удалить несуществующий пункт меню (Reopen1.Delete[-1]) Но как только я ставлю сообщение, то даже пр -1 всё делает правильно.
|
| Автор: Nic442 30.4.2006, 00:52 |
| Sunvas, В коде на самом верху закоментарено куда,,, Ошибка не исправилась :-( |
| Автор: Sunvas 30.4.2006, 00:59 |
Да. Не увидел.. Ну а с моим кодом-то работает? |
| Автор: Nic442 30.4.2006, 01:02 |
| Не, тоже самое. Вообще непонятно. Ошибка не исправилась :-( |
| Автор: Sunvas 30.4.2006, 01:14 | ||||
Ну так проверяй - если не равен -1 то удаляй.
Видать глюк какой-то.. |
| Автор: Nic442 30.4.2006, 01:19 | ||
Не могу, иначе кнопка в баре будет не нужна. Так дело в том что -1 идёт от ToolButton при нажатии на Toolbutton на любом пункте выдвигающегося меню. |
| Автор: Демо 30.4.2006, 01:28 |
| Что такое Reopen1? |
| Автор: Nic442 30.4.2006, 01:33 |
| Файл-->Reopen1-->NewItem Reopen1 находится в меню, и включает в себя Items |
| Автор: Демо 30.4.2006, 01:47 | ||
Выполни вот это и исходи из того, что Sendere у тебя не TMenuItem:
|
| Автор: Sunvas 30.4.2006, 01:52 | ||
| Знаешь Nic442, я думаю это 1 из реальных глюков Борланда.. Попробуй другие компоненты поиспользовать или пойти другим путем.. ЗЫ. У меня даже банальный текст
на тулбаттоне показывает -1. Добавлено @ 01:56 Да нет! Именно Tmenuitem! Зачем это |
| Автор: Nic442 30.4.2006, 02:00 |
| ShowMessage(Sender.ClassName); Имя класса я тоже решил поглядеть. При нажатии на ToolButton и выборе у него пункта меню выдаёт TMenuItem Добавлено @ 02:07 Я думаю такая фигня происходит. При нажатии на ToolButton и выборе у него пункта меню. Он посылает какое-то сообщение в меню. Но индекс остаётся -1 |
| Автор: Sunvas 30.4.2006, 02:13 | ||
Токо меню ведь одно и тоже самое! Я проверял. |
| Автор: Демо 30.4.2006, 02:13 |
| Nic442, Ничего не понятно - как у тебя организовано. понял, чего ты навесил... |
| Автор: Nic442 30.4.2006, 02:21 | ||
Объясняю: При открытии файла в Reopen1 добавляется путь к нему. При открытии его через Reopen1 этот пункт становится на первое место(удаляется со своего места и становится в на первое).
|
| Автор: Демо 30.4.2006, 02:22 | ||
Вот такой код у меня возвращает не -1:
Похоже, что без конкретных данных не разобрать, что происходит... |
| Автор: Sunvas 30.4.2006, 02:24 | ||
| Демо, вот смотри: 1. Бросаешь на форму tmainmenu и ttoolbar 2. В tmainmenu создаешь 2 tmenuitem (воторое - субменю первого) - n1 и n2, а на toolbar-e создаешь кнопочку. 3. В свойсте кнопки tmenuitem ставишь n1 4. В онклике n2 пишешь
Теперь парадокс - если мы кликаем по n2 с меню то получаем сообщение 0, а если с кнопки, то сообщение -1.. |
| Автор: Nic442 30.4.2006, 02:26 |
| N21 Включает в себя подпункты?? Теперь совсем непонятно становится.... |
| Автор: Sunvas 30.4.2006, 02:28 |
а нужно Reopen1Click или, как у меня n2click |
| Автор: Nic442 30.4.2006, 02:32 | ||
Еще раз как у меня
|
| Автор: Демо 30.4.2006, 02:33 |
| Вот проект, который именно так себя и ведет, как я написал: |
| Автор: Sunvas 30.4.2006, 02:34 | ||
Вот проект для понятливости: |
| Автор: Демо 30.4.2006, 02:34 |
Это только название осталось такое. |
| Автор: Sunvas 30.4.2006, 02:42 |
| Демо, посмотри, чего мой реализ не работает |
| Автор: Демо 30.4.2006, 02:43 |
| Вопрос дополнительно: На ToolButton навешено меню с подменю, или же только один пункт меню? |
| Автор: Nic442 30.4.2006, 02:44 |
| Чего-то не кочаются примеры... |
| Автор: Демо 30.4.2006, 02:45 |
По разному навешены пункты меню, и связка не та, что нужно. По поводу уточнения вот автор скажет - посмотрим... |
| Автор: Sunvas 30.4.2006, 02:45 | ||
|
| Автор: Nic442 30.4.2006, 02:47 |
| РИСУЮ ФАЙЛ--> REOPEN1--> ЕГО ПОДМЕНЮ | TOLLBUTTON--------->Показывается подменю |
| Автор: Демо 30.4.2006, 02:47 |
Тогда понятно. Вот возьми обратно исправленный проект: Добавлено @ 02:48 Ясно, у тебя другая ситуация. Минут через 5 попробую решить такую же задачку. |
| Автор: Sunvas 30.4.2006, 02:49 |
Ясно, ясно! У меня просто и ща мозги кипят от чего же так.. Добавлено @ 02:50 а ты правой кнопкой мыши и "сохранить объект как.." Сможешь исправить? Добавлено @ 02:53 Демо, в моем коде добавить onclick это немного не то... |
| Автор: Nic442 30.4.2006, 03:02 |
| Да вот Да это я файл хотел прикрепить. Чего-то не прикрепился. Но в общем так как у тебя только при нажатии на toolbutton показывается submenu1 и submenu2 |
| Автор: Sunvas 30.4.2006, 03:04 |
Это к чему? |
| Автор: Демо 30.4.2006, 03:08 |
| Nic442, У тебя OnClick на подпункты меню навешен? Добавлено @ 03:10 Уже понял.. |
| Автор: Nic442 30.4.2006, 03:10 |
| Конечно, ведь они через меню работают. Reopen1.Items[c].OnClick:=Reopen1_files; |
| Автор: Sunvas 30.4.2006, 03:14 | ||
Но мой глюк так и остался глюком.. |
| Автор: Nic442 30.4.2006, 03:17 |
| Да и глюк такой же. Я ещё пробовал через Toolbutton.MenuItem.IndexOf..... Но так тоже не катит Добавлено @ 03:23 Демо Так попробовал или как?? Какие результаты? |
| Автор: Демо 30.4.2006, 03:23 | ||
| Вот работающий вариант на OnClick: Неохота разбираться, глюк это Delphi или так и должно работать...
|
| Автор: Nic442 30.4.2006, 03:34 |
| Можешь написать работающий вариант, чтобы он удалял пункт и всталял в начало без message |
| Автор: Демо 30.4.2006, 03:37 | ||||
Так сейчас IndexOf не -1 возвращает... Добавлено @ 03:39
|
| Автор: Nic442 30.4.2006, 03:44 |
| ВООООООООООООООООООООООООООООООООо !!!!!!!!!!!!!!!! ЗАРАБОТАЛО КАЖИСЬ... СПАСИБО ВАМ ОБОИМ. Я уже хотел сдаваться и спать.... Добавлено @ 03:49 ТЕМУ ПОМЕЧАЮ :-) |