У меня есть программа, которая больше не работает (продолжение)
#ifdef DEBUG_PRINTER
//---------------------------------------------------------------------------
void __fastcall LogDebugTxt(AnsiString Txt)
{
если (!FileExists("D:\AGBdebug.txt"))
DebugHandle = Мастер Создания Файлов("D:\AGBdebug.txt");
еще
DebugHandle = FileOpen("D:\AGBdebug.txt",fmOpenReadWrite);
FileSeek(DebugHandle,0,2);
FileWrite(DebugHandle,Txt.c_str(),Txt.Length());
// если (файл*. txt По != '\Н')
FileWrite(DebugHandle,"\r\n",2);
FileClose(DebugHandle);
}
#endif
//---------------------------------------------------------------------------
AnsiString __fastcall GetPrinterName()
{
int pi = Printer()->PrinterIndex;
#ifdef DEBUG_PRINTER
LogDebugTxt(NowtStr);
LogDebugTxt("запуск отладочного теста");
LogDebugTxt("----------------");
TStrings* prns = Printer()->принтеры;
LogDebugTxt("PrinterCount =" + AnsiString(prns->Count));
LogDebugTxt("PrinterIndex =" + IntToStr(pi));
LogDebugTxt(NowtStr);
LogDebugTxt("получить массив строк принтера");
s_Bfr = Printer()->принтеры[0].С текстом();
LogDebugTxt(NowtStr);
LogDebugTxt("список содержимого массива");
LogDebugTxt("--- начало списка ---");
LogDebugTxt(s_Bfr);
LogDebugTxt("--- конец списка ---");
LogDebugTxt(NowtStr);
LogDebugTxt("изолировать имя принтера");
в то время как (pi > 0)
{ // Удаление записей перед индексированным целевым объектом
s_Bfr = s_Bfr.SubString(s_Bfr.Pos("\r") + 1,s_Bfr.Length());
пи--;
}
pi = s_Bfr.Pos("\r");
if (pi) // удалите все, что следует за ним
s_Bfr.SetLength(pi - 1);
s_Bfr = s_Bfr.Отделка();
LogDebugTxt(s_Bfr);
LogDebugTxt("--------------");
LogDebugTxt("Debug test end");
#else // код версии без отладки
s_Bfr = Printer()->принтеры[0].С текстом();
в то время как (pi > 0)
{
s_Bfr = s_Bfr.SubString(s_Bfr.Pos("\r") + 1,s_Bfr.Length());
пи--;
}
pi = s_Bfr.Pos("\r");
если (Пи)
s_Bfr.SetLength(pi - 1);
#endif
вернуться s_Bfr.Отделка();
}
//---------------------------------------------------------------------------
Что я уже пробовал:
Теперь эта проблема устранена, и я очень благодарен тем, кто внес свой вклад. Отображаемый список кодов-это используемый отладочный код. Все прекрасно работает на всех целевых платформах.
Обратите внимание, что функция LogDebugTxt сохраняет файл журнала нормально закрытым, так что в случае фатального сбоя данные журнала не будут потеряны.
Еще раз благодарю вас за вашу помощь в этом вопросе. AGB
Richard MacCutchan
О, и мы должны угадать, какой вопрос Вы имеете в виду?
ZurdoDev
После 13 догадок я чувствую, что у меня почти получилось. Но только промахнулся.
0x01AA
Проверьте размер принтеров.
TStrings* prns= Printer()->Printers;
LogDebugTxt("Count= " + AnsiString(prns->Count));
И проверьте также whter Printer()->PrinterIndex находится в допустимом диапазоне. Скорее всего, не выбран DefaultPrinter и значение PrinterIndex == -1
ZurdoDev
В чем именно заключается ваш вопрос?
jeron1
Вы должны обновить свой первоначальный вопрос с любыми изменениями, которые вы внесли, и/или новой информацией, которая у вас может быть. Этот поток будет выдвинут наверх, когда вы это сделаете, поэтому нет необходимости в потоках "вопрос ... (продолжение)".