powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как вызвать перехватываемое событие
21 сообщений из 21, страница 1 из 1
Как вызвать перехватываемое событие
    #35603803
SashaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При перехвате события к примеру кнопки ButtonOK необходимо чтобы сначала выполнился код типа DODEFAULT, а затем уже выполнялись наши чёрные делишки, при это после выхода из процеруры перехватчика не выполнялся обработчик события. Подскажите гуру FoxPro каким образом это можно осуществить?
...
Рейтинг: 0 / 0
Как вызвать перехватываемое событие
    #35603830
1234зайчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вам необходимо просто написать
Код: plaintext
1.
2.
3.
if dodefault()
   * черные делишки
endif
и не нужно ничего перехватывать
...
Рейтинг: 0 / 0
Как вызвать перехватываемое событие
    #35603934
12345зайчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2SashaM
просьба - нарисуйте маленький пример
и объясните, что Вы желаете перехватить и выполнить
...
Рейтинг: 0 / 0
Как вызвать перехватываемое событие
    #35605611
SashaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня работает другая программа. Я не знаю алгоритм работы, просто могу привязаться к event-у Click кнопки ОК. Необходимо, чтобы данная программа отработала, а затем я выполнил свои действия. Конкретно есть инвентарные карточки и история по ним. При выполнении действия внутреннее перемешение из карточки в историю попадает местоположение. Так вот нужно чтобы после нажатия кнопки ОК программа перенесла неизменённые данные в историю, а я затем меняю местоположение в карточке, в зависимости от нового мол-а.
...
Рейтинг: 0 / 0
Как вызвать перехватываемое событие
    #35605904
12345зайчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторУ меня работает другая программа

сплошные ребусы.

если есть форма, на ней есть контролы, есть исходники, что может помешать просто
изменить метод клик кнопки у формы?

Вы можете добавить свой алгоритм в существующий и выполнять его при опред.условиях
(обвязать условиями, при которых он начнет исполняться).
Зачем биндить событие я пока не понимаю.
...
Рейтинг: 0 / 0
Как вызвать перехватываемое событие
    #35607025
SashaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В том то и дело исходников нет, это система написанная другими программистами.
...
Рейтинг: 0 / 0
Как вызвать перехватываемое событие
    #35607044
SashaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.к. приходят обновления, а заставить писать такие мелочи, правда рутинные для бухгалтеров, им не с руки. По этому пожалуйста не предлагаите ReFox.
...
Рейтинг: 0 / 0
Как вызвать перехватываемое событие
    #35607077
12345зайчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторВ том то и дело исходников нет

все, я тогда сдаюсь

что Вы собрались тогда биндить?
событие в отдельном собранном фоксовом приложении?

а Ваш код где должен выполниться?
...
Рейтинг: 0 / 0
Как вызвать перехватываемое событие
    #35608114
SashaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вешаюсь на инициализацию формы ( код написан другими людми, исходников нет. Суть данного дополнения предоставить возможность перехватывать события приложения ), а затем вешаюсь на кнопку, но прерываение к нам приходит первым.
...
Рейтинг: 0 / 0
Как вызвать перехватываемое событие
    #35608141
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMВешаюсь на инициализацию формы ( код написан другими людми, исходников нет. Суть данного дополнения предоставить возможность перехватывать события приложения ), а затем вешаюсь на кнопку, но прерываение к нам приходит первым.
Оспидя, да покажите, наконец, как вы вешаетесь на кнопку. Кусочек кода хотя бы.
...
Рейтинг: 0 / 0
Как вызвать перехватываемое событие
    #35608202
SashaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
Define Class AddOn_Inv_Move As Custom

PROCEDURE ButtonClick
...
EndProc

* Принимает сообщения
PROCEDURE ReceiveMessage
LParam oSender, cMessage, mData
IF cMessage = "Init" THEN
BindEvent( oSender.Tbtndialog1.ButtonOK, "Click", This, "ButtonClick", 0 )
ENDIF
ENDPROC

EndDefine

Сам код перехвата событий из очереди показать не могу, т.к. код защищён.
...
Рейтинг: 0 / 0
Как вызвать перехватываемое событие
    #35608252
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте немного проясним. У вас нет исходников на конкретные формы и они
приходят как обновления.
Но у вас есть некий *.app/*.exe, который вызывает на выполнение внешнюю по
отношению к нему форму (т.е. файл *.frx лежит на диске рядом с вашей
прогой)?

Таким образом, вы можете биндить события, но поменять код самой кнопки не
можете. Я правильно понял вашу проблему?


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Как вызвать перехватываемое событие
    #35608345
12345зайчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот пример, который Вам даст возможность
понять мех-м подписки на события в фокспро

о тех "хвостах", которые Вам оставили для масштабирования
можно судить только посмотрев на Ваше приложение
(лучше-бы Вам сделали настройку скриптов для выполнения)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
public oObj1, oObj2

oObj1 = createobject("cus_tt")
oObj2 = createobject("cus_pp")

? "нет подписки"
oObj2.pp_cus_pp()

bindevent(oObj2, "pp_cus_pp", oObj1, "tt_cus_tt")
? "подписка До СОБЫТИЯ"
oObj2.pp_cus_pp()

bindevent(oObj2, "pp_cus_pp", oObj1, "tt_cus_tt",  1 )
? "подписка ПОСЛЕ СОБЫТИЯ" 
oObj2.pp_cus_pp()

unbindevents(oObj2)
? "нет подписки"
oObj2.pp_cus_pp()

define class cus_tt as Custom 
	procedure tt_cus_tt
		? "tt_cus_tt"
enddefine


define class cus_pp as Custom 
	procedure pp_cus_pp
		? "pp_cus_pp"
enddefine
...
Рейтинг: 0 / 0
Как вызвать перехватываемое событие
    #35608352
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMавтор
Define Class AddOn_Inv_Move As Custom

PROCEDURE ButtonClick
...
EndProc

* Принимает сообщения
PROCEDURE ReceiveMessage
LParam oSender, cMessage, mData
IF cMessage = "Init" THEN
BindEvent( oSender.Tbtndialog1.ButtonOK, "Click", This, "ButtonClick", 0 )
ENDIF
ENDPROC

EndDefine

Сам код перехвата событий из очереди показать не могу, т.к. код защищён.

А если попробовать
BindEvent( oSender.Tbtndialog1.ButtonOK, "Click", This, "ButtonClick", 1 )
или
BindEvent( oSender.Tbtndialog1.ButtonOK, "Click", This, "ButtonClick", 3 )

Будет работать?

1 - Call event code before delegate code.
3 - Call event code before delegate code. Do not trigger event (call delegate code) when simple method calls occur.
...
Рейтинг: 0 / 0
Как вызвать перехватываемое событие
    #35608385
SashaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Немножко не так. Есть дополнительный app ( назовём addins ) который при старте система запускает. Вот этот addins выполняет мой app, в котором я описываю куда можно привязаться. Я знаю что в системе есть форма с определённым именем. Я указываю addins-у чтобы он мой клас связал с Init формы. При старте этой формы срабатывает мой обработчик, в котором я сажусь на созданную кнопку в частности на событие Click. Естественно после нажатия кнопки я первым получаю управление. С помошью AEVENTS() найдя кнопку я могу вызвать метод Click, который естественно вызовет опять таки мой обработчик. Нужно скорее всего убрать свой обработчик из формы, но вот что делать с тем, что когда мой обработчик закончит действие, естественно вызывается старый обработчик! Вопрос собственно в том, как недопустить этого. Если подскажете как убить мой обработчик буду так же благодарен, т.к. с Event-ами я ещё не разбирался особо.
...
Рейтинг: 0 / 0
Как вызвать перехватываемое событие
    #35608390
SashaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kruchinin PahanА если попробовать
BindEvent( oSender.Tbtndialog1.ButtonOK, "Click", This, "ButtonClick", 1 )
или
BindEvent( oSender.Tbtndialog1.ButtonOK, "Click", This, "ButtonClick", 3 )

Будет работать?

1 - Call event code before delegate code.
3 - Call event code before delegate code. Do not trigger event (call delegate code) when simple method calls occur.
Нет, не работает
...
Рейтинг: 0 / 0
Как вызвать перехватываемое событие
    #35608412
SashaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо попробую bindevent(, , , , 1). Похоже я затупил читая документацию на engl
...
Рейтинг: 0 / 0
Как вызвать перехватываемое событие
    #35608438
SashaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bindevent(, , , , 1) почему-то не получается
...
Рейтинг: 0 / 0
Как вызвать перехватываемое событие
    #35608497
12345зайчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2SashaM

Вы мой пример посмотрели?

там показано как подписаться до, после и отписаться
...
Рейтинг: 0 / 0
Как вызвать перехватываемое событие
    #35608513
12345зайчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
public лягушка, комар

лягушка = createobject("лягушка")
комар = createobject("комар")

? "нет подписки"
комар.лети()

bindevent(комар, "лети", лягушка, "кушать")
? "подписка До СОБЫТИЯ"
комар.лети()

bindevent(комар, "лети", лягушка, "кушать",  1 )
? "подписка ПОСЛЕ СОБЫТИЯ" 
комар.лети()

unbindevents(комар)
? "нет подписки"
комар.лети()

define class лягушка as Custom 
	procedure кушать
		? "ням ням ням"
enddefine


define class комар as Custom 
	procedure лети
		? "полетел комар"
enddefine
...
Рейтинг: 0 / 0
Как вызвать перехватываемое событие
    #35609303
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Небольшое пояснение смысла 4 параметра в BindEvents().

С первыми двумя значениями все просто:

1 - Сначала выполняется наш метод-делегат, а потом "штатный" метод-источник
2 - Наоборот. Сначала выполняется "штатный" метод-источник, а потом уже наш метод-делегат

А вот смысл значений 3 и 4 требует некоторого пояснения.

Интерфейс с пользователем пораждает ряд событий. Например, событие нажатия кнопки. Это событие, в свою очередь, вызывает срабатывание определенного, связанного с этим событием программного кода. В данном случае, того кода, который написан в методе Click() кнопки.

Т.е. последовательность такая:

1) Событие пользователя (нажал на кнопку)
2) Срабатывание метода Click()

Однако метод Click(), разумеется, можно вызвать и без пользователя. Напрямую. Как обычный программный метод прямой командой.

ThisForm.CommandButton.Click()

Так вот, первые два значения 4 параметра BindEvents() не делают различия между способами запуска метода Click(). Не важно, был ли он запущен пользователем после нажатия кнопки или же он был запущен программно, без собственно нажатия кнопки.

А вот 3 и 4 значение указывают на то, что метод-делегат надо запускать только и исключительно в том случае, если метод Click() сработал в результате события пользователя (пользователь нажал на кнопку). Если же метод Click() был вызван программно, то метод-делегат не запускается.

Следует также понимать, что BindEvents() не может предотвратить (запретить) выполнение исходного события. Собственно метода Click(). Он определят всего-лишь как запускать наш метод-делегат по отношению к этому исходному событию.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как вызвать перехватываемое событие
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]