home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2002 November
/
Chip_2002-11_cd1.bin
/
zkuste
/
delphi
/
unity
/
d56
/
DW
/
DW10242.ZIP
/
PrinterWorks.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
2002-04-21
|
4KB
|
147 lines
(*------------------------------PrinterWorks.pas------------------------
V1.0.236 - 09.04.2002 current release
------------------------------------------------------------------------*)
unit PrinterWorks;
interface
uses Windows, SysUtils, Messages, Printers, StringWorks, WinSpool;
function GetDefaultPaperBin: Integer;
procedure SetDefaultPrinter(NewDefPrinter : string);
function GetPrinterStrFromIndex(index : integer) : string;
function PRN_PXLPERMM_X(MM: Integer): Integer;
function PRN_PXLPERMM_Y(MM: Integer): Integer;
function PRN_MMToPixelX(Millimeters: Integer): Integer;
function PRN_MMToPixelY(Millimeters: Integer): Integer;
procedure SendASCII(Str, JobName: string);
implementation
function GetDefaultPaperBin: Integer;
var
Device: array[0..cchDevicename-1] of Char;
Driver: array[0..(MAX_PATH)-1] of Char;
Port: array[0..32] of Char;
hDMode: THandle;
pDMode: PDevMode;
begin
result:= -1; //Errorcode
Printer.GetPrinter(Device, Driver, Port, hDMode);
if (hDMode<>0) then
begin
pDMode:=GlobalLock(hDMode);
if pDMode<>nil then result:= pDMode^.dmDefaultSource;
end;
end;
function GetPrinterStrFromIndex(index : integer) : string;
var
pri : integer;
hDeviceMode : THandle;
Device,Driver,Port : array[0..255] of char;
s,ResStr : array[0..255] of char;
begin
pri:=Printer.PrinterIndex;
Printer.PrinterIndex:=index;
Printer.GetPrinter(Device,Driver,Port,hDeviceMode);
GetProfileString('Devices',Device,'',ResStr,255);
StrCopy (s, Device);
StrCat (s, ',');
StrCat (s, ResStr);
Result:=String(s);
Printer.PrinterIndex:=pri;
end;
procedure SetDefaultPrinter(NewDefPrinter : string);
var
ResStr : array[0..255] of char;
begin
StrPCopy(ResStr,NewdefPrinter);
WriteProfileString ('windows', 'device', ResStr);
StrCopy (ResStr, 'windows');
SendMessage (HWND_BROADCAST, WM_WININICHANGE, 0, LongInt (@ResStr));
end;
function PRN_PXLPERMM_X(MM: Integer): Integer;
var
xPelsPerInch, xPelsPerMM, xPelsOffset: Extended;
begin
xPelsPerInch:= GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSX);
xPelsPerMM:= (xPelsPerInch / 25.4);
xPelsOffset:= GetDeviceCaps(Printer.Canvas.Handle, PHYSICALOFFSETX);
result:= Abs(Round(MM * xPelsPerMM - xPelsOffset));
end;
function PRN_PXLPERMM_Y(MM: Integer): Integer;
var
yPelsPerInch, yPelsPerMM, yPelsOffset: Extended;
begin
yPelsPerInch:= GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSY);
ShowInteger(Round(yPelsPerInch));
yPelsPerMM:= (yPelsPerInch / 25.4);
yPelsOffset:= GetDeviceCaps(Printer.Canvas.Handle, PHYSICALOFFSETY);
result:= Abs(Round(MM * yPelsPerMM - yPelsOffset));
end;
function PRN_MMToPixelX(Millimeters: Integer): Integer;
begin
result:= PRN_PXLPERMM_X(Millimeters);
end;
function PRN_MMToPixelY(Millimeters: Integer): Integer;
begin
result:= PRN_PXLPERMM_Y(Millimeters);
end;
procedure SendASCII(Str, JobName: string);
var Printer : array [0..255] of char;
p : Integer;
function RawDataToPrinter(const szPrinterName : string;
const data:string;
dwCount : DWORD) : boolean;
var
hPrinter : THandle;
DocInfo : TDocInfo1;
dwJOB : DWORD;
dwBytesWritten : DWORD;
begin
Result := False;
if OpenPrinter (pchar (szPrinterName), hPrinter, Nil) then
try
DocInfo.pDocName := PChar(JobName);
DocInfo.pOutputFile := Nil;
DocInfo.pDatatype := 'RAW';
dwJob := StartDocPrinter (hPrinter, 1, @docInfo);
if dwJob <> 0 then
try
if StartPagePrinter (hPrinter) then
try
if WritePrinter (hPrinter, Pchar(data), dwCount, dwBytesWritten) then
Result := dwBytesWritten = dwCount;
finally
EndPagePrinter (hPrinter)
end
finally
EndDocPrinter (hPrinter);
end
finally
ClosePrinter (hPrinter)
end
end;
begin
GetProfileString ('windows',
'device',
',,,',
Printer,
sizeof(Printer));
p := Pos (',', Printer);
if p > 0 then
Printer [p - 1] := #0;
RawDataToPrinter (Printer, Str, length(Str));
end;
end.