notricky Опубликовано 8 октября, 2016 Поделиться Опубликовано 8 октября, 2016 (изменено) Собственно вот такая строчка: if TCustomPopupForm(self.PopupForm).OnKeyDown <> KeyDown then вызывает ошибку при компиляции Not enough actual parameters Собственно как получить подобное условие? И интересен будет комментарий к этому - почему такая ошибка. Изменено 8 октября, 2016 пользователем notricky Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 8 октября, 2016 Модераторы Поделиться Опубликовано 8 октября, 2016 2 часа назад, notricky сказал: Собственно вот такая строчка: if TCustomPopupForm(self.PopupForm).OnKeyDown <> KeyDown then вызывает ошибку при компиляции Not enough actual parameters Собственно как получить подобное условие? И интересен будет комментарий к этому - почему такая ошибка. эм, что вы хотите сделать? если проверить обработчик привязанный к событию, то через Assigned если хотите проверить параметр который возвращается в теле события, то нужно написать обработчик и присвоить его TCustomPopupForm(self.PopupForm).OnKeyDown := MyEventKeyDown; и уже в теле MyEventKeyDown проверять параметр Цитата Ссылка на комментарий
0 notricky Опубликовано 22 октября, 2016 Автор Поделиться Опубликовано 22 октября, 2016 KeyDown в моем примере - это обработчик. Задача была проверить какой обработчик в OnKeyDown. Чтобы не присваивать каждый раз обработчик, если он тот же на входе. Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 22 октября, 2016 Модераторы Поделиться Опубликовано 22 октября, 2016 4 часа назад, notricky сказал: KeyDown в моем примере - это обработчик. Задача была проверить какой обработчик в OnKeyDown. Чтобы не присваивать каждый раз обработчик, если он тот же на входе. это не лучшее решение, используйте к примеру Tag формы, каждый обработчик имеет свой номер. так проще будет ориентироваться и выполнять сравнения Цитата Ссылка на комментарий
0 kami Опубликовано 22 октября, 2016 Поделиться Опубликовано 22 октября, 2016 Не претендую на самое лаконичное решение, но проверку можно организовать так: var tmp: TNotifyEvent; // понятно, что тут должен быть нужный тип события, лень смотреть, что там с OnKeyDown begin tmp:=myProc; if (TMethod(OnActivate).Code = TMethod(tmp).Code) and (TMethod(OnActivate).Data = TMethod(tmp).Data) then ;// именно myProc - обработчик события OnActivate Rusland 1 Цитата Ссылка на комментарий
0 kami Опубликовано 22 октября, 2016 Поделиться Опубликовано 22 октября, 2016 (изменено) В 08.10.2016 в 04:24, notricky сказал: И интересен будет комментарий к этому - почему такая ошибка. Потому что компилятор хочет сравнить результат работы метода со второй сравниваемой переменной. И он видит, что метод имеет параметры, но они не передаются. Правда, если подставить к примеру что-нибудь фейковое, то компилятор начнет ругаться, что метод не возвращает значения, т.к. он объявлен как procedure of object Изменено 22 октября, 2016 пользователем kami Цитата Ссылка на комментарий
0 krapotkin Опубликовано 22 октября, 2016 Поделиться Опубликовано 22 октября, 2016 TCustomPopupForm(self.PopupForm).OnKeyDown <> @KeyDown Цитата Ссылка на комментарий
0 notricky Опубликовано 23 октября, 2016 Автор Поделиться Опубликовано 23 октября, 2016 В 22.10.2016 в 12:47, krapotkin сказал: TCustomPopupForm(self.PopupForm).OnKeyDown <> @KeyDown Тогда уж @ вначале TCustomPopupForm тоже Цитата Ссылка на комментарий
0 kami Опубликовано 24 октября, 2016 Поделиться Опубликовано 24 октября, 2016 21 час назад, notricky сказал: Тогда уж @ вначале TCustomPopupForm тоже Не уверен, но может быть так, что сравнение указателей (если это "проглотит" компилятор) будет сравнивать только адреса методов в VMT. А нужно сравнивать адресацию метода и объект, к которому этот метод относится (например - если создано две формы одного класса и обработчик назначен на одну из них). Вероятно, @ при сравнении myKeyDown = Form2.OnKeyDown будет давать ложно-положительные срабатывания, если в реальности myKeyDown = Form1.OnKeyDown. Цитата Ссылка на комментарий
Вопрос
notricky
Собственно вот такая строчка:
if TCustomPopupForm(self.PopupForm).OnKeyDown <> KeyDown then
вызывает ошибку при компиляции Not enough actual parameters
Собственно как получить подобное условие?
Изменено пользователем notrickyИ интересен будет комментарий к этому - почему такая ошибка.
Ссылка на комментарий
8 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.