Вверх ↑
Этот топик читают: Гость
Ответов: 5227
Рейтинг: 587
#1: 2011-05-17 20:46:12 ЛС | профиль | цитата
Странно почему нет в пакете , кода три копейки а пользы ведро . Сделал для FBSL и CallDllEx (применительно к контролам FBSL и гаджетам PB). Что то подсказывает что и тут лишним не будет.callback.zip
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
2
файлы: 1callback.zip [1.7KB] [417]
Голосовали:1nd1g0, LainX
Ответов: 8923
Рейтинг: 823
#2: 2011-05-17 21:10:41 ЛС | профиль | цитата
andrestudio, а иконку?
callback.ico.ico
карма: 19

0
файлы: 1callback.ico.ico [4.1KB] [1033]
Ответов: 5227
Рейтинг: 587
#3: 2011-05-17 22:13:01 ЛС | профиль | цитата
Леонид, большой облом, оказывается self в компонентах в таком виде работать с двумя экземплярами класса работать не будет, так что только IC, ну да ладно мне и так сойдёт code_24002.txt
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
файлы: 1code_24002.txt [2.2KB] [644]
Ответов: 5227
Рейтинг: 587
#4: 2012-04-13 06:54:25 ЛС | профиль | цитата
Сделал ещё попытку, но тоже есть ограничение пока, представляет интерес сама процедура подмены callback функции методом класса. Жаль fpc её не переваривает
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
файлы: 1callback1.1beta.zip [4.7KB] [693]
Ответов: 5227
Рейтинг: 587
#5: 2013-07-30 10:48:16 ЛС | профиль | цитата
Появилось желание допилить до полноценного компонента (т.е с перезаписью оконного сообщения) есть задумки по поводу разделению на два компонента типа сервер-клиент, у кого есть интерес можете высказать свои соображения по существу.

карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 4629
Рейтинг: 749
#6: 2013-07-30 11:19:35 ЛС | профиль | цитата
Что-то не увидел хотя бы описания что это. Схемы не смотрел, посмотрел последний код, увидел некоторые непонятные манипуляции на ассемблере.
Как я понял, цель - сделать оконную процедуру методом класса. Да, такая задача возникает как только нужно делать компонент со своей Windows callback-функцией. Так как эта процедура является глобальной, возникает проблема какому именно экземпляру класса направлять вызов. На ассемблере, видимо, делается попытка пошаманить с параметрами в методе и передачей Self.

карма: 26

0
Ответов: 5227
Рейтинг: 587
#7: 2013-07-30 13:16:33 ЛС | профиль | цитата
Netspirit писал(а):
видимо, делается попытка пошаманить с параметрами в методе и передачей Self.
так и есть. Эта часть кода будет переделана для динамического подключения и отключения калбэк процедуры (функции). Задача подменить оконную калбэк процедуру пользовательской, с подменной в сообщении L,P параметров.
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 211
Рейтинг: 52
#8: 2013-07-30 15:51:18 ЛС | профиль | цитата
andrestudio писал(а):
Задача подменить оконную калбэк процедуру пользовательской, с подменной в сообщении L,P параметров.

Если я правильно уловил, то для экземпляров TControl имеются соответствующие методы AttachProc( proc )и DetachProc( proc )
книга о КОЛ с.71 писал(а):
AttachProc( proc ) - прикрепляет к списку динамических обработчиков сообщений окна указанную процедуру. В KOL это основной способ расширения функциональности существующих оконных объектов, и один из наиболее важных инструментов экономии размера кода, так как позволяет присоединить требуемый свойством обработчик сообщений только при наличии обращения к некоторому свойству или при назначении обработчика некоторого события. Кроме того, таким способом можно прикрепить несколько обработчиков, которые вызываются последовательно, от последнего прикрепленного к первому, пока один из них возвратит флаг «больше не обрабатывать» (Result = FALSE).

карма: 1
слтв
0
Ответов: 5227
Рейтинг: 587
#9: 2013-07-30 16:04:09 ЛС | профиль | цитата
Собственно не хочется привязываться к HiAsm-контролам, это будет работать через стандартный хэндл окна, сам механизм клиентов с сервером должен быть похож на выше приведённое описание функций AttachProc и DetachProc
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Ответов: 4629
Рейтинг: 749
#10: 2013-07-30 16:24:45 ЛС | профиль | цитата
Самый простой вариант - делается глобальная переменная типа PList. Каждый экземпляр класса при создании добавляет себя в этот список, при уничтожении удаляет. Callback процедура перебирает объекты из этого списка и если поле "Хендл" объекта соответствует параметру процедуры - вызывает любой метод внутри этого объекта.
Когда-то ещё вроде пробовал так:


#pas
procedure THICallback._work_doCreateHook;
function WndHandleCallback(HWnd: THandle; Msg: Cardinal; WParam, LParam: Integer): Cardinal; stdcall;
begin
...........
end;
begin
begin
if FWndHandle = 0 then
begin
FWndHandle := ReadInteger(_Data,_data_Handle);
FEnabledCallbak := true;
SetWindowLong(FWndHandle, GWL_USERDATA,
SetWindowLong(FWndHandle, GWL_WNDPROC, LongInt(@WndHandleCallback)));
end
else exit;
end;
Кажеться, в Delphi работало (в FPC вложенная функция имеет ещё один неявный параметр; было бы любопытно переставлять параметры на ассемблере) И не забывай сохранять/восстанавливать оригинальные GWL_USERDATA и GWL_WNDPROC у окна.
карма: 26

1
Голосовали:andrestudio
Ответов: 5227
Рейтинг: 587
#11: 2013-07-30 19:38:47 ЛС | профиль | цитата
Netspirit писал(а):
Самый простой вариант - делается глобальная переменная типа PList
Да, механизм такой-же как у GlobalVar. Ладно, пошаманим на медне скорей всего.
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
11
Сообщение
...
Прикрепленные файлы
(файлы не залиты)