Необоснованная ошибка при двойном щелчке по объекту во время разработки в Delphi - PullRequest
0 голосов
/ 09 ноября 2010

Хорошо, вот проблема: недавно я столкнулся с проблемой, что я не смог использовать клавиши ускорения (aka HotKey s) для кнопок внутри GroupBox.Минуту назад я узнал почему, но теперь единственная проблема состоит в том, что эта причина делает меня еще более озадаченной, чем раньше, а именно: такую ​​форму с ускорителем нельзя найти в форме .В результате, когда я дважды щелкаю по затронутым кнопкам двойным щелчком во время разработки, я получаю ошибку «Свойство и метод несовместимы».

MethodName is VKPInputBtnClick, которая фактически объявлена ​​как функция, а некак метод в модуле.

Что меня озадачивает, так это то, что я не назначил OnClick обработчик событий для VKPInputBtn для любого метода вообще!

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

Есть решение?Переустановите IDE?

Любая помощь, высоко ценится ...

Ответы [ 6 ]

4 голосов
/ 09 ноября 2010

Двойной щелчок элемента управления, для которого не установлено свойство события по умолчанию, приводит к тому, что среда IDE назначает это свойство.(Это не просто ярлык для перехода в редактор кода; это F12 .) IDE ищет в исходном коде функцию с нужным именем.Если он не находит его, он создает метод в содержащей его форме и назначает его свойству события компонента.Но если он находит что-то с правильным именем, он пытается присвоить его, не создавая ничего нового.

Проблема, по-видимому, в том, что IDE в вашем случае не находит 't совместим с тем событием, с которым он связан.Вероятно, это ошибка - она ​​не должна выбирать не методы - но редко встречается, учитывая низкую частоту, с которой люди выбирают то же имя для автономных функций, которое IDE выбирает для обработчиков событий.

У вас есть несколько вариантов:

  • Переименуйте VKPInputBtnClick, чтобы он не выглядел как обработчик событий OnClick для элемента управления VKPInputBtn.
  • Сделайте VKPInputBtnClick методомкласс формы.
  • Вручную объявите метод new VKPInputBtnClick в классе формы, и, возможно, среда IDE выберет его вместо отдельной функции.
  • Введите другой типвведите имя в свойство OnClick в Инспекторе объектов, а затем , затем дважды щелкните его (или нажмите Enter ).В среде IDE будет создан метод с таким именем.
1 голос
/ 09 ноября 2010

Попробуйте удалить обработчик из файла .pas из декларации и разделов реализации (или скопируйте куда-нибудь, если они содержат код).Затем попробуйте заново создать обработчик для кнопки.Иногда среда IDE может выйти из синхронизации, и все, что можно сделать, это сбросить ее в известное состояние.

Если это не сработает, посмотрите, можете ли вы закрыть форму и открыть ее заново или удалить обработчик из.файл dfm.

0 голосов
/ 11 ноября 2010

фактически объявлено как функция, а не как метод в модуле.

Обработчики методов должны быть процедурами, а не функциями. Следовательно, это не работает.

Как давно сказал Тоби (но вы, очевидно, не слушали):

Попробуйте удалить обработчик из файла .pas ... Затем попробуйте заново создать обработчик для кнопки.

0 голосов
/ 09 ноября 2010

В любом случае, на вопрос дан ответ, и ясно, что это сообщение об ошибке должно быть ошибкой RAD Studio XE, поскольку IDE неправильно сравнивает фактические и необходимые свойства для объекта.

Большое спасибо всем за вклад.

EDN QC Case: # 89543

<Ч />

Примечания:

Этот подход я использую для использования функциональности ускорителя для функции VKPInputBtnCLick.
- Используйте сообщение из этого фрагмента кода: Алгоритм обработки альтернативных ключей
- Измените VK_TAB на VK_LMENU (слева ALT)
- После захвата сообщения ALT установите глобальное уникальное значение в переменную
- В обработчике события FormKeyPress проверьте, совпадают ли значения уникальных глобальных переменных с тем, которое я установил ранее - Выполнить функцию.

Надеюсь, это поможет другим, желающим это сделать. Кроме того, приветствуется и более гладкий и чистый способ достижения этой функциональности.

Пока не задан вопрос как ответ.

0 голосов
/ 09 ноября 2010

Если это окажется настоящей ошибкой, не забудьте отправить ее в Embarcadero. Вы можете получить доступ к приложению QA через меню инструментов в IDE или перейти на веб-сайт.

0 голосов
/ 09 ноября 2010

Компоненты работают по-разному в дизайне и во время выполнения.Двойной щелчок по кнопке в desgintime создает и добавляет обработчик OnClick.Это объясняет, почему поведение отличается.

Надеюсь, я правильно понимаю ваш вопрос.У вас есть компонент в вашей форме, и вы не можете назначить правильный обработчик событий, поскольку автоматически созданный обработчик событий отличается от ожидаемого обработчика событий?

В этом случае создайте свой собственный обработчик событий и назначьте его.Вы даже можете назначить его в OnCreate формы.Если назначение через DFM не удается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...