IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Проблема с кодировкой при печати, С++ Builder 6
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 146
Пол: Мужской

Репутация: -  0  +


Необходимо при нажатии кнопки распечатать текст, находящийся в окне Memo. Проблема в том, что текст этот в кодировке DOS.
После распечатывания таким способом
   int lines_kol = Memo1->Lines->Count;
TPrinter *Prntr = Printer();
TRect r = TRect(200, 200, Prntr->PageWidth - 200, Prntr->PageHeight - 200);
Prntr->BeginDoc();
Prntr->Canvas->TextRect(r, 200, 200,Memo1->Lines->Text);
Prntr->EndDoc();

вместо русских букв печатаются иероглифы.

Пробую изменить кодировку текста, но после запуска программы вылетает непонятная ошибка. Подскажите из-за чего она возникает.
void __fastcall TForm1::Button3Click(TObject *Sender)
{
int lines_kol = Memo1->Lines->Count;
TPrinter *Prntr = Printer();
TRect r = TRect(200, 200, Prntr->PageWidth - 200, Prntr->PageHeight - 200);
Prntr->BeginDoc();
for(int i = 0; i < lines_kol; i++)
{
char *newstr;
AnsiString st=Memo1->Lines->Strings[i];
OemToChar(st.c_str(),newstr);
Prntr->Canvas->TextRect(r, 200, 200,AnsiString(newstr));

}
Prntr->EndDoc();
}



Сообщение отредактировано: Neon6868 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
Подскажите из-за чего она возникает.
Из-за того, что не выделил память под строку... Вот так:
  for(int i = 0; i < lines_kol; i++)
{
AnsiString st=Memo1->Lines->Strings[i];
char *newstr = new char[st.Length() + 1];

OemToChar(st.c_str(),newstr);
Prntr->Canvas->TextRect(r, 200, 200, AnsiString(newstr));
delete newstr;
}

ошибки не будет, но у меня создается впечатление, что все строки будут печататься строго в одном месте листа, и накладываться одна на другую...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 146
Пол: Мужской

Репутация: -  0  +


При использовании этой строки
OemToChar(st.c_str(),newstr);
вылетает ошибка
Код
---------------------------
Information
---------------------------
Project G:\Documents and Settings\Владелец\Рабочий стол\POISK\Project2.exe faulted with message: 'access violation at 0x7c92ab1b: write of address 0x00030ffc'. Process Stopped. Use Step or Run to continue.
---------------------------
OK  
---------------------------


Если перед ней поставить знак коментария, то ошибки нету.

Сообщение отредактировано: Neon6868 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
вылетает ошибка
У меня не вылетает, у тебя вылетает? Ну, тогда не знаю, что тебе сказать...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Пионер
**

Группа: Пользователи
Сообщений: 146
Пол: Мужской

Репутация: -  0  +


Все, разобрался. Ошибка появлялась почему-то при использовании функции OemToChar, но не из-за нее. Оказалось до этого был выход за пределы массива. smile.gif

volvo, Спасибо за помощь! smile.gif

Сообщение отредактировано: Neon6868 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 3.05.2024 18:18
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name