1. Уважаемые участники и гости, 19 октября codeby будет работать в режиме "Только чтение". Регистрация новых участников будет закрыта. 20 октября портал продолжит работу в прежнем режиме.

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

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

  1. brink

    brink Гость

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

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

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

    brink Гость

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

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

    brink Гость

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

    Код:
    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 Гость

    Репутация:
    0
    !!!Нашел решение, все очень просто :ph34r:

    Код:
    //из ДОС в 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. pack
    Ответов:
    5
    Просмотров:
    47
  2. Alex1994
    Ответов:
    7
    Просмотров:
    106
  3. PingvinPingvin
    Ответов:
    10
    Просмотров:
    113
  4. Free2playman
    Ответов:
    14
    Просмотров:
    136
  5. Дмитрий17
    Ответов:
    10
    Просмотров:
    193

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