Форум » GUI » IDE8 » Ответить

IDE8

Новичок: Можете на простом примере показать: 1. На примере TEXTBOX вводились символы UTF8 2. На примере LABEL - соответственно выводились

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

alkresin: ММК пишет: Если делается не разовое латание дыр, не курсавая то используйте FiveWin. Вообще-то, вы только-что сказали, что продукт труда большинства здесь присутствующих - это уровень "курсавых". Хочется надеяться, что это оговорка сгоряча, в пылу спора, но все же надо как-то следить за языком. Если по сути, Fivewin, безусловно, солидный продукт с уже более чем 25-летней историей, и набор функций его Windows-версии, несомненно, выше, чем у всех других Harbour GUI-библиотек. Но окошки и "контролы" он делает те же самые и качество конечных приложений зависит не от используемого GUI, а от разработчика.

rvu: SergKis пишет: DEFINE FONT Arial FONTNAME App.FontName SIZE App.FontSize CHARSET 186 // BALTIC_CHARSET DEFINE FONT ArialBold FONTNAME App.FontName SIZE App.FontSize BOLD CHARSET 186 // BALTIC_CHARSET DEFINE FONT ArialRu FONTNAME App.FontName SIZE App.FontSize CHARSET 204 // RUSSIUN_CHARSET DEFINE FONT ArialRuBold FONTNAME App.FontName SIZE App.FontSize BOLD CHARSET 204 // RUSSIUN_CHARSET ... @ 10,10 TEXTBOX text_1 HEIGHT 24 WIDTH 200 ; FONT 'ArialRu' SIZE 10 MAXLENGTH 30 ; ON CHANGE ( This.label_1.Value := This.Value ) @ 40,10 LABEL label_1 WIDTH 200 HEIGHT 24 VALUE space(30) ; FONT 'ArialRu' Если я так определю фонты - DEFINE FONT Arial FONTNAME App.FontName SIZE App.FontSize CHARSET 204 // RUSSIUN_CHARSET DEFINE FONT ArialLa FONTNAME App.FontName SIZE App.FontSize CHARSET 186 // BALTIC_CHARSET то могу потом писать так? - @ 40,10 LABEL LABEL_002 WIDTH 1000 VALUE probatxt FONT 'ArialLa' У меня не получается. В probatxt загнал латвийское слово, на выходе получил обычный кракозябр вместо š. Или чего-то не хватает или я вообще что-то делаю не так.

SergKis: rvu пишет В probatxt загнал латвийское слово, на выходе получил обычный кракозябр вместо š. Надо убедиться, что в файле именно лат. кодировка одна из 2х (в hb добавились, ранее и не было) HB_CODEPAGE_LV775 - Dos кодировка HB_CODEPAGE_LVWIN - Windows кодировка т.е. REQUEST HB_CODEPAGE_SVWIN ; HB_CDPSELECT( "LVWIN" ) или REQUEST HB_CODEPAGE_SVWIN ; HB_CDPSELECT( "LV755" ) и AlertInfo(hb_memoread(".\proba.txt")) дадут показ лат. слова или не дадут Я забросил пробы с языками в тек. версии hmg и вернулся к старой unucode версии, т.к. в наших базах реально пишут фразы со смешанными словами на языках, т.е. часть на лат., часть на рус. - чего больше зависит от того, к примеру, для кого вых. форма. Пример, ранее представленный, работал только с тсб, где фонты исп. по handle. До Label у меня дело не дошло. Попробуйте вариант выше, по идее должен получится


SergKis: SergKis пишет REQUEST HB_CODEPAGE_SVWIN Сори, не исправил после copy+paste, надо REQUEST HB_CODEPAGE_LVWIN REQUEST HB_CODEPAGE_LV775 ; HB_CDPSELECT( "LV775" )

rvu: SergKis пишет: и вернулся к старой unucode версии Т.е. она не на Минигуи?

rvu: SergKis пишет: надо REQUEST HB_CODEPAGE_LVWIN REQUEST HB_CODEPAGE_LV775 ; HB_CDPSELECT( "LV775" ) Вот интересно, у меня программа с русскими надписями, написана в кодировке 1251, убрал то, что у меня было, вставил латвийскую, т.е. так: REQUEST HB_CODEPAGE_LVWIN *SET LANGUAGE TO RUSSIAN *SET CODEPAGE TO RUSSIAN И ничего не изменилось. Надо кодировку самого текста программы менять? Или что делать?

SergKis: rvu посмотрите i_lang.ch #translate SET LANGUAGE TO RUSSIAN => _HMG_LANG_ID := ' ' ; REQUEST HB_LANG_RU ; HB_LANGSELECT( "RU" ) ; InitMessages() ... #translate SET LANGUAGE TO RUSSIAN => _HMG_LANG_ID := ' ' ; REQUEST HB_LANG_RUWIN ; HB_LANGSELECT( "RUWIN" ) ; InitMessages() ... #ifdef __XHARBOUR__ #translate SET CODEPAGE TO RUSSIAN => REQUEST HB_CODEPAGE_RUWIN ; HB_CDPSELECT( "RUWIN" ) #else #translate SET CODEPAGE TO RUSSIAN => REQUEST HB_CODEPAGE_RU1251 ; HB_CDPSELECT( "RU1251" ) #endif для лат. надо аналогично REQUEST HB_CODEPAGE_LVWIN, HB_LANG_LVWIN ... _HMG_LANG_ID := ' ' HB_LANGSELECT( "LVWIN" ) HB_CDPSELECT( "LVWIN" ) ...

SergKis: PS Это должна быть кодировка 1257

rvu: SergKis Ну хорошо, допустим, я сделаю программу в латвийской кодировке и смогу сделать в ней русский контрол. Хотя у меня задача в русской программе сделать иноязычные контролы, в первую очередь немецкий. Поэтому и старался в 1251 вписывать другие фонты. SergKis пишет: Все тексты программ проектов, т.к. не было редактора с LV866, в utf8 Может быть текст самой программы надо с 1251 в utf8 перевести? А вся контролы, в т.ч. и русский делать фонтами, как у вас?

SergKis: rvu пишет Может быть текст самой программы надо с 1251 в utf8 перевести? Не получится, скорее всего, hb+hmg однобайтные. С лат. яз. не получается, т.к. валится Error BASE/1303 Argument error: __HB_LANGSELECT Args: [1] = C LVWIN.RU1251 Текст prg такой (файл "test.txt" utf-8 кодировка с BOM)[pre2] REQUEST HB_CODEPAGE_LVWIN #include "hmg.ch" FUNCTION Main() Local cFile := "test.txt", cTxt, cBuf //SET CODEPAGE TO RUSSIAN //SET LANGUAGE TO RUSSIAN //DEFINE FONT DlgFont FONTNAME "Tahoma" SIZE 16 CHARSET 186 // BALTIC_CHARSET HB_LANGSELECT( "LVWIN" ) // валится тут HB_CDPSELECT ( "LVWIN" ) cBuf := hb_memoread(cFile) cTxt := hb_StrToUtf8(subs(cBuf, 4)) AlertInfo( cTxt ) Return [/pre2] т.е. прочитать лат. яз текст такой (в utf-8) NEMATERIĀLIE IEGULDĪJUMI NEMAT.IEG.VĒRT.NORAKST.DAĻA ĒKAS, BŪVES, ZEMES GABALI PAMAATLĪDZEKĻI перевести в lvwin и показать => не выходит. Попробуйте с немецким[pre2] SET LANGUAGE TO GERMAN SET CODEPAGE TO GERMAN cBuf := hb_memoread(cFile) cTxt := hb_StrToUtf8(subs(cBuf, 4)) // или текст на немецком не в utf-8 возьмите AlertInfo( cTxt ) [/pre2] Если получится, тогда пробуйте с charset и russian установкой

SergKis: SergKis пишет Если получится, тогда пробуйте с charset и russian установкой Вот что получилось[pre2] REQUEST HB_CODEPAGE_RU1251 #include "hmg.ch" FUNCTION Main() Local cFile := "test.ru", cTxt, cBuf SET CODEPAGE TO GERMAN //RUSSIAN SET LANGUAGE TO GERMAN //RUSSIAN DEFINE FONT DlgFont FONTNAME "Tahoma" SIZE 16 CHARSET 204 // RUSSIAN_CHARSET //DEFINE FONT DlgFont FONTNAME "Tahoma" SIZE 16 cBuf := hb_memoread(cFile) cTxt := hb_Utf8ToStr(subs(cBuf, 4), "RU1251" ) //cTxt := hb_Utf8ToStr(subs(cBuf, 4) ) AlertInfo( cTxt + CRLF + "CDP = "+hb_CdpSelect() ) Return Файл test.ru кодировка utf8 с BOM, содеримое Привет ! Проба текста RU1251. [/pre2]

rvu: А чтобы показать немецкий текст я должен написать что-то, типа этого? - Пишу по аналогии: Local cFileDE := "test.de", cTxtDE, cBufDE cBufDE := hb_memoread(cFileDE) cTxtDE := hb_Utf8ToStr(cBufDE,'DEWIN' ) AlertInfo(cTxtDE) В файле test.de - über die Straße Но это не работает. Вместо ü русский ь. Вместо ß русское Я.

rvu: SergKis пишет: Может быть текст самой программы надо с 1251 в utf8 перевести? Не получится, скорее всего, hb+hmg однобайтные. Текст программы записал в utf8. А для чего у вас стоит REQUEST HB_CODEPAGE_RU1251? Изменил на REQUEST HB_CODEPAGE_DEWIN, ничего не изменилось. Вообще такое ощущение, что программа у меня только с русским языком дружит: SET CODEPAGE TO SPANISH SET LANGUAGE TO SPANISH AlertInfo(hb_Utf8ToStr('Ññ',"ESWIN")) // неправильно показывает AlertInfo(hb_Utf8ToStr('Проба текста',"RU1251")) // всё работает

SergKis: rvu пишет Текст программы записал в utf8. hb в hmg поставке однобайтный, думаете он понимает prg в utf8 ? У меня тексты языковые вынесены вне текстов prg и в кодировке utf8, вся работа в dos кодировке lv866, содержит 3и языка. До редактора hdedit (своя сборка с lv866) prg были для akelpad в utf8, прогр. проекта для сборки перекодировала в однобайтный вариант (в каталог сборки) и потом работает сборка hb. Такая схема с версии hb 2.0 работала. В hb 3.2 сборка unicode понимает, вроде, prg с utf8 и bom, а однобайтная не знаю, может и не понимать, т.к. надо осн. язык перекодировки указывать. Вообще такое ощущение, что программа у меня только с русским языком дружит: Вроде как система должна быть на этом языке (DEWIN). Такая х...та с работой в однобайтных системах была всегда Т.е. она не на Минигуи? Рабочая наша версия это hb 3.2 unicode + MiniGui 4.07 (версия 2012 г) unicode - товарищ по работе перевел. hb_cdpSelect("LV866") ; hb_setTermCP("LV866") такая установка во всех function main Немецкий не подключали, не нужен, а EN, LV, RU в пост. работе

SergKis: PS "MiniGui 4.07 (версия 2012 г) unicode" переведены только контролы, печать и др. не переводились, т.к. печать, pdf, mail, excel остались в VO 2.7, т.к. она также в unicode переведена была товарищем ~ в 2003 г.

SergKis: PS2 В том примере с[pre2] DEFINE FONT Arial FONTNAME App.FontName SIZE App.FontSize CHARSET 186 // BALTIC_CHARSET DEFINE FONT ArialBold FONTNAME App.FontName SIZE App.FontSize BOLD CHARSET 186 // BALTIC_CHARSET DEFINE FONT ArialRu FONTNAME App.FontName SIZE App.FontSize CHARSET 204 // RUSSIUN_CHARSET DEFINE FONT ArialRuBold FONTNAME App.FontName SIZE App.FontSize BOLD CHARSET 204 // RUSSIUN_CHARSET[/pre2] я попробовал в тсб показать файл в dos lv866 кодировке, система и prg RU1251 и BALTIC_CHARSET у фонта - получилось показать, ввод с клавиатуры лат. языка и др. контролы (наверно не поймут) я не пробовал. По идее система и prg DEWIN и RUSSIAN_CHARSET тсб так же отработает, а остальные контролы скорее нет, чем да. Т.е. язык системы ставим в hmg и работаем, как то так должно быть. Для вашей ситуации надо как минимум hb в unicode + VWT или VWG (тут были контролы windows какие то) и prg, базы в utf8 или взять HwGui собрать unicode вариант, там было и пробовать

rvu: Спасибо за советы! Буду пробовать дальше. SergKis пишет: ввод с клавиатуры лат. языка и др. контролы (наверно не поймут) я не пробовал. Не понял, у вас же работают с двумя языками. Я думал, их и вводят в какие-то поля при необходимости. Но у вас вообще беда, ведь могут быть тексты на смеси языков, как вы с ними без utf работаете не представляю. SergKis пишет: базы в utf8 Базы-то у меня изначально в utf.

SergKis: rvu пишет Не понял, у вас же работают с двумя языками. Я думал, их и вводят в какие-то поля при необходимости Да, есть базы, где языки разделены (условно) по разным полям, но никто не мешает вводить смешано в одно поле. Для примера взял именно такую базу. 1. Проверить тсб (это не стандартный контрол windows) и он правильно отобразил строки с разным языком. 2. Т.к. в hmg 4.07 тсб версии 7.0, а в тек. версии 9.0 и более стабильно работающая и др. контролы более продвинуты, были мысли использовать интерфейс для windows лат. версии LVWIN кодировку (1257), для windows рус. версии RUSSIAN (1251). Перевод на unicod тек. версии, были попытки, но слишком много текста стало и не успевали за версией, т.е. отложили на когда то. Но у вас вообще беда, ведь могут быть тексты на смеси языков, как вы с ними без utf работаете не представляю. Вообще то все оч. просто dbf как были в clipper LV866 dos кодировка (это аналог ru866, в которой некоторые символы псевдографики заменены лат. буквами) так и остались (для VO так же все). В hb unicode сборку добавлена такая таблица в список codepage по правилам harbour. В windows language 3и языка (можно больше). Др. язык можно в базу lv866 писать как utf8, если что

rvu: Нашел пример с португальским меню: C:\MiniGUI\SAMPLES\Advanced\DriveMapping\ У меня оно неверно показывается. Язык, естественно в тексте меняю. Там английский стоит по умолчанию, а португальский закомментарен. Всячески игрался с настройками, ничего не вышло. Попробовал сделать ошибки и посмотреть сообщения. Вообще чуднО выдает. Вместо parametros пишет parŕmetros. В примере: C:\MiniGUI\SAMPLES\Applications\Biorhythm\ польский, португальский, словенский неверно показываются.

SergKis: rvu пишет польский, португальский, словенский неверно показываются. Все правильно так и должно быть у вас русский windows и др. языки будут искажаться на ерунду. MiniGui (hmg) однобайтная система программирования (не unicod контролы). Я, наверно, плохо объяснил. Для каждого языка должна быть система windows на этом языке и в программе уст. язык системы windows, т.е. Для польского система windows должна быть на польском и в hmg prg файле ставим работу на польском. Для португальского система windows должна быть на португальском и в hmg prg файле ставим работу на португальском. Для немецкого система windows должна быть на немецком и в hmg prg файле ставим работу на немецком. И т.д. Тогда будет в программе английский и язык системы. Тсб не стандартный контрол windows (самопал), потому в нем получилось отображение языка по hardset, но ввод данных не пройдет. Если бы hmg была переведена в unicod и hb собран unicode было бы все ok для такого комплекта. Повторю Для вашей ситуации надо как минимум hb в unicode + VWT или VWG (тут были контролы windows какие то) и prg, базы в utf8 или взять HwGui собрать unicode вариант, там было и пробовать



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