Автор | Сообщение |
|
| постоянный участник
|
Пост N: 2200
Зарегистрирован: 12.09.06
|
|
Отправлено: 05.05.12 10:52. Заголовок: Как передать данные из одной программы в другую ?
Всем привет... Есть ли механизм передачи данных между программами ? Допустим прога на МиниГуи запустила терминалку. Как узнать что терминалка нормально запустилась ?
| |
|
Ответов - 59
, стр:
1
2
3
All
[только новые]
|
|
|
| постоянный участник
|
Пост N: 1289
Зарегистрирован: 17.02.12
|
|
Отправлено: 11.11.16 21:59. Заголовок: Петр пишет Нужно зам..
Петр пишет цитата: | Нужно заменить стандартный обработчик окна. Это можно делать и что назывется "на лету" |
| Не видел такую возможность в hb 3.2. Это как можно сделать ? С idle и прочим все понятно (если можно на уровне prg подсунуть свой обработчик для WM_COYDATA)
| |
|
|
| постоянный участник
|
Пост N: 1324
Зарегистрирован: 09.10.06
|
|
Отправлено: 11.11.16 22:25. Заголовок: SergKis пишет: Не в..
SergKis пишет: цитата: | Не видел такую возможность в hb 3.2. Это как можно сделать ? С idle и прочим все понятно (если можно на уровне prg подсунуть свой обработчик для WM_COYDATA) |
| Я не писал, что это возможность hb 3.2. Я писал, что есть такая возможность (средствами winapi, например, SetWindowLongPtr). SergKis пишет: цитата: | если можно на уровне prg подсунуть свой обработчик для WM_COYDATA |
| Ну эта возможность не на пустом месте возникла. Когда-то мне надоело по "бескрайним просторам" стандартного обработчика MiniGUI ездить и появилась SET EVENTS FUNCTION TO MYEVENTS Сейчас я бы делал уже как-то так SET GLOBAL LISTENER TO MYEVENTS SET LISTENER TO Form_1_Listener() OF Form_1 EVENTS WM_CREATE, WM_COPYDATA, WM_DESTROY
| |
|
|
| постоянный участник
|
Пост N: 1290
Зарегистрирован: 17.02.12
|
|
Отправлено: 11.11.16 23:32. Заголовок: Петр пишет Я не писа..
Петр пишет цитата: | Я не писал, что это возможность hb 3.2. Я писал, что есть такая возможность (средствами winapi, например, SetWindowLongPtr |
| Жаль, что в hb нет "нормального" подкл. своего обработчика, а winapi установит новый, я понимаю все из старого надо повторять. Или можно старый вызывать тоже, хотя не важно, пока не потребутся и ... Спасибо за разъяснения цитата: | Ну эта возможность не на пустом месте возникла. Когда-то мне надоело по "бескрайним просторам" стандартного обработчика MiniGUI ездить и появилась SET EVENTS FUNCTION TO MYEVENTS |
| В Events(...) давно была фишка своего обработчика #ifdef _USERINIT_ FOR EACH cProc IN _HMG_aCustomEventProcedure r := &cProc ( hWnd , nMsg , wParam , lParam ) IF ValType ( r ) <> 'U' RETURN r ENDIF NEXT #endif не так цивилизованно, как сейчас, но ...
| |
|
|
| постоянный участник
|
Пост N: 1325
Зарегистрирован: 09.10.06
|
|
Отправлено: 12.11.16 01:32. Заголовок: SergKis пишет: В Ev..
SergKis пишет: цитата: | В Events(...) давно была фишка своего обработчика |
| Это немного другое. цитата: | 2008/02/01: Build 48 (HMG 1.4 Extended Edition) Published. .. * Updated: Synchronized an Extended HMG with an Official HMG 2.0.010: - New: HMG User Components Support. I've created a standard interface to allow HMG users to create its own components (ie: new controls) without need to modify HMG library itself. HMG User Components Reference: - InstallEventHandler ( <cEventHandlerFunctionName> ) |
| цитата: | 2007/02/15: Build 31 (HMG 1.3 Extended) Published. * New: SET EVENTS FUNCTION TO <funcname> command. Contributed by Petr Chornyj <myorg63@mail.ru> (see demo in folder \samples\Advanced\RunCmd) |
| Сама функция Events и есть обработчик. Если ваш собственный не отработал сообщение то может вызвать Events, иначе рискуете получить глюки, как Андрей. Но есть нюансы. Harbour мультиплатформенный и это нужно помнить. К тому же он open source, и то, что интересно вам или мне, может быть не интересно другому
| |
|
|
| постоянный участник
|
Пост N: 1291
Зарегистрирован: 17.02.12
|
|
Отправлено: 12.11.16 02:06. Заголовок: Петр пишет Это немно..
Петр пишет Возможно, но использовать это как свой с вызовом, если надо Events(), можно было. Это не так красиво как сейчас, но исп. можно было где то. То что неправильно использовать можно, так это уже др. песня. Но я не пользовал, привычнее лазить по "бескрайним просторам" ... хотя восторга от этого не имею. цитата: | Harbour мультиплатформенный и это нужно помнить. К тому же он open source, и то, что интересно вам или мне, может быть не интересно другому |
| Как правило (я про себя) заканчивается своей версией либы.
| |
|
|
| постоянный участник
|
Пост N: 5169
Зарегистрирован: 12.09.06
|
|
Отправлено: 12.11.16 03:07. Заголовок: Петр пишет: Я надею..
Петр пишет: цитата: | Я надеюсь, что Андрей организовал хоть какую-то проверку целосности данных. |
| Нет. Не знаю как.... Вот пример, посмотри - https://cloud.mail.ru/public/7gRW/zW5JDS68H Я думаю, что Передача сообщений между приложениями/процессами будет многим интересна. Тем более, что кода мало.
| |
|
|
| постоянный участник
|
Пост N: 1292
Зарегистрирован: 17.02.12
|
|
Отправлено: 12.11.16 08:48. Заголовок: Петр пишет Сейчас я ..
Петр пишет цитата: | Сейчас я бы делал уже как-то так SET GLOBAL LISTENER TO MYEVENTS SET LISTENER TO Form_1_Listener() OF Form_1 EVENTS WM_CREATE, WM_COPYDATA, WM_DESTROY |
| Может в таком виде "ширее" будет SET GLOBAL LISTENER ADD LISTENER TO Form_1 EVENTS WM_CREATE, WM_COPYDATA, WM_DESTROY ACTION {|hW,nM,wP,lP| MY1(hW,nM,wP,lP) } ADD LISTENER TO Form_5 EVENTS WM_CREATE, WM_COPYDATA, WM_DESTROY ACTION {|hW,nM,wP,lP| MY2(hW,nM,wP,lP) } ADD LISTENER TO Form_7 EVENTS WM_CREATE, WM_COPYDATA, WM_DESTROY ACTION {|hW,nM,wP,lP| MY3(hW,nM,wP,lP) } ... EVENTS могут быть разными. И эта штука может не пересекаться с SET EVENTS FUNCTION TO MYEVENTS т.е. может присутсвовать и то и то
| |
|
|
| постоянный участник
|
Пост N: 1326
Зарегистрирован: 09.10.06
|
|
Отправлено: 12.11.16 15:21. Заголовок: Andrey пишет: Тем б..
Andrey пишет: цитата: | Тем более, что кода мало. |
| Кода мало - ошибок много.
| |
|
|
| постоянный участник
|
Пост N: 1327
Зарегистрирован: 09.10.06
|
|
Отправлено: 12.11.16 16:36. Заголовок: SergKis пишет: SET..
SergKis пишет: в моем понимании эта команда отключает глобальный обработчик ADD LISTENER TO Form_1 EVENTS WM_CREATE, WM_COPYDATA, WM_DESTROY ACTION {|hW,nM,wP,lP| MY1(hW,nM,wP,lP) } - эта команда создает обработчик для окна Form_1, в случае если приходят события WM_CREATE, WM_COPYDATA, WM_DESTROY их обработка передается блоку в существующей модели HMG это реализуется примерно вот так цитата: | SET EVENTS FUNCTION TO my_EventsHandler FUNCTION my_EventsHandler ( hWnd, nMsg, wParam, lParam ) LOCAL nResult IF hWnd == GetFormHandle( "Form_1" ) IF nMsg == WM_CREATE .OR. nMsg == WM_COPYDATA .OR. nMsg == WM_DESTROY nResult := Eval( {|hW,nM,wP,lP| MY1(hW,nM,wP,lP), hWnd, nMsg, wParam, lParam ) IF nResult != 0 RETURN nResult ELSE RETURN Events( hWnd, nMsg, wParam, lParam ) ENDIF ENDIF ENDIF RETURN Events( hWnd, nMsg, wParam, lParam ) |
| Я правильно понял? Андрей, обратите внимание на мою реализацию и на обработку событий в вашем примере, кое-что там совешенно лишнее.
| |
|
|
| постоянный участник
|
Пост N: 1296
Зарегистрирован: 17.02.12
|
|
Отправлено: 12.11.16 17:18. Заголовок: Петр пишет в моем по..
Петр пишет цитата: | в моем понимании эта команда отключает глобальный обработчик |
| Тут мы немного разошлись в понимании, я считал, что даем команду "будем исп. глобальный список обработчиков", т.е. создаем массив\hash для списков. ADD ... добавляет в список окна , обозначенные события и свой обработчик этих событий. Причем самих окон еще может не быть. т.е., к примеру (чисто условно) a_Listener := hb_Hash() hb_HSet(a_Listener, "Form_1", {{WM_CREATE, WM_COPYDATA, WM_DESTROY}, bAction}) hb_HSet(a_Listener, "Form_5", {{WM_CREATE, WM_COPYDATA, WM_DESTROY}, bAction}) ... в обработчике примерно так cForm := _HMG_aFormNames[ ascan(_HMG_aFormHandles, hWnd) ] aEvnt := hb_HGetDef(a_Listener, cForm, {}) If empty(aEvnt) RETURN Events( hWnd, nMsg, wParam, lParam ) EndIf a := aEvnt[1] If ( i := ascan(a, {|msg| msg == nMsg }) ) > 0 If hb_IsBlock(aEvnt[2]) nResult := Eval(aEvnt[2], hWnd, nMsg, wParam, lParam) IF nResult != 0 RETURN nResult ENDIF EndIf EndIf RETURN Events( hWnd, nMsg, wParam, lParam )
| |
|
|
| постоянный участник
|
Пост N: 1328
Зарегистрирован: 09.10.06
|
|
Отправлено: 12.11.16 18:42. Заголовок: Понятно, значит у ва..
Понятно, значит у вас "ужее" Если у нас, будет вот так hb_HSet(a_Listener, "Form_1", {{WM_CREATE, WM_COPYDATA, WM_DESTROY}, bAction}) hb_HSet(a_Listener, "Form_1", {{WM_PAINT}, bAction}) hb_HSet(a_Listener, "Form_1", {{WM_CREATE}, bAction}) что нужно будет выполнять и что возвращать (а возвращать придется ). К сведению, в существующей реализации (не знаю кто-то пользуется или нет - примеров нет ) легко можно делать такие вещи как, например, OnBeforeInit, OnAfterInit (что-то подобное было в FoxPro: событие перед событием - само событие - событие после события :) ).
| |
|
|
|
| постоянный участник
|
Пост N: 1297
Зарегистрирован: 17.02.12
|
|
Отправлено: 12.11.16 19:37. Заголовок: Петр пишет Если у на..
Петр пишет цитата: | Если у нас, будет вот так hb_HSet(a_Listener, "Form_1", {{WM_CREATE, WM_COPYDATA, WM_DESTROY}, bAction}) hb_HSet(a_Listener, "Form_1", {{WM_PAINT}, bAction}) hb_HSet(a_Listener, "Form_1", {{WM_CREATE}, bAction}) |
| Будет последний в hash hb_HSet(a_Listener, "Form_1", {{WM_CREATE}, bAction}) Потому и писал hash, чтобы один обработчик на форму, а вернет aEvnt := hb_HGetDef(a_Listener, "Form_1", {}) или {{WM_CREATE}, bAction}, если найдет, или {}, если нет цитата: | К сведению, в существующей реализации (не знаю кто-то пользуется или нет - примеров нет ) легко можно делать такие вещи как, например, OnBeforeInit, OnAfterInit (что-то подобное было в FoxPro: событие перед событием - само событие - событие после события :) ) |
| НО ПРИМЕРОВ НЕТ ! ГДЕ СМОТРЕТЬ ?
| |
|
|
| постоянный участник
|
Пост N: 1329
Зарегистрирован: 09.10.06
|
|
Отправлено: 12.11.16 20:51. Заголовок: SergKis пишет: НО П..
SergKis пишет: цитата: | НО ПРИМЕРОВ НЕТ ! ГДЕ СМОТРЕТЬ ? |
| Вопрос не ко мне. Хотя примеров в MiniGUI много, что иногда раздражает, не сразу и понятно, что автор хотел показать, много дубляжей ради одной какой-то функции в середине примера, в том же HMG off. лучшая структуированость примеров. SergKis пишет: цитата: | Будет последний в hash hb_HSet(a_Listener, "Form_1", {{WM_CREATE}, bAction}) |
| Понятно, например в nodejs, если я не ошибаюсь там, идет поочередный вызов всех обработчиков. Где-то, забыл где , обработчик в случае дублирования не устанавливается. Нужна установка с доп. параметром: типа так и так, все понимаю, все равно хочу Остался один вопрос - кому это нужно, реализация несложная (если не формировать внутреннюю очередь событий конечно).
| |
|
|
| постоянный участник
|
Пост N: 1298
Зарегистрирован: 17.02.12
|
|
Отправлено: 12.11.16 21:12. Заголовок: Петр пишет Остался о..
Петр пишет цитата: | Остался один вопрос - кому это нужно, реализация несложная |
| Мы начали цитата: | Сейчас я бы делал уже как-то так SET GLOBAL LISTENER TO MYEVENTS SET LISTENER TO Form_1_Listener() OF Form_1 EVENTS WM_CREATE, WM_COPYDATA, WM_DESTROY |
| т.е. с централизованных команд в hmg, подискутировали на эту тему и пришли к выводу, что SET EVENTS FUNCTION TO MYEVENTS достаточно для всех хотелок
| |
|
|
| постоянный участник
|
Пост N: 5171
Зарегистрирован: 12.09.06
|
|
Отправлено: 12.11.16 22:16. Заголовок: Петр пишет: Андрей,..
Петр пишет: цитата: | Андрей, обратите внимание на мою реализацию и на обработку событий в вашем примере, кое-что там совешенно лишнее. |
| Не, для меня это пока слишком сложно, да и другим новичкам тоже. Хотя я уже года 3 как активно перевожу программу. Именно перевожу, разбираться как это работает очень сложно. Как всегда недостаток времени. Петр пишет: цитата: | Я надеюсь, что Андрей организовал хоть какую-то проверку целосности данных. |
| Как это сделать ? К вам большая просьба (я думаю и другие новички присоединятся) подправить правильно, то что я наваял ! Заранее спасибо за помощь ! Пример потом отправьте Григорию для включения в библиотеку. Пусть все пользуются.
| |
|
|
| постоянный участник
|
Пост N: 1330
Зарегистрирован: 09.10.06
|
|
Отправлено: 12.11.16 22:39. Заголовок: Andrey пишет: Не, д..
Andrey пишет: цитата: | Не, для меня это пока слишком сложно |
| Это проще паренной репы - если вы обработали сообщение в пользовательсом обработчике - верните значение отличное от 0 (например - 1), если нет, но подозреваете, что это сообщение нужно все таки отработать - вызовите стандартный HMG обработчик Events (припоминаете, что без этого у вас Labels перестали правильно отображаться?). У вас же обработка фактически состоялась и вы просто теряете время вызывая опять Events (Events о WM_COPYDATA ничего не знает). Andrey пишет: цитата: | К вам большая просьба (я думаю и другие новички присоединятся) подправить правильно, то что я наваял ! |
| Да не вопрос. ссылка на архив Проверка, конечно элементарная, но есть. Если Григорий захочет - пусть пример публикует, в принципе он же ваш. Только не нужно его COMM - называть (у меня, почему-то ассоциация с COM портом, хотя понимаю, что это communication), лучше IPC (Inter-process communication).
| |
|
|
| постоянный участник
|
Пост N: 1331
Зарегистрирован: 09.10.06
|
|
Отправлено: 12.11.16 22:52. Заголовок: SergKis пишет: SET ..
SergKis пишет: цитата: | SET EVENTS FUNCTION TO MYEVENTS достаточно для всех хотелок |
| Может быть, "но не все умеют их готовить"
| |
|
|
| постоянный участник
|
Пост N: 1299
Зарегистрирован: 17.02.12
|
|
Отправлено: 12.11.16 23:29. Заголовок: Петр пишет "но ..
Петр пишет цитата: | "но не все умеют их готовить" |
| Добавка команд в hmg, вряд ли научит "готовить", а код в hmg (не много) но добавиться.
| |
|
|
| постоянный участник
|
Пост N: 1332
Зарегистрирован: 09.10.06
|
|
Отправлено: 12.11.16 23:36. Заголовок: SergKis пишет: а ко..
SergKis пишет: цитата: | а код в hmg (не много) но добавиться. |
| Это хорошо или плохо?
| |
|
|
| постоянный участник
|
Пост N: 1300
Зарегистрирован: 17.02.12
|
|
Отправлено: 13.11.16 00:01. Заголовок: Петр пишет Это хорош..
Петр пишет Это (как всегда) с какой стороны смотреть ? Все относительно. Григорий постоянно оптимизирует либу, борется с лишними включениями. Замусорить легко, вычищать сложно. По нашей теме, на сегодня, новые команды\код, скорее излишества, как завтра будет ... посмотрим. Но это мое мнение.
| |
|
Ответов - 59
, стр:
1
2
3
All
[только новые]
|
|
|