Исправил баг 'printer Selected Is Not Valid' при печати на сетевом принтере
Здравствуйте!
Судя по результатам поиска в google сей баг не редок. Здесь тоже обсуждалось
Исключение "Printer selected is not valid" вылетает при попытке печати на сетевом принтере. Возникает не у всех и не всегда. Вот код, который (в моем случае) исправил баг:
<!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->procedure TfrxPrinter.UpdateDeviceCaps;
begin
Судя по результатам поиска в google сей баг не редок. Здесь тоже обсуждалось
Исключение "Printer selected is not valid" вылетает при попытке печати на сетевом принтере. Возникает не у всех и не всегда. Вот код, который (в моем случае) исправил баг:
<!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->procedure TfrxPrinter.UpdateDeviceCaps;
begin
end;<!--fontc--></span><!--/fontc-->if FDC=0 then RecreateDC(); //Simon Kroik (kroiksm@gmx.de) 27.04.2009 <<<<<<<<<<<<<
FDPI := Point(GetDeviceCaps(FDC, LOGPIXELSX), GetDeviceCaps(FDC, LOGPIXELSY));
if (FDPI.X = 0) or (FDPI.Y = 0) then
raise Exception.Create('Printer selected is not valid');
FPaperHeight := Round(GetDeviceCaps(FDC, PHYSICALHEIGHT) / FDPI.Y * 25.4);
FPaperWidth := Round(GetDeviceCaps(FDC, PHYSICALWIDTH) / FDPI.X * 25.4);
FLeftMargin := Round(GetDeviceCaps(FDC, PHYSICALOFFSETX) / FDPI.X * 25.4);
FTopMargin := Round(GetDeviceCaps(FDC, PHYSICALOFFSETY) / FDPI.Y * 25.4);
FRightMargin := FPaperWidth - Round(GetDeviceCaps(FDC, HORZRES) / FDPI.X * 25.4) - FLeftMargin;
FBottomMargin := FPaperHeight - Round(GetDeviceCaps(FDC, VERTRES) / FDPI.Y * 25.4) - FTopMargin;
Комментарии
Думал уже о добавлении проверки контекста, только помогает не всегда и не на всех принтерах.
А как можно еще решить данную проблему?
FR_4.13 в данный момент
Спасибо