Помощь - Поиск - Пользователи - Календарь
Полная версия: Проблема с кодировкой при печати
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
Neon6868
Необходимо при нажатии кнопки распечатать текст, находящийся в окне 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();
}

volvo
Цитата
Подскажите из-за чего она возникает.
Из-за того, что не выделил память под строку... Вот так:
  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;
}

ошибки не будет, но у меня создается впечатление, что все строки будут печататься строго в одном месте листа, и накладываться одна на другую...
Neon6868
При использовании этой строки
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  
---------------------------


Если перед ней поставить знак коментария, то ошибки нету.
volvo
Цитата
вылетает ошибка
У меня не вылетает, у тебя вылетает? Ну, тогда не знаю, что тебе сказать...
Neon6868
Все, разобрался. Ошибка появлялась почему-то при использовании функции OemToChar, но не из-за нее. Оказалось до этого был выход за пределы массива. smile.gif

volvo, Спасибо за помощь! smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.