:: Visual Foxpro, Foxpro for DOS
как перехватить messagebox?
AlexSSS
Автор

Сообщений: 6113
Откуда: Tallinn, Estonia
Дата регистрации: 19.09.2005
на старом проекте на vfp9 сейчас проходит перевод интерфейса на другой язык
собственно с интерфейсом проблем нет, уже написаны классы, которые переводят интерфейс на английский (проход по всем объектам на форме и перевод caption)
Но в программах множество messagebox. приходится перелопачивать весь код, чтобы в тексте перед messagebox вставить функцию перевода.

вопрос - а нет ли возможности как-то перехватывать все messagebox, подменять текст и отправлять его дальше?
Ratings: 0 negative/0 positive
Re: как перехватить messagebox?
PaulWist

Сообщений: 14618
Дата регистрации: 01.04.2004
Code Reference + замена не помогает?


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: как перехватить messagebox?
Chemberzhy

Сообщений: 13142
Откуда: Измаил
Дата регистрации: 28.04.2009
Можно вообще листинг прошерстить простейшей процедуркой с целью выявления любых кириллических символов и походу переводить, можно даже подключив ГугТранлятор ;)


------------------
Что-то с памятью моей стало, всё что было не со мной- помню.
Ratings: 0 negative/0 positive
Re: как перехватить messagebox?
прошелмимо

Сообщений: 784
Дата регистрации: 21.02.2012
Оберните команду mess.. в программу/класс

Вызывайте с параметром код/номер сообщ.
Можете их доп.сгруппировать по типам...
(О чем/про что)
Аля сап ерпи.

Далее в завис от языка читаете в табличке
Рус/англ/..текст

Выводите

Во всех местах прям команду mess
Меняете на вызов прогр/подъем объекта



Исправлено 1 раз(а). Последнее : прошелмимо, 10.10.18 12:21
Ratings: 0 negative/0 positive
Re: как перехватить messagebox?
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
AlexSSS
а нет ли возможности как-то перехватывать все messagebox, подменять текст и отправлять его дальше?
Нет. Но можно поиском и заменой заменить все "messagebox" на "messagebox_loc" (поиск по "слову целиком") и уж в своей функции делать всё что заблагорассудится
Да, если код написан "как обычно", то ещё придётся искать "messagebo" и "messageb". Ну и стандартная беда с макро и прочим динамическим кодом - эту хрень уже не победить без написания собственного препроцессора и замены всех макро/execscript на вызов этого препроцессора (проще забить - пусть не локализуется в этих местах)...


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: как перехватить messagebox?
AlexSSS
Автор

Сообщений: 6113
Откуда: Tallinn, Estonia
Дата регистрации: 19.09.2005
всем спасибо

перехватить невозможно.
а как заменить - это было понятно
Ratings: 0 negative/0 positive
Re: как перехватить messagebox?
AlexSSS
Автор

Сообщений: 6113
Откуда: Tallinn, Estonia
Дата регистрации: 19.09.2005
PaulWist
Code Reference + замена не помогает?
Спасибо, раньше с ним не работал, писал код для замены сам.
удобный инструмент
Ratings: 0 negative/0 positive
Re: как перехватить messagebox?
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Перехватить то возможно - но не нужно. Это слишком грубый хак.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: как перехватить messagebox?
of63

Сообщений: 25251
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
(эти системные сообщения всплывают посередине экоана компа, а не посередине приложения фокса. Из-за это го их пришлось просто выбросить )

youtu.be - хз
Ratings: 0 negative/0 positive
Re: как перехватить messagebox?
AlexSSS
Автор

Сообщений: 6113
Откуда: Tallinn, Estonia
Дата регистрации: 19.09.2005
Уже наваял код, который открывает все SCX как таблицы и заменяет в поле methods mesagebox( на мою процедуру.
Небольшая тонкость - после этого форму надо перекомпилировать через COMPILE FORM не открывая в дизайнере, иначе границы процедур сместятся.



Исправлено 1 раз(а). Последнее : AlexSSS, 11.10.18 23:47
Ratings: 0 negative/0 positive
Re: как перехватить messagebox?
of63

Сообщений: 25251
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
после "этого" все наши "штатные" messagebox будут координироваться где? Только не говори, что "все там же"
Ratings: 0 negative/0 positive
Re: как перехватить messagebox?
AlexSSS
Автор

Сообщений: 6113
Откуда: Tallinn, Estonia
Дата регистрации: 19.09.2005
of63
после "этого" все наши "штатные" messagebox будут координироваться где? Только не говори, что "все там же"
в смысле координироваться?
на формах вместо стандартного messagebox я проставил thisform.oCommon.MsgBox (мне в процедуру перевода надо передавать имя формы, так ее получить проще). Класс oCommon есть на всех формах. Так что код моего MsgBox прописан в одном месте
Ratings: 0 negative/0 positive
Re: как перехватить messagebox?
of63

Сообщений: 25251
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Свой "messagebox" я написал, и могу указать координаты на экране любые. Я имел ввиду системный, нативный фоксовый MESSAGEBOX, ему координаты как указать бы, где он появится. Да это не важно. Действительно, пишешь подпрограмму типа MESSAGEBOX, и все дела. Вопрос о движении виндового окна MESSAGEBOX чисто "академический".
Ratings: 0 negative/0 positive
Re: как перехватить messagebox?
прошелмимо

Сообщений: 784
Дата регистрации: 21.02.2012
Ежели про стилистику, вкус и цвет..

MESSAGEBOX зло
+ там жешь вроде было даже, кажется
Время, на которое ждать, потом снимать..

(пример тупизма: наложил блокировку, не снял, месседж..)

В последнее время делал интерфейсы с выводом
Лога сообщений в отдельном окне.

В одинэсе также вроде, кажется...

В сапе сообщение с разным типом
ОШИБКА КРАСНОЕ, ЖЕЛТОЕ.., ЗЕЛЕНОЕ..
проблымывают в тулбар.
Инфо сообщение отображают редко.
Ratings: 0 negative/0 positive
Re: как перехватить messagebox?
прошелмимо

Сообщений: 784
Дата регистрации: 21.02.2012
+ в сапе тоже есть списки сообщений

Тарабанит алгоритм, куча проверок и сообщений
Если на каждое ждать и светить пользователю,
И он будет жмакать ок,
То это пиндец, извините.


Тарабанит прога, сообщения летят в коллектор,
Потом светится семафор,результат,
Если юзвер хочет, -смотрит лог....
Ratings: 0 negative/1 positive
Re: как перехватить messagebox?
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Ну, надо быть особо упоротым одарённым, чтобы лог выполняющихся действия показывать через messagebox-ы
А так то они есть в любых ситсемах, но для совершенно определённой цели - получение реакции пользователя (а никак не его "уведомление" о том что что-то там произошло/стартовало/завершилось и т.п.). Таймаут - ну если сообщение с одной стороны требует реакции, а с другой стороны, если негодник ушёл пить чай на пол-дня, то чтобы подвисшее сообщение не блокировало работу системы (всякие автовыгонялки из программы - первое что на ум приходит).


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: как перехватить messagebox?
of63

Сообщений: 25251
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Представь, ты запустил ДВЕ одинаковые программы, немного разнес на рабочем столе. И эти проги начинают сообщать при помощи MESSAGEBOX. Вопрос - как поместить окно МЕССАГЕБОКС в центр проги, ее вызвавшей
Ratings: 0 negative/0 positive
Re: как перехватить messagebox?
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
А как ты вообще различать будешь "две одинаковые программы"? Ну если они таки совсем одинаковые, и даже в заголовке окна не пишут ничего "различающегося"
И если так, то не пофиг ли тебе, какой из "одинаковых messagebox-ов" тискать

А так - ну при помощи хука можно "подвинуть" и системный MessageBox - если очень уж хочется


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: как перехватить messagebox?
of63

Сообщений: 25251
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Ничево смешнова! )
Запускаются действительно 2 копии одной программы (или много). Это делается для одновре5менного выполнения в них некой "статистики", например .пож 3 и под 5 процентов ключевой ставки. В заголовке окна они одинаковые (а что, кто-то заморачивается по поводу переназвания окна проги?, сомневаюсь)... Просто хочется знать где и что происходит координаты запущенного мессагебокса, ничего такого. Если это узнается в винде только по названию окна, то этого недостаточно. Наверное надо искать по ИД процесса-родителя этого мессагебокса. Как всегда хихи прослушал ). А что за "хук", ты упомянул?
Ratings: 0 negative/0 positive
Re: как перехватить messagebox?
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Ещё раз по простому - если разраб не в состоянии обеспечить точную идентификацию "2 запущенных копий программы" (если это соответствует бизнес задаче - т.е. заранее предполагается запуск 2-3 или 100500 копий, как, к примеру, офисные программы работают), а потом ещё и обеспечить идентификацию их внутренних окон - как диалоговых так и всех прочих, то он зря кушает свой хлеб.
Размещение всего "внутри главного окна" это лишь один из вариантов решения вопроса "связывания воедино" разных окон относящихся к одному экземпляру программы - довольно распространённый но далеко не единственнный.


------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 28 alex;  (Гостей: 27)

© 2000-2024 Fox Club 
Яндекс.Метрика