印刷ユニットがあるdllがあります。
私のアプリケーションでは、ドキュメントの印刷だけでなく、印刷プロセスを開始、終了するためのメソッドをエクスポートしました。
dllの呼び出しは次のようになります。
1-> begin printing and print document
2-> print document
3-> end printing.
印刷される各ページ(トレイ、向きなど)の前に設定を変更しています。別の呼び出し(2)を実行し、プリンター設定を変更しようとすると、ステップ1は正常に完了します。メソッド:開発モード構造のResetDcはfalseを返します...
1回の呼び出し後にアプリに戻ったときに、アプリプリンターユニットが何かを変更して、dllでの後続の呼び出しを妨げるという問題はありますか?
問題を回避する方法は?
編集
ページ設定を行う機能はこちらです。(上記のリストから)1回の呼び出しが行われると、ResetDCは正常に実行されますが、次の呼び出しでResetDCはfalseを返します。なぜ ... ?
function PRPageSetup(paperSize: Integer = DMPAPER_A4): Boolean;
var
pDevice: pChar;
pDriver: pChar;
pPort: pChar;
hDMode: THandle;
PDMode: PDEVMODE;
PrnHandle: THandle;
begin
result := false;
GetMem(pDevice, cchDeviceName);
GetMem(pDriver, MAX_PATH);
GetMem(pPort, MAX_PATH);
Printer.GetPrinter(pDevice, pDriver, pPort, hDMode);
if hDMode <> 0 then
begin
pDMode := GlobalLock(hDMode);
if pDMode <> nil then
begin
pDMode^.dmFields := pDMode^.dmFields or DM_PAPERSIZE or DM_ORIENTATION;
pDMode^.dmPaperSize := paperSize;
if Printer.Printing then
PrnHandle := printer.Canvas.Handle
else
PrnHandle := Printer.Handle;
if ResetDc(PrnHandle, pDMode^) <> 0
then PRCanReset := true
else PRCanReset := false;
Result := true;
GlobalUnlock(hDMode);
end;
end;
FreeMem(pDevice, cchDeviceName);
FreeMem(pDriver, MAX_PATH);
FreeMem(pPort, MAX_PATH);
end;