Есть программа, написанная на Дельфи, по видимому 6, использует QReport из поставки, из постороннего кажется только что-то из RX. Проблема в том, что QR на экран выводит, но при попытке распечатать тихо сглатывает, причем молча. Разборки показали, что он выбирает принтер, считает, что принтер по умолчанию и отравляет строку '', в виндовсе это прокатывает, потому что он таки как-то печатает, а wine на такое реагирует просто - нет имени, нет печати. Пример программы - mbread.exe > То есть я правильно понимаю, что Windows, получая название > принтера '', печатает на принтере по умолчанию, а WINE молча > проглатывает задание? Да, точнее, думаю, что да, я не думаю, что QR настолько умный, что под вайном полученное имя принтера, а он его получает правильно, меняет на пустую строку ("" ;-), это в логах печатало как ''), а под виндоуз отправляет то, что получил. Как по мне, то это скорей еще одна недокументированная фича.
Created attachment 149 [details] Патч 2005 года от Serge Ryabchun
Простой тест вида: hDC = CreateDC("WINSPOOL","",NULL,NULL); if (!hDC) printf ("Printer error!\n") стабильно даёт Printer error! как в wine, так и в Windows. Никаких хитрых замен windows не делает, и ничего не печатает.
> Пример программы - mbread.exe Программа нормально печатает. Возможно, всё дело в невыбранном принтере по умолчанию. Другой причины, по которой может передаваться пустая строка, не вижу.
Приложен патч вида if (!psCmd[0] && !strncmp("LPR:",pszOutput,4)) sprintf(psCmd,"|lpr -P'%s'",pszOutput+4); + else + if (*pszOutput == '\0') + strcpy( psCmd,"|lpr"); будет в сборке 1.0.8
*** Bug 842 has been marked as a duplicate of this bug. ***
Собственно проблема не устранена, данное исправление просто её маскирует, вводя расширенное поведение (печать через lpr без указания принтера).
Date: Fri, 11 Jan 2008 10:44:25 +0200 From: "Serge Ryabchun" To: "Mike Shigorin" Subject: Re: [Bug 12369] Problem with printing from specific program (CUPS) Cc: lav@ Посмотрев на патч, вспомнил в чем проблема ;-) Delphi, а та программа на нем писана, для дефолтного принтера использует пустую строку, а WINE считает, что must be "LPR:", а по комменту понятно, что нужно еще таким же образом на кнопку свойств реагировать - подставить "LPR:" вместо пустой строки. Хм, может и не Delphi виноват, а тот компонент, в котором отчет готовится. Но в любом случае, WINE тоже виновен ибо работает в этой ситуации не так, как это делает Windoze