Форум » GUI » Переход с BCC 5.5 на BCC 5.8 и BCC 7.30 » Ответить

Переход с BCC 5.5 на BCC 5.8 и BCC 7.30

Andrey: Что то непонятки пошли в новом компиляторе. Собираю часть проекта и линкую основную библиотеку. Выдаёт теперь ошибку сборки, а как исправить не знаю: Turbo Incremental Link 5.69 Copyright (c) 1997-2005 Borland Error: Unresolved external 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >::__nullref' referenced from D:\TEMP\TEST\TBRW_TABLE2.LIB|overlay Error: Unresolved external 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >::__getRep(unsigned int, unsigned int)' referenced from D:\TEMP\TEST\TBRW_TABLE2.LIB|overlay Error: Unresolved external '__rwstd::__rw_stdexcept_BadAllocException' referenced from D:\TEMP\TEST\TBRW_TABLE2.LIB|overlay Error: Unresolved external '__rwstd::__rw_stdexcept_NoNamedException' referenced from D:\TEMP\TEST\TBRW_TABLE2.LIB|overlay Error: Unresolved external '__rwstd::rwse_OutOfRange' referenced from D:\TEMP\TEST\TBRW_TABLE2.LIB|overlay Error: Unresolved external '__rwstd::except_msg_string::except_msg_string(const char *, ...)' referenced from D:\TEMP\TEST\TBRW_TABLE2.LIB|overlay Error: Unresolved external 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string<char, std::char_traits<char>, std::allocator<char> >(const char *, const std::allocator<char>&)' referenced from D:\TEMP\TEST\TBRW_TABLE2.LIB|overlay hbmk2[form_Zaivka]: Error: Running linker. 2 Файл overlay.cpp в библиотеке Tbrw_Table2.lib прекрасно работал под BCC 5.51 А в 5.8 что-то конфликтует... Как быть ?

Ответов - 91, стр: 1 2 3 4 5 All

Andrey: SergKis пишет: но это надо пробовать. Попробовал... Хрень получается. Месяца и недели правильно выходят, но окно тогда остаётся в той кодировке, какое первое окно открыли. Т.е. смена кодировки окна не происходит.

SergKis: Andrey пишет Месяца и недели правильно выходят, но окно тогда остаётся в той кодировке, какое первое окно открыли. Т.е. смена кодировки окна не происходит. Надо для каждого языка свое окно, т.к. на нем и в контролах надо исп. свой языковый фонт при создании, т.е. для RU1251 свое окно, для UA1251 свое

Andrey: SergKis пишет: Надо для каждого языка свое окно, т.к. на нем и в контролах надо исп. свой языковый фонт при создании, т.е. для RU1251 свое окно, для UA1251 свое Так я это и делаю. Только если оба окна поднять и переключаться между ними, то язык не переключается !!! Выслал пример к тебе.


Andrey: SergKis пишет: Для hb данных при переключении на яз. окно ставить свой hb_CdpSelect(...) ..., но это надо пробовать. Это понятно что нужно ставить. Непонятно другое !!! Сделал проверку в TsbViewer.prg: [pre2]FUNCTION myLangRecover(cAlias,cSetCP,cSelCdp,cLngSel) LOCAL aMonth, nI aMonth := Array(12) FOR nI := 1 TO 12 aMonth[nI] := " " + LOWER( NTOCMONTH( nI ) ) + " " NEXT ? ProcNL(), cAlias,cSetCP,cSelCdp,cLngSel, hb_valtoexp(aMonth) // строка 447 DO EVENTS hb_SetCodepage(cSetCP) hb_CdpSelect(cSelCdp) hb_LangSelect(cLngSel) IF LEN(cAlias) > 0 IF ( Select( cAlias ) > 0 ) dbSelectArea( cAlias ) ENDIF ENDIF ? ProcNL(), hb_SetCodepage(), hb_CdpSelect(), hb_LangSelect() // строка 459 aMonth := Array(12) FOR nI := 1 TO 12 aMonth[nI] := " " + LOWER( NTOCMONTH( nI ) ) + " " NEXT ?? hb_valtoexp(aMonth) DO EVENTS RETURN NIL[/pre2] При первом входе в эту функцию месяца правильные, потом фигню выдают. Почему ? Что ещё надо для правильного переключения языка ? Почему ломается вывод месяцов на одном и том же языке - RU1251 ? Такой же результат будет и в отдельном примере !

SergKis: Andrey Смотри внимательно 1 строка hb_LangSelect() => ru.RU1251 2 строка hb_LangSelect() => ru.RU1251.RU1251 смотри ф-ю hb_LangSelect() https://github.com/Petewg/harbour-core/wiki/hb_L и задавай параметры правильно, т.е. hb_LangSelect("ru") или hb_LangSelect( , "RU1251") Почему ломается вывод месяцов на одном и том же языке - RU1251 ? Потому и ломается

Andrey: SergKis пишет: и задавай параметры правильно Сделал, всё равно НЕ РАБОТАЕТ !!! Отдельный пример к тебе положил.

SergKis: Andrey пишет Сделал, всё равно НЕ РАБОТАЕТ !!! в примере НЕ РАБОТАЕТ повтор вызова языка Разовая уст. языка (по списку) работает. Пример [pre2] /* * MINIGUI - Harbour Win32 GUI library Demo * */ #define _HMG_OUTLOG #define PROGRAM "Windows with different languages" #include "hmg.ch" REQUEST HB_CODEPAGE_RU1251, HB_CODEPAGE_RU866 // русский язык REQUEST HB_CODEPAGE_UA1251, HB_CODEPAGE_UA866 // украинский язык REQUEST HB_LANG_BEWIN // белорусский язык /////////////////////////////////////////////////////////////////// INIT PROCEDURE Sets_EVN() LOCAL cFont := "DejaVu Sans Mono", nSize := 14 LOCAL cLog := "_msg.log" SET CODEPAGE TO RUSSIAN SET LANGUAGE TO RUSSIAN SET DATE TO GERMAN // это и есть SET DATE FORMAT "DD.MM.YYYY" SET EPOCH TO 2000 SET EXACT ON SET SOFTSEEK ON SET CENTURY ON // ООП используем SET OOP ON // new log filename for debug output _SetGetLogFile( cLog ) ; DELETEFILE(cLog) // основной Default фонт программы SET FONT TO cFont, nSize // фонт для HMG_Alert() и Alert...() ф-ий DEFINE FONT DlgFont FONTNAME cFont SIZE nSize RETURN /////////////////////////////////////////////////////////////////// PROCEDURE Main(...) LOCAL i FOR i := 0 TO 6 mySetLang( i ) NEXT Return FUNCTION mySetLang(nVal) LOCAL cSetCP, cSelCdp, cLngSel LOCAL o, cTmp, oIniLang, cIniLang IF nVal == 0 SET CODEPAGE TO ENGLISH SET LANGUAGE TO ENGLISH ELSEIF nVal == 1 SET CODEPAGE TO RUSSIAN SET LANGUAGE TO RUSSIAN ELSEIF nVal == 2 SET CODEPAGE TO UKRAINIAN SET LANGUAGE TO UKRAINIAN ELSEIF nVal == 3 SET LANGUAGE TO BYELORUSSIAN ELSEIF nVal == 4 SET CODEPAGE TO GERMAN SET LANGUAGE TO GERMAN ELSEIF nVal == 5 SET CODEPAGE TO SPANISH SET LANGUAGE TO SPANISH ELSEIF nVal == 6 SET CODEPAGE TO ITALIAN SET LANGUAGE TO ITALIAN ENDIF cSetCP := hb_SetCodepage() cSelCdp := hb_CdpSelect() cLngSel := hb_LangSelect() IF "be." $ cLngSel ; cTmp := lower("BEWIN") ELSE ; cTmp := lower(cSelCdp) ENDIF // --- Создадим ini языковый в .\RES, если ini нет cIniLang := ".\_" + cTmp + ".ini" IF ! hb_FileExists( cIniLang ) oIniLang := TIniData():New( , .T., .T. ) oIniLang:cIni := cIniLang o := oIniLang o:cCommentBegin := hb_LangName() o:cMonth := oHmgData() // [CMONTH] секция FOR nI := 1 TO 12 o:cMonth:Set( StrZero(nI, 2), lower( NTOCMONTH( nI ) ) ) NEXT o:cDow := oHmgData() // [CDOW] секция FOR nI := 1 TO 7 o:cDow:Set( hb_ntos(nI), lower( NTOCDOW( nI ) ) ) NEXT o:Write() ENDIF RETURN Nil [/pre2]

Andrey: SergKis пишет: Разовая уст. языка (по списку) работает. Да ! А потом при нажатии на форме доп.кнопок, меню и т.д. - НЕ РАБОТАЕТ ! Окно же не последнее, много чего потом делать нужно будет.

SergKis: Andrey Посмотри мой пример, сначала ставится[pre2] INIT PROCEDURE Sets_EVN() LOCAL cFont := "DejaVu Sans Mono", nSize := 14 LOCAL cLog := "_msg.log" SET CODEPAGE TO RUSSIAN SET LANGUAGE TO RUSSIAN ... потом повторно ставится FUNCTION mySetLang(nVal) LOCAL cSetCP, cSelCdp, cLngSel LOCAL o, cTmp, oIniLang, cIniLang IF nVal == 0 SET CODEPAGE TO ENGLISH SET LANGUAGE TO ENGLISH ELSEIF nVal == 1 SET CODEPAGE TO RUSSIAN SET LANGUAGE TO RUSSIAN ELSEIF nVal == 2 ...[/pre2] получаемый _ru1251.ini секции и данные в них правильные. А потом при нажатии на форме доп.кнопок, меню и т.д. - НЕ РАБОТАЕТ ! Думаю, оконный интерфейс по языку в однобайтовой сборке hmg должен действовать на всю программу, т.е. "новый" язык новый запуск exe с установкой этого языка.

Andrey: SergKis пишет: Думаю, оконный интерфейс по языку в однобайтовой сборке hmg должен действовать на всю программу, т.е. "новый" язык новый запуск exe с установкой этого языка. Конечно согласен с этим, но мне всегда хочется чуток расширить границы... и универсальности ... Допустим в моей большой программе нужно использовать печать на украинском языке в отдельном окне. Можно указать явно языки, тогда в окне месяца правильно показываются, НО если использовать НЕ MODAL окно для этого, то возможна потеря языка в основной программе.

SergKis: Andrey пишет Можно указать явно языки, тогда в окне месяца правильно показываются, НО если использовать НЕ MODAL окно для этого, то возможна потеря языка в основной программе. Используй для этих нескольких окон запуск своего же exe с параметром nMode > 0, Будет аналог STANDARD и ставишь нужный язык и голова не болит



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