Автор | Сообщение |
|
| постоянный участник
|
Пост N: 6477
Зарегистрирован: 12.09.06
|
|
Отправлено: 12.10.19 17:14. Заголовок: Совместное использование терминалки и МиниГуи ?
Использую совместно прогу на терминалке и прогу на МиниГуи. Базы оставил в RU866-кодировке. Терминалка экран тоже в RU866-кодировке. МиниГуи - тексты в RU1251 В терминалке в базе в текстовое поле пишу знак галочка "√" - CHR(251) В тексте для МиниГуи как сделать проверку этого поля на этот знак ? Достаточно ли будет: USE TEST ALIAS TEMP VIA 'DBFCDX' NEW CODEPAGE 'RU866' ? AT(CHR(251), TEMP->TRUBA ) > 0
|
|
|
Ответов - 18
[только новые]
|
|
|
| |
Пост N: 7112
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.10.19 23:07. Заголовок: Andrey пишет: В тер..
Andrey пишет: цитата: | В терминалке в базе в текстовое поле пишу знак галочка "√" - CHR(251) |
| Пиши "L" или "N" (я про тип поля) а в бровсе показывай галочку или что тебе надо , тогда и таких мега проверок увязанных с разницей кодировок делать не придется. А вообще тебе виднее
|
|
|
|
| постоянный участник
|
Пост N: 6479
Зарегистрирован: 12.09.06
|
|
Отправлено: 13.10.19 19:34. Заголовок: Я проверил, вроде ра..
Я проверил, вроде работает... cRet := TEMP->TRUBA IF AT(CHR(251),cRet) > 0 cRet := CharRepl(CHR(251),cRet,"#") ENDIF Т.е. для МиниГуи задачи знак галочка заменяю на "#" А как сделать замену для БД соединённых по SET RELATION. У меня 0 поле для терминалки внесены CHR(250), и при показе в базах юзер сразу видит, что колонки справочников не заполнены. Т.е. вот так в базе: Если базу показываешь на МиниГуи, то это выглядит так: Можно ли как то подменять это значение для SET RELATION ? Я раньше делал перекодировку для МиниГуи, но нужно совместно использовать базы - для терминалки и МиниГуи. Юзер не хочет пока переходить на новую программу, привык к терминалке и всё тут.
|
|
|
|
| постоянный участник
|
Пост N: 2942
Зарегистрирован: 17.02.12
|
|
Отправлено: 13.10.19 21:10. Заголовок: попробуй set relatio..
попробуй 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)
|
|
|
|
| постоянный участник
|
Пост N: 6480
Зарегистрирован: 12.09.06
|
|
Отправлено: 13.10.19 23:56. Заголовок: SergKis пишет: попр..
SergKis пишет: Спасибо !
|
|
|
|
| постоянный участник
|
Пост N: 6981
Зарегистрирован: 12.09.06
|
|
Отправлено: 10.07.21 12:27. Заголовок: А как можно получить..
А как можно получить хендл терминалки из самой терминалки ? Есть такая функция или нет ? Хочу из терминалки через SendMessage() вызывать функции из своей проги на МиниГуи.
|
|
|
|
| |
Пост N: 7407
Зарегистрирован: 17.05.05
|
|
Отправлено: 10.07.21 19:38. Заголовок: попробуй HB_GTI_WIN..
попробуй HB_GTI_WINHANDLE 69 /* Get console window low-level handle */
|
|
|
|
| постоянный участник
|
Пост N: 6982
Зарегистрирован: 12.09.06
|
|
Отправлено: 11.07.21 17:04. Заголовок: Dima пишет: попробу..
Dima пишет: Спасибо ! Нашёл функцию для хХарбора. Забыл его уже.... hWnd := GetForegroundWindow()
|
|
|
|
| |
Пост N: 7408
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.07.21 18:42. Заголовок: Andrey пишет: hWnd ..
Andrey пишет: цитата: | hWnd := GetForegroundWindow() |
| Точно , совсем забыл про нее , сам юзаю #pragma BEGINDUMP #include <windows.h> #include <hbapi.h> HB_FUNC (GETFOREGROUNDWINDOW) { HWND hWnd = GetForegroundWindow(); hb_retnl ((LONG) hWnd); } #pragma ENDDUMP
|
|
|
|
| постоянный участник
|
Пост N: 6984
Зарегистрирован: 12.09.06
|
|
Отправлено: 12.07.21 11:39. Заголовок: Засада с вызовом из ..
Засада с вызовом из терминалки хХарбора функций МиниГуи через SendMessage(). Окно на МиниГуи поднимается, а вот вызвать MsWord не получается, пишет ошибку: MS Word не доступен ! Ошибка: [ 0x8001010d ] Вот код: // Используем 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 Если вызывать это же окно из самого МиниГуи через SendMessage(), то ошибки нет ! Куда копать, чтобы заработал Word ?
|
|
|
|
| |
Пост N: 7410
Зарегистрирован: 17.05.05
|
|
Отправлено: 12.07.21 14:07. Заголовок: Andrey пишет: MS W..
Andrey пишет: цитата: | MS Word не доступен ! Ошибка: [ 0x8001010d ] |
| Это в терминалке Xharbour такое пишет ? Не в потоке (MT) случайно такой вызов стоит ? Несколько лет назад в потоке Harbour , точно не работал win_oleCreateObject и тоже была ошибка. Позже по тихому исправили. А Xharbour у тебя я так понимаю наидревнейший. А вот и тема http://clipper.borda.ru/?1-4-0-00000879-000-0-0-1374672857
|
|
|
|
| постоянный участник
|
Пост N: 6986
Зарегистрирован: 12.09.06
|
|
Отправлено: 12.07.21 17:35. Заголовок: Dima пишет: Это в т..
Dima пишет: цитата: | Это в терминалке Xharbour такое пишет ? Не в потоке (MT) случайно такой вызов стоит ? |
| Нет. Это хХарбор через SendMessage() поднимает окно ПЕЧАТИ в МиниГуи. А в этом окне кнопочка вызова Ворда. Вот она и не работает. Кстати прогу на МиниГуи собираю всегда с ключом -mt Вот через хХарбор и не запускается Ворд. Если сделать SendMessage() в самой проге на МиниГуи, то после поднятия окна ПЕЧАТИ в МиниГуи, кнопка вызова Ворда отрабатывет нормально. Т.е. Ворд поднимается через Олю и работает стабильно. Пытаюсь сейчас сделать проект на чистом Харборе из минигуи. Как в файле проекта Terminal.hbp указать ключи для сборки - Console mode ? Для батника знаю ключи compile.bat Terminal /c /nx Мне нужно для Terminal.hbp
|
|
|
|
|
| постоянный участник
|
Пост N: 6988
Зарегистрирован: 12.09.06
|
|
Отправлено: 12.07.21 21:04. Заголовок: Сделал проект где по..
Сделал проект где показывается такая ошибка ! https://cloud.mail.ru/public/w6Jp%2FgJ13qW1sp Т.е. при вызове из терминалки (окно вызывается само каждые 3 сек.) в окне печати не запускается Ворд ! Как это победить ? Не хочется делать отдельный ехе-ник.
|
|
|
|
| постоянный участник
|
Пост N: 3784
Зарегистрирован: 17.02.12
|
|
Отправлено: 13.07.21 20:38. Заголовок: Andrey пишет Как это..
Andrey пишет Примерно так (hmg модуль) ... :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 ...
|
|
|
|
| постоянный участник
|
Пост N: 6990
Зарегистрирован: 12.09.06
|
|
Отправлено: 14.07.21 10:42. Заголовок: SergKis пишет: Прим..
SergKis пишет: цитата: | Примерно так (hmg модуль) |
| Супер ! Спасибо БОЛЬШОЕ ! А почему через функцию не пошло ?
|
|
|
|
| постоянный участник
|
Пост N: 3785
Зарегистрирован: 17.02.12
|
|
Отправлено: 14.07.21 10:45. Заголовок: Andrey пишет А почем..
Andrey пишет цитата: | А почему через функцию не пошло ? |
| Ты функцией захватил обработчик событий и не отпускаешь его
|
|
|
|
| постоянный участник
|
Пост N: 6991
Зарегистрирован: 12.09.06
|
|
Отправлено: 14.07.21 10:50. Заголовок: SergKis пишет: Ты ф..
SergKis пишет: цитата: | Ты функцией захватил обработчик событий и не отпускаешь его |
| А для своего проекта тогда мне нужно на главной форме сделать ОТДЕЛЬНОЕ событие и работать через него ?
|
|
|
|
| постоянный участник
|
Пост N: 3786
Зарегистрирован: 17.02.12
|
|
Отправлено: 14.07.21 11:02. Заголовок: Да. И запуск notepad..
Да. И запуск notepad и др. внешние запуски, так же можно вынести туда и с любого места посылать сообщение главному окну с параметрами запуска (вместо cdata - строка может быть массив значений). Пример _wPost(20, "wMain", {nDataID, cData}) Из терминалки можешь посылать номер события, которое надо выполнить на главном окне и если событие с таким номером зарегистрировано на окне, оно выполнится
|
|
|
|
| постоянный участник
|
Пост N: 6993
Зарегистрирован: 12.09.06
|
|
Отправлено: 17.07.21 18:56. Заголовок: SergKis пишет: Из т..
SergKis пишет: цитата: | Из терминалки можешь посылать номер события, которое надо выполнить на главном окне и если событие с таким номером зарегистрировано на окне, оно выполнится |
| Мне больше нравится одно общее событие, допустим _wPost(111, "wMain", cData ), а там дальше уже буду разбирать что пришло.
|
|
|
|