Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2014, 10:19   #1
exyl
Пользователь
 
Регистрация: 15.11.2014
Сообщений: 75
По умолчанию Присвоение события динамически создаваемому контролу

В Делфи ни разу не спец, но понадобилось присвоить событие динамически создаваемой форме (OnPaint). Вся работа с ней исключительно в отдельном pas модуле (потом он будет интегрирован в проект). Насколько я понимаю идеологию, раз формы изначально нет, то пишем класс, где объявляем процедуру:

Код:
type
  TWndF = class(TForm)
    procedure wndFPaint(Sender: TObject);
  end;

  var
  WNDF: TWndF;
А после вызова функции-конструктора (сама функция длинная, но суть можно выразить одной строкой: Result:=TForm.Create(Application) ), нужно присвоить:
Код:
WNDF.OnPaint:=wndFPaint;
При этом процедура объявлена:
Код:
procedure wndFPaint(Sender: TObject);
Но компилятор выдает ошибочку:
Цитата:
[DCC Error] xGUI.pas(15864): E2009 Incompatible types: 'method pointer and regular procedure'
На том самом месте, где происходит присвоение WNDF.OnPaint:=wndFPaint;

Ночью вздремнуть не удалось, поэтому вероятность того, что туплю стремится к бесконечности, но тем не менее, как исправить?

Последний раз редактировалось exyl; 23.11.2014 в 10:28.
exyl вне форума Ответить с цитированием
Старый 23.11.2014, 10:47   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
Result:=TForm.Create(Application)
почему TForm, а не TWndF

Код:
procedure wndFPaint(Sender: TObject);
почему не TWndF.wndFPaint ?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.11.2014, 11:11   #3
exyl
Пользователь
 
Регистрация: 15.11.2014
Сообщений: 75
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
Result:=TForm.Create(Application)
почему TForm, а не TWndF

Код:
procedure wndFPaint(Sender: TObject);
почему не TWndF.wndFPaint ?
1. Я передал суть. На самом деле, конечно, TWndF.
2. Опа. Забыл, благодарю.
exyl вне форума Ответить с цитированием
Старый 23.11.2014, 11:16   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Я передал суть. На самом деле, конечно, TWndF.
Ну в той сути процентов на 95 должно быть именно TWndF, иначе суть как бы и не суть
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.11.2014, 11:23   #5
exyl
Пользователь
 
Регистрация: 15.11.2014
Сообщений: 75
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Ну в той сути процентов на 95 должно быть именно TWndF, иначе суть как бы и не суть
Да названия формы, события и класса я поменял уже на форуме, в оригинале они совсем другие и если б не параноидальные правила, касающиеся неразглашения бреда тайн нашей конторы, то я б такой описки не сделал ))
exyl вне форума Ответить с цитированием
Старый 23.11.2014, 11:43   #6
exyl
Пользователь
 
Регистрация: 15.11.2014
Сообщений: 75
По умолчанию

Теперь компилятор кроет матом:
Цитата:
[DCC Error] xGUI.pas(1447): E2065 Unsatisfied forward or external declaration: 'TWndF.wndFPaint'
Вот эту строку: procedure wndFPaint(Sender: TObject); в описании класса:
Код:
type
  TWndF = class(TForm)
    procedure wndFPaint(Sender: TObject);
  end;
Какие-нибудь соображения есть по этому поводу?
exyl вне форума Ответить с цитированием
Старый 23.11.2014, 12:16   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Не найдена реализация для wndFPaint. Все с той же оперы, что опа забыл
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.11.2014, 12:47   #8
xatabich
Пользователь
 
Аватар для xatabich
 
Регистрация: 29.07.2013
Сообщений: 56
По умолчанию

А это главная форма
xatabich вне форума Ответить с цитированием
Старый 23.11.2014, 15:27   #9
exyl
Пользователь
 
Регистрация: 15.11.2014
Сообщений: 75
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Не найдена реализация для wndFPaint. Все с той же оперы, что опа забыл
Спасибо, понял сразу две вещи.
1. Где ошибка.
2. Иногда нужно спать.

Тему лучше вообще удалить, т.к. тут ничего полезного вроде нет, но есть банальная невнимательность от недосыпа ))
exyl вне форума Ответить с цитированием
Старый 23.11.2014, 18:35   #10
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

События у любого компонента(не важно какого) присваиваются так:
<имя компонента>.<название события(onЧто-то там)>:=<процедура, которая сработает при этом событие>;
Помни! Процедура, которая сработает при событие компонента, должна иметь те же самые параметры, что и стандартная у компонента.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передать TStrings создаваемому потоку Shouldercannon Общие вопросы Delphi 6 16.01.2014 18:14
XNA: Рисование маслом по контролу ds.Dante C# (си шарп) 7 28.06.2011 15:03
Access Violation на вызове события динамически созданного компонента JoLan Компоненты Delphi 1 14.03.2011 00:37
события на динамически созданные кнопки. Gambler Компоненты Delphi 13 26.11.2009 10:43
События в динамически созданном компоненте Biowulf86 Общие вопросы Delphi 2 17.09.2007 12:44