📄 jclprint.pas
字号:
begin
Result := Trunc(DpiX * (Cm * 2.54));
end;
function TJclPrintSet.YCmToDot(const Cm: Double): Integer;
begin
Result := Trunc(DpiY * (Cm * 2.54));
end;
function TJclPrintSet.CpiToDot(const Cpi, Chars: Double): Integer;
begin
Result := Trunc((DpiX * Chars) / Cpi);
end;
function TJclPrintSet.LpiToDot(const Lpi, Lines: Double): Integer;
begin
Result := Trunc((DpiY * Lpi) / Lines);
end;
procedure TJclPrintSet.TextOutInch(const X, Y: Double; const Text: string);
begin
Printer.Canvas.TextOut(XInchToDot(X), YInchToDot(Y), Text);
end;
procedure TJclPrintSet.TextOutCm(const X, Y: Double; const Text: string);
begin
Printer.Canvas.TextOut(XCmToDot(X), YCmToDot(Y), Text);
end;
procedure TJclPrintSet.TextOutCpiLpi(const Cpi, Chars, Lpi, Lines: Double; const Text: string);
begin
Printer.Canvas.TextOut(CpiToDot(Cpi, Chars), LpiToDot(Lpi, Lines), Text);
end;
procedure TJclPrintSet.CustomPageSetup(const Width, Height: Double);
begin
PaperSize := dmPaper_User;
PaperLength := Trunc(254 * Height);
YResolution := Trunc(DpiY * Height);
PaperWidth := Trunc(254 * Width);
end;
procedure TJclPrintSet.SaveToIniFile(const IniFileName, Section: string);
var
PrIniFile: TIniFile;
CurrentName: string;
begin
PrIniFile := TIniFile.Create(IniFileName);
CurrentName := Printer.Printers[Printer.PrinterIndex];
PrIniFile.WriteString(Section, PrintIniPrinterName, CurrentName);
PrIniFile.WriteString(Section, PrintIniPrinterPort, PrinterPort);
PrIniFile.WriteInteger(Section, PrintIniOrientation, Orientation);
PrIniFile.WriteInteger(Section, PrintIniPaperSize, PaperSize);
PrIniFile.WriteInteger(Section, PrintIniPaperLength, PaperLength);
PrIniFile.WriteInteger(Section, PrintIniPaperWidth, PaperWidth);
PrIniFile.WriteInteger(Section, PrintIniScale, Scale);
PrIniFile.WriteInteger(Section, PrintIniCopies, Copies);
PrIniFile.WriteInteger(Section, PrintIniDefaultSource, DefaultSource);
PrIniFile.WriteInteger(Section, PrintIniPrintQuality, PrintQuality);
PrIniFile.WriteInteger(Section, PrintIniColor, Color);
PrIniFile.WriteInteger(Section, PrintIniDuplex, Duplex);
PrIniFile.WriteInteger(Section, PrintIniYResolution, YResolution);
PrIniFile.WriteInteger(Section, PrintIniTTOption, TrueTypeOption);
PrIniFile.Free;
end;
function TJclPrintSet.ReadFromIniFile(const IniFileName, Section: string): Boolean;
var
PrIniFile: TIniFile;
SavedName: string;
NewIndex: Integer;
begin
Result := False;
PrIniFile := TIniFile.Create(IniFileName);
SavedName := PrIniFile.ReadString(Section, PrintIniPrinterName, PrinterName);
if PrinterName <> SavedName then
begin
NewIndex := Printer.Printers.IndexOf(SavedName);
if NewIndex <> -1 then
begin
Result := True;
Printer.PrinterIndex := NewIndex;
PrinterPort := PrIniFile.ReadString(Section, PrintIniPrinterPort, PrinterPort);
Orientation := PrIniFile.ReadInteger(Section, PrintIniOrientation, Orientation);
PaperSize := PrIniFile.ReadInteger(Section, PrintIniPaperSize, PaperSize);
PaperLength := PrIniFile.ReadInteger(Section, PrintIniPaperLength, PaperLength);
PaperWidth := PrIniFile.ReadInteger(Section, PrintIniPaperWidth, PaperWidth);
Scale := PrIniFile.ReadInteger(Section, PrintIniScale, Scale);
Copies := PrIniFile.ReadInteger(Section, PrintIniCopies, Copies);
DefaultSource := PrIniFile.ReadInteger(Section, PrintIniDefaultSource, DefaultSource);
PrintQuality := PrIniFile.ReadInteger(Section, PrintIniPrintQuality, PrintQuality);
Color := PrIniFile.ReadInteger(Section, PrintIniColor, Color);
Duplex := PrIniFile.ReadInteger(Section, PrintIniDuplex, Duplex);
YResolution := PrIniFile.ReadInteger(Section, PrintIniYResolution, YResolution);
TrueTypeOption := PrIniFile.ReadInteger(Section, PrintIniTTOption, TrueTypeOption);
end
else
Result := False;
end;
PrIniFile.Free;
end;
procedure TJclPrintSet.SetOrientation(Orientation: Integer);
begin
CheckPrinter;
FDeviceMode^.dmOrientation := Orientation;
Printer.Orientation := TPrinterOrientation(Orientation - 1);
FDeviceMode^.dmFields := FDeviceMode^.dmFields or DM_ORIENTATION;
end;
function TJclPrintSet.GetOrientation: Integer;
begin
CheckPrinter;
Result := FDeviceMode^.dmOrientation;
end;
procedure TJclPrintSet.SetPaperSize(Size: Integer);
begin
CheckPrinter;
FDeviceMode^.dmPaperSize := Size;
FDeviceMode^.dmFields := FDeviceMode^.dmFields or DM_PAPERSIZE;
end;
function TJclPrintSet.GetPaperSize: Integer;
begin
CheckPrinter;
Result := FDeviceMode^.dmPaperSize;
end;
procedure TJclPrintSet.SetPaperLength(Length: Integer);
begin
CheckPrinter;
FDeviceMode^.dmPaperLength := Length;
FDeviceMode^.dmFields := FDeviceMode^.dmFields or DM_PAPERLENGTH;
end;
function TJclPrintSet.GetPaperLength: Integer;
begin
CheckPrinter;
Result := FDeviceMode^.dmPaperLength;
end;
procedure TJclPrintSet.SetPaperWidth(Width: Integer);
begin
CheckPrinter;
FDeviceMode^.dmPaperWidth := Width;
FDeviceMode^.dmFields := FDeviceMode^.dmFields or DM_PAPERWIDTH;
end;
function TJclPrintSet.GetPaperWidth: Integer;
begin
CheckPrinter;
Result := FDeviceMode^.dmPaperWidth;
end;
procedure TJclPrintSet.SetScale(Scale: Integer);
begin
CheckPrinter;
FDeviceMode^.dmScale := Scale;
FDeviceMode^.dmFields := FDeviceMode^.dmFields or DM_SCALE;
end;
function TJclPrintSet.GetScale: Integer;
begin
CheckPrinter;
Result := FDeviceMode^.dmScale;
end;
procedure TJclPrintSet.SetCopies(Copies: Integer);
begin
CheckPrinter;
FDeviceMode^.dmCopies := Copies;
FDeviceMode^.dmFields := FDeviceMode^.dmFields or DM_COPIES;
end;
function TJclPrintSet.GetCopies: Integer;
begin
CheckPrinter;
Result := FDeviceMode^.dmCopies;
end;
procedure TJclPrintSet.SetBin(Bin: Integer);
begin
CheckPrinter;
FDeviceMode^.dmDefaultSource := Bin;
FDeviceMode^.dmFields := FDeviceMode^.dmFields or DM_DEFAULTSOURCE;
end;
function TJclPrintSet.GetBin: Integer;
begin
CheckPrinter;
Result := FDeviceMode^.dmDefaultSource;
end;
procedure TJclPrintSet.SetPrintQuality(Quality: Integer);
begin
CheckPrinter;
FDeviceMode^.dmPrintQuality := Quality;
FDeviceMode^.dmFields := FDeviceMode^.dmFields or DM_PRINTQUALITY;
end;
function TJclPrintSet.GetPrintQuality: Integer;
begin
CheckPrinter;
Result := FDeviceMode^.dmPrintQuality;
end;
procedure TJclPrintSet.SetColor(Color: Integer);
begin
CheckPrinter;
FDeviceMode^.dmColor := Color;
FDeviceMode^.dmFields := FDeviceMode^.dmFields or DM_ORIENTATION;
end;
function TJclPrintSet.GetColor: Integer;
begin
CheckPrinter;
Result := FDeviceMode^.dmColor;
end;
procedure TJclPrintSet.SetDuplex(Duplex: Integer);
begin
CheckPrinter;
FDeviceMode^.dmDuplex := Duplex;
FDeviceMode^.dmFields := FDeviceMode^.dmFields or DM_DUPLEX;
end;
function TJclPrintSet.GetDuplex: Integer;
begin
CheckPrinter;
Result := FDeviceMode^.dmDuplex;
end;
procedure TJclPrintSet.SetYResolution(YRes: Integer);
var
PrintDevMode: PDeviceModeA;
begin
CheckPrinter;
PrintDevMode := @FDeviceMode^;
PrintDevMode^.dmYResolution := YRes;
FDeviceMode^.dmFields := FDeviceMode^.dmFields or DM_YRESOLUTION;
end;
function TJclPrintSet.GetYResolution: Integer;
var
PrintDevMode: PDeviceModeA;
begin
CheckPrinter;
PrintDevMode := @FDeviceMode^;
Result := PrintDevMode^.dmYResolution;
end;
procedure TJclPrintSet.SetTrueTypeOption(Option: Integer);
var
PrintDevMode: PDeviceModeA;
begin
CheckPrinter;
PrintDevMode := @FDeviceMode^;
PrintDevMode^.dmTTOption := Option;
FDeviceMode^.dmFields := FDeviceMode^.dmFields or DM_TTOPTION;
end;
function TJclPrintSet.GetTrueTypeOption: Integer;
var
PrintDevMode: PDeviceModeA;
begin
CheckPrinter;
PrintDevMode := @FDeviceMode^;
Result := PrintDevMode^.dmTTOption;
end;
function TJclPrintSet.GetPrinterName: string;
begin
CheckPrinter;
Result := StrPas(FDevice);
end;
function TJclPrintSet.GetPrinterPort: string;
begin
CheckPrinter;
Result := StrPas(FPort);
end;
function TJclPrintSet.GetPrinterDriver: string;
begin
CheckPrinter;
Result := StrPas(FDriver);
end;
procedure TJclPrintSet.SetBinFromList(BinNum: Byte);
begin
CheckPrinter;
if FNumBins = 0 then
Exit;
if BinNum > FNumBins then
raise EJclPrinterError.CreateRes(@RsIndexOutOfRange)
else
DefaultSource := FBinArray^[BinNum];
end;
function TJclPrintSet.GetBinIndex: Byte;
var
Idx: Byte;
begin
Result := 0;
for Idx := 0 to FNumBins do
begin
if FBinArray^[Idx] = Word(FDeviceMode^.dmDefaultSource) then
begin
Result := Idx;
Break;
end;
end;
end;
procedure TJclPrintSet.SetPaperFromList(PaperNum: Byte);
begin
CheckPrinter;
if FNumPapers = 0 then
Exit;
if PaperNum > FNumPapers then
raise EJclPrinterError.CreateRes(@RsIndexOutOfRangePaper)
else
PaperSize := FPaperArray^[PaperNum];
end;
procedure TJclPrintSet.SetPort(Port: string);
begin
CheckPrinter;
Port := Port + #0;
Move(Port[1], FPort^, Length(Port));
Printer.SetPrinter(FDevice, FDriver, FPort, FHandle);
end;
function TJclPrintSet.GetPaperIndex: Byte;
var
Idx: Byte;
begin
Result := 0;
for Idx := 0 to FNumPapers do
begin
if FPaperArray^[Idx] = Word(FDeviceMode^.dmPaperSize) then
begin
Result := Idx;
Break;
end;
end;
end;
// History:
// $Log: JclPrint.pas,v $
// Revision 1.20 2005/03/08 08:33:20 marquardt
// overhaul of exceptions and resourcestrings, minor style cleaning
//
// Revision 1.19 2005/03/05 06:31:19 rrossmair
// - allow conditional compilation for deprecated code (symbol DROP_OBSOLETE_CODE)
//
// Revision 1.18 2005/02/24 16:34:51 marquardt
// remove divider lines, add section lines (unfinished)
//
// Revision 1.17 2004/11/06 02:07:05 mthoma
// cleaning.
//
// Revision 1.16 2004/10/09 13:58:52 marquardt
// style cleaning JclPrint
// remove WinSpool related functions from JclWin32
//
// Revision 1.15 2004/10/09 06:17:27 marquardt
// cleaning: DPSetDefaultPrinter reimplemented from scratch
//
// Revision 1.14 2004/10/08 16:45:31 marquardt
// cleaning: DPGetDefaultPrinter reimplemented from scratch
//
// Revision 1.13 2004/09/16 19:47:32 rrossmair
// check-in in preparation for release 1.92
//
// Revision 1.12 2004/08/02 15:30:16 marquardt
// hunting down (rom) comments
//
// Revision 1.11 2004/08/02 06:34:59 marquardt
// minor string literal improvements
//
// Revision 1.10 2004/07/30 07:20:25 marquardt
// fixing TStringLists, adding BeginUpdate/EndUpdate
//
// Revision 1.9 2004/07/28 18:00:52 marquardt
// various style cleanings, some minor fixes
//
// Revision 1.8 2004/06/14 13:05:20 marquardt
// style cleaning ENDIF, Tabs
//
// Revision 1.7 2004/06/14 11:05:52 marquardt
// symbols added to all ENDIFs and some other minor style changes like removing IFOPT
//
// Revision 1.6 2004/05/13 07:32:18 rrossmair
// header updated according to new policy: initial developers & contributors listed
//
// Revision 1.5 2004/04/13 13:33:38
// add DPSetDefaultPrinter, bugfix GetDefaultPrinterName
//
// Revision 1.4 2004/04/11 22:12:16 mthoma
// Added a new function: GetDefaultPrinterName.
//
// Revision 1.3 2004/04/06 04:37:59
// DPSetDefaultPrinter
//
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -