Я использую mapPutTextUnicode() для задания русских надписей. При этом некорректно происходит выравнивание, если в mapPutTextHorizontalAlign() параметр FA_CENTER или FA_RIGHT (особенно смещается FA_RIGHT).
Надпись ведет себя по-разному, если в ней есть пробел, английский символ или цифра в зависимости от их положения (в начале, середине или в конце надписи). Например:
" русскийтекст";
"русский текст"
"русскийтекст";
"Rusрусский";
"руссRusкий";
"русскийRus";
"123456русскийтекст";
"русский123текст"
"русскийтекст123"
Полностью английские надписи выравниваются нормально.
Пишу на astra linux 1.5.
Код |
---|
HMAP hMap = ui.DMapView1->GetMapHandle(); mapSetSiteTransparent(hMap, hMap, 60); HSITE hSite = mapCreateAndAppendTempSite(hMap, 0); HOBJ hObj1 = mapCreateSiteObject(hMap, hSite, IDDOUBLE2, 0); mapRegisterObject(hObj1, 71132230, LOCAL_POINT); // пальма mapAppendPointPlane(hObj1, 6162000, 7420000); // в той же точке что и текст для наглядности mapAppendSemantic(hObj1, 31001, "500", 20); // масштаб mapAppendSemantic(hObj1, 31002, "5646065", 20); // цвет mapCommitObject(hObj1); HOBJ hObj = mapCreateSiteObject(hMap, hSite, IDDOUBLE2, 0); mapSetObjectPress(hObj, 1); mapRegisterDrawObject(hObj, 0, LOCAL_TITLE); IMGTEXT textParm; memset(&textParm, 0, sizeof(IMGTEXT)); textParm.Color = RGB(0, 0, 0); textParm.BkgndColor = IMGC_TRANSPARENT; textParm.ShadowColor = RGB(255, 255, 255); textParm.Height = 4000; textParm.Weight = FW_NORMAL; textParm.Outline = 0; textParm.Interval = 255; textParm.Align = FA_MIDDLE; textParm.Service = 0; textParm.Wide = UNIW_NORMAL; textParm.Horizontal = 1; textParm.Italic = 0; textParm.Underline = 0; textParm.StrikeOut = 0; textParm.Type = 0; textParm.CharSet = RUSSIAN_CHARSET; textParm.Flag = 0; mapAppendDraw(hObj, IMG_TEXT, reinterpret_cast<const char *>(&textParm)); QTextCodec::setCodecForTr(QTextCodec::codecForName("KOI8-R")); QString text = tr("русскийтекст"); mapPutTextUnicode(hObj, reinterpret_cast<const WCHAR *>(text.constData()), 0); mapPutTextVerticalAlign(hObj, FA_MIDDLE, 0); mapPutTextHorizontalAlign(hObj, FA_CENTER, 0); mapAppendPointPlane(hObj, 6162000, 7420000); mapCommitObject(hObj); |
" русскийтекст";
"русский текст"
"русскийтекст";
"Rusрусский";
"руссRusкий";
"русскийRus";
"123456русскийтекст";
"русский123текст"
"русскийтекст123"
Полностью английские надписи выравниваются нормально.
Пишу на astra linux 1.5.