![]() |
|
|
![]()
|
|
| Usper |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 13.4.2007 Репутация: 15 Всего: 15 |
Копирование содержимого выделенных ячеек в StringGrid реализовать довольно просто, но у меня в приложении используються разные компоненты и хотелось бы, чтобы через главное меню приложения можно было бы производить схожие действия для разных компонентов, даже если эти действия для некоторых компонентов не предусмотрены. Вероятно нужно использовать компонент ActionList, но как связать разные действия в одном пункте меню, чтобы они корректно работали?
Поясню на примере. Допустим на форме есть StringGrid и Memo. Хочу сделать операцию копирования, при этом чтобы она работала в зависимости от того, где сейчас находиться фокус ввода. Если фокус ввода в Memo, то событие стандартное, если фокус ввода в StringGrid, то вызывается моя функция, которая заносит в буфер обмена содержимое выделенных ячеек. При этом пункт меню "копировать" должен корректно отображать возможность копирования в данный момент, то есть если фокус ввода на какой-нибудь кнопке, например, то операция недоступна. -------------------- На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник. |
|||
|
||||
| nick42 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 18.5.2010 Репутация: нет Всего: нет |
Если я правильно Вас понял, то следующий пример может помочь разобраться...
Присоединённый файл ( Кол-во скачиваний: 6 )
pack.zip 10,08 Kb |
|||
|
||||
| Usper |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 13.4.2007 Репутация: 15 Всего: 15 |
Спасибо за подсказку, но я не зря упомянул ActionList. Если в проекте большое количество компонентов, то функций обработчиков тоже нужно писать много, нужно отслеживать каждый компонент, а это не очень хорошо. ActionList позволяет автоматизировать эту ситуацию. И, к тому же, Ваш проект не совсем правильно работает, пункт "копировать" становится активным если Memo1 находиться в фокусе. Но пункт должен становиться активным когда Memo1 находиться не просто в фокусе, а когда есть выделение текста, то есть есть что копировать.
У меня проблема заключается в том, что когда я пишу своё действие (копировать выделенные ячейки из таблицы), программа не видит доступно ли действие в данный момент или нет. В справке пишут, что когда программа находиться в состоянии "idle" (то есть бездействует) постоянно наступает событие OnUpdate, в котором собственно можно проверить находиться в фокусе таблица или нет и этим гарантируется правильное определение доступности действия. Но фактически событие OnUpdate у моего действия никогда не наступает. То есть на самом деле это событие у действий наступает только по мере необходимости (например событие связано с пунктом меню, и соответственно перед отображением этого меню на экран происходит событие OnUpdate). А так как я пишу собственное действие, и оно не связано с меню, то это действие никогда и не срабатывает. -------------------- На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник. |
|||
|
||||
| Usper |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 325 Регистрация: 13.4.2007 Репутация: 15 Всего: 15 |
Мне внеазпно пришло в голову, что я и сам могу вызывать когда надо событие OnUpdate
Тогда всё становиться проще:
Но вот само событие копирования ячеек в буфер обмена мне не очень нравиться. Как бы его сделать поуниверсальнее, чтобы работало не с конкретным StringGrid`ом а со всеми StringGrid`ами проекта... Присоединённый файл ( Кол-во скачиваний: 12 )
UCopy.zip 4,41 Kb-------------------- На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник. |
|||
|
||||
| nick42 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 18.5.2010 Репутация: нет Всего: нет |
.. я бы сделал это так: for (int i=0;i<Form1->ControlCount;i++) if (String(Form1->Controls[i]->ClassName())=="TStringGrid") if (((TStringGrid *)Form1->Controls[i])->Focused()) { здесь код ... } |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |