![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Старожил
Регистрация: 29.01.2008
Сообщений: 2,406
|
![]()
Всем привет. Интересует следующий вопрос.
Вот при создании класса окна в tWinControl ему в качестве оконной процедуры назначают InitWndProc но при первом же её вызове (т.е. при получении сообщения WM_CREATE в момент создания окна InitWndProc меняет адрес оконной процедуры со своего на адрес метода экземпляра объекта tWinControl. Т.е. на tWinControl.wndProc и вызывает его. Код:
Код:
Короче, как правильно указать winApi ссылку на метод, что бы он видел его как функцию и всё было бы ОК? И интересен вот ещё какой вопрос, описание оконной процедуры выглядит, сами можете видеть каким образом, а вот опись метода tWinControl.wndProc выглядит вот так: Код:
В общем если проясним ответы на эти вопросы, будет здорово ![]() з.ы. Быть может я не правильно избавил код от {$IF DEFINED(CLR)}, {$IFDEF LINUX} и т.п. По любому вы сами можете докопаться до него ) Последний раз редактировалось Stilet; 09.08.2010 в 09:07. |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 29.12.2007
Сообщений: 137
|
![]()
Сообщения WM_ посылаются неоконным контролам не от системы непосредственно, разумеется, а искусственно, от его оконного родителя
|
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 29.01.2008
Сообщений: 2,406
|
![]() Код:
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 29.12.2007
Сообщений: 137
|
![]()
По MakeObjectInstance у Антона Григорьева подробно расписано:
http://www.delphikingdom.com/asp/vie...talogid=169#07 |
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]()
Если вы целиком контролируете своё окно - я бы посоветовал использовать Get/SetWindowLong с GWL_USERDATA вместо хака MakeObjectInstance.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
![]() |
![]() |
![]() |
#6 | |
Старожил
Регистрация: 29.01.2008
Сообщений: 2,406
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 29.12.2007
Сообщений: 137
|
![]()
1. Во-первых, не используй CreateThread, а используй BeginThread, иначе тебе явно не понравится, когда программа зависнет намертво при попытке выделить в потоке память
2. Во-вторых, методы класса от обычных функций отличаются тем, что в них НЕЯВНО передается дополнительный параметр - Self, соответственно с этим параметром они просто не соответствуют прототипу. Обход - это назначит все-таки функцию с правильным прототипом, которая вызывает метод, но эта функция должна откуда-то взять Self. Стоит ли овчинка? |
![]() |
![]() |
![]() |
#8 | ||
Старожил
Регистрация: 29.01.2008
Сообщений: 2,406
|
![]() Цитата:
Цитата:
|
||
![]() |
![]() |
![]() |
#9 | ||
Форумчанин
Регистрация: 29.12.2007
Сообщений: 137
|
![]() Цитата:
1. Переводит менеджер памяти в потокобезопасный режим, без этого попытка одновременного обращения к менеджеру памяти из разных потоков может закончиться непредсказуемо 2. Заворачивает код функции потока в SEH-фрейм, чтобы необработанное исключение в потоке не рушило все приложение 3. Инициализирует FPU (для правильной работы чисел с плавающей точкой) Цитата:
|
||
![]() |
![]() |
![]() |
#10 | ||
Старожил
Регистрация: 29.01.2008
Сообщений: 2,406
|
![]() Цитата:
![]() Ладно, спасибо, учту. Цитата:
![]() |
||
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Таймер обратного отсчёта | HellkilleR | Microsoft Office Excel | 21 | 18.03.2015 12:49 |
Таймер обратного отсчета | Bilargo | Помощь студентам | 6 | 30.09.2009 17:02 |
Функция обратного вызова и таймер на WinApi | flug | Win Api | 4 | 17.09.2009 16:06 |
Содержание прямого или обратного набора | Big-kit | Общие вопросы Delphi | 1 | 04.06.2009 17:02 |
Таймер обратного отсчета на С | Raptor | Помощь студентам | 6 | 08.01.2008 01:11 |