Форум » [x]Harbour » Совместное использование терминалки и МиниГуи ? » Ответить

Совместное использование терминалки и МиниГуи ?

Andrey: Использую совместно прогу на терминалке и прогу на МиниГуи. Базы оставил в RU866-кодировке. Терминалка экран тоже в RU866-кодировке. МиниГуи - тексты в RU1251 В терминалке в базе в текстовое поле пишу знак галочка "√" - CHR(251) В тексте для МиниГуи как сделать проверку этого поля на этот знак ? Достаточно ли будет: [pre2]USE TEST ALIAS TEMP VIA 'DBFCDX' NEW CODEPAGE 'RU866' ? AT(CHR(251), TEMP->TRUBA ) > 0 [/pre2]

Ответов - 18

Dima: Andrey пишет: В терминалке в базе в текстовое поле пишу знак галочка "√" - CHR(251) Пиши "L" или "N" (я про тип поля) а в бровсе показывай галочку или что тебе надо , тогда и таких мега проверок увязанных с разницей кодировок делать не придется. А вообще тебе виднее

Andrey: Я проверил, вроде работает... cRet := TEMP->TRUBA IF AT(CHR(251),cRet) > 0 cRet := CharRepl(CHR(251),cRet,"#") ENDIF Т.е. для МиниГуи задачи знак галочка заменяю на "#" А как сделать замену для БД соединённых по SET RELATION. У меня 0 поле для терминалки внесены CHR(250), и при показе в базах юзер сразу видит, что колонки справочников не заполнены. Т.е. вот так в базе: Если базу показываешь на МиниГуи, то это выглядит так: Можно ли как то подменять это значение для SET RELATION ? Я раньше делал перекодировку для МиниГуи, но нужно совместно использовать базы - для терминалки и МиниГуи. Юзер не хочет пока переходить на новую программу, привык к терминалке и всё тут.

SergKis: попробуй[pre2] set relation to ky into my ... ? GetFldRelatC( 'my->TRUBA', "RU866" ) ... FUNC GetFldRelat( cFld, cdp ) Local cdpo := hb_cdpSelect( cdp ) Local cval := &cFld If chr(250) $ cval cval := StrTran( cval, chr(250), '?' ) EndIf hb_cdpSelect( cdpo ) RETURN hb_translate(cval, cdp, cdpo)[/pre2]


Andrey: SergKis пишет: попробуй Спасибо !

Andrey: А как можно получить хендл терминалки из самой терминалки ? Есть такая функция или нет ? Хочу из терминалки через SendMessage() вызывать функции из своей проги на МиниГуи.

Dima: попробуй HB_GTI_WINHANDLE 69 /* Get console window low-level handle */

Andrey: Dima пишет: попробуй Спасибо ! Нашёл функцию для хХарбора. Забыл его уже.... [pre2]hWnd := GetForegroundWindow()[/pre2]

Dima: Andrey пишет: hWnd := GetForegroundWindow() Точно , совсем забыл про нее , сам юзаю [pre2] #pragma BEGINDUMP #include <windows.h> #include <hbapi.h> HB_FUNC (GETFOREGROUNDWINDOW) { HWND hWnd = GetForegroundWindow(); hb_retnl ((LONG) hWnd); } #pragma ENDDUMP [/pre2]

Andrey: Засада с вызовом из терминалки хХарбора функций МиниГуи через SendMessage(). Окно на МиниГуи поднимается, а вот вызвать MsWord не получается, пишет ошибку: [pre2] MS Word не доступен ! Ошибка: [ 0x8001010d ][/pre2] Вот код: [pre2] // Используем Ole из HBWIN.lib IF ( oWord := win_oleCreateObject( "Word.Application" ) ) == NIL IF lLog cMsg := "MS Word не доступен ! Ошибка: " cMsg += " [ " + win_oleErrorText() + " ]" STRFILE( cMsg + CRLF, cFileLog,.T.) ENDIF RETURN Nil ENDIF[/pre2] Если вызывать это же окно из самого МиниГуи через SendMessage(), то ошибки нет ! Куда копать, чтобы заработал Word ?

Dima: Andrey пишет: MS Word не доступен ! Ошибка: [ 0x8001010d ] Это в терминалке Xharbour такое пишет ? Не в потоке (MT) случайно такой вызов стоит ? Несколько лет назад в потоке Harbour , точно не работал win_oleCreateObject и тоже была ошибка. Позже по тихому исправили. А Xharbour у тебя я так понимаю наидревнейший. А вот и тема http://clipper.borda.ru/?1-4-0-00000879-000-0-0-1374672857

Andrey: Dima пишет: Это в терминалке Xharbour такое пишет ? Не в потоке (MT) случайно такой вызов стоит ? Нет. Это хХарбор через SendMessage() поднимает окно ПЕЧАТИ в МиниГуи. А в этом окне кнопочка вызова Ворда. Вот она и не работает. Кстати прогу на МиниГуи собираю всегда с ключом -mt Вот через хХарбор и не запускается Ворд. Если сделать SendMessage() в самой проге на МиниГуи, то после поднятия окна ПЕЧАТИ в МиниГуи, кнопка вызова Ворда отрабатывет нормально. Т.е. Ворд поднимается через Олю и работает стабильно. Пытаюсь сейчас сделать проект на чистом Харборе из минигуи. Как в файле проекта Terminal.hbp указать ключи для сборки - Console mode ? Для батника знаю ключи compile.bat Terminal /c /nx Мне нужно для Terminal.hbp

Andrey: Сделал проект где показывается такая ошибка ! https://cloud.mail.ru/public/w6Jp%2FgJ13qW1sp Т.е. при вызове из терминалки (окно вызывается само каждые 3 сек.) в окне печати не запускается Ворд ! Как это победить ? Не хочется делать отдельный ехе-ник.

SergKis: Andrey пишет Как это победить ? Примерно так (hmg модуль)[pre2] ... :Event(20, {|ow,aR,cdata| This.Btn_Prn.Enabled := .F. ,; Darken2Open(wMain.Handle) ,; // Затенение на форме aR := Test_Prn(, cdata) ,; Darken2Close(wMain.Handle) ,; // Затенение на форме wMain.Btn_Prn.Enabled := .T. ,; ow:SetFocus('Label_0') } ) ... FUNCTION myApp_OnEvents( hHwnd, nMsg, wParam, lParam ) LOCAL cData, nDataID IF nMsg == WM_COPYDATA cData := GetMessageData( lParam, @nDataID ) DO EVENTS _wPost(20, "wMain", cData) //OnWmCopyData(cData) ENDIF // Затенение на форме / Darken -> overlay.cpp // OverlayWndProc(hHwnd, nMsg, wParam, lParam) RETURN Events( hHwnd, nMsg, wParam, lParam) ... FUNCTION Test_Prn(aDim, cData) LOCAL cTitle, aBackColor, cFont, nFontSize, cText, lBold LOCAL nI, nY, nX, nW, nH, nG, cN, aBtn, nBtnH, nBtnW, nFsize LOCAL cMsg := "" DEFAULT aDim := {}, cData := "" aBtn := {} // Menu name ExtFuncRun Icons AADD( aBtn, {"Menu for MS Word" , "MyTest(1)", "iBug48x1","iBug48x2"} ) AADD( aBtn, {"Menu for .log file" , "MyTest(2)", "iBug48x1","iBug48x2"} ) cTitle := "Test Menu for MS Word" cFont := 'Tahoma' ; nFontSize := 20 nY := nX := nG := 20 ; nW := 550 ; nH := 450 ; nBtnH := 56 aBackColor := { 118, 170, 235 } IF LEN(aDim) > 0 cMsg := " - call from " + APPCLIENT aBackColor := { 151, 0,160 } ENDIF IF !Empty(cData) ; cMsg += " "+cData ENDIF ... [/pre2]

Andrey: SergKis пишет: Примерно так (hmg модуль) Супер ! Спасибо БОЛЬШОЕ ! А почему через функцию не пошло ?

SergKis: Andrey пишет А почему через функцию не пошло ? Ты функцией захватил обработчик событий и не отпускаешь его

Andrey: SergKis пишет: Ты функцией захватил обработчик событий и не отпускаешь его А для своего проекта тогда мне нужно на главной форме сделать ОТДЕЛЬНОЕ событие и работать через него ?

SergKis: Да. И запуск notepad и др. внешние запуски, так же можно вынести туда и с любого места посылать сообщение главному окну с параметрами запуска (вместо cdata - строка может быть массив значений). Пример _wPost(20, "wMain", {nDataID, cData}) Из терминалки можешь посылать номер события, которое надо выполнить на главном окне и если событие с таким номером зарегистрировано на окне, оно выполнится

Andrey: SergKis пишет: Из терминалки можешь посылать номер события, которое надо выполнить на главном окне и если событие с таким номером зарегистрировано на окне, оно выполнится Мне больше нравится одно общее событие, допустим _wPost(111, "wMain", cData ), а там дальше уже буду разбирать что пришло.



полная версия страницы