Qreport и проблема с кодировкой...

Тема в разделе "Borland C++ Builder & Kylix", создана пользователем brink, 22 фев 2007.

  1. brink

    brink Гость

    Помогите решить проблему:
    В отчете использую band типа detail в него помещен QRDBText. Проблема в том, что его значение может составлять порядка 160 символов, что не вмещается в облати выводимого листа, как можно перенести на следующую строку текст, или может есть альтернативный способ?

    Есть еще одна проблема с отчетами:
    Входной dbf-файл формируется в FoxPro8 (по моему), таблица символов _866 кодировка (досовская типа), но если его, то есть dbf-файл выводить в отчет или открывать через Builder, то вместо букв - "кракозябры", пытался поиграть с настройками текстовых полей но ничего не получилось.

    Помогите, пожалуйста, вопрос очень важен!
     
  2. brink

    brink Гость

    С первым пунктом разобрался. Там все просто - получаешь в real-time значение Value, события OnPrint компоненты QRDBText и "лишние" символы переносиш ниже, например, в QRLabel :)

    А вот со вторым вопросом, думаю, там нужно этоже значение конвертировать в _win кодировку, но как? :)
     
  3. brink

    brink Гость

    Нашел решение проблемы - но оно для делфи, если кто может, помогите перевести на язык С, хотя б пару намеков, или может есть какойто аналог в С?

    Код (Text):
    procedure tform1.button1click(sender: tobject);
    var
    code1, code2: tcode;
    s: string;
    c: char;
    i: integer;
    chars: array [char] of char;
    str: array [tcode] of string;
    begin
    case combobox1.itemindex of
    1: code1 := koi;
    2: code1 := iso;
    3: code1 := dos;
    else code1 := win;
    end;
    case combobox2.itemindex of
    1: code2 := koi;
    2: code2 := iso;
    3: code2 := dos;
    else code2 := win;
    end;
    s := memo1.text;
    str[win] := 'АаБбВвГгДдЕеЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя';
    str[koi] := 'юЮаАбБцЦдДеЕфФгГхХиИйЙкКлЛмМнНоОпПяЯрРсСтТуУжЖвВьЬыЫзЗшШэЭщЩчЧъЪ';
    str[iso] := 'РрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯяа№бёвђгѓдєеѕжізїијйљкњлћмќн§оўпџ';
    str[dos] := 'Ђ ЃЎ‚ўѓЈ„¤…Ґ†¦‡§?Ё‰©ЉЄ‹"ЊЌЋ®ЏЇђа'б'в"г"де–ж—з?и™йљк›лњмќнћоџп';
    for c := #0 to #255 do
    chars[c] := c;
    for i := 1 to length(str[win]) do
    chars[str[code2][i]] := str[code1][i];
    for i := 1 to length(s) do
    s[i] := chars[s[i]];
    memo2.text := s;
    end;
     
  4. brink

    brink Гость

    !!!Нашел решение, все очень просто :ph34r:

    Код (Text):
    //из ДОС в Windows
    char* Decode_DOS_to_Win(char * str)
    {
    unsigned char *cstr=str;//"unsigned" - чтоб избежать предупреждений комп-ра
    for(; *cstr; cstr++)
    {
    if(*cstr>=128 && *cstr<=175)
    *cstr+=64;
    else
    if(*cstr>=224 && *cstr<=239)
    *cstr+=16;
    else if(*cstr==252)
    *cstr=185;
    }
    return str;
    }
    //----------------------------------------------------
    //из Windows в ДОС
    char* Decode_Win_to_DOS(char * str)
    {
    unsigned char *cstr=str;
    for(;*cstr;cstr++)
    {
    if(*cstr>=240)
    *cstr-=16;
    else if(*cstr>=192)
    *cstr-=64;
    else
    if(*cstr==185)
    *cstr=252;
    }
    return str;
    }
    //----------------------------------------------------
    Google - РУЛЕЗ :D
     
Загрузка...
Похожие Темы - Qreport проблема кодировкой
  1. c0de3r
    Ответов:
    5
    Просмотров:
    115
  2. DobermannTT
    Ответов:
    10
    Просмотров:
    132
  3. SoulPaladin
    Ответов:
    3
    Просмотров:
    120
  4. Artael
    Ответов:
    1
    Просмотров:
    109
  5. ENSLER
    Ответов:
    0
    Просмотров:
    102

Поделиться этой страницей