
21.10.2011, 17:54
|
Прохожий
|
|
Регистрация: 05.09.2011
Сообщения: 1
Репутация: 10
|
|
как-то примерно так
Код:
type
TPaperSizeArray = array [word] of TPoint;
PPaperSizeArray = ^TPaperSizeArray;
function GetPaperSize(iPaperIndex: Integer): TPoint;
var
Device, Driver, Port: array [0..255] of Char;
hDevMode: THandle;
iPaperSizesCount: Integer;
pPaperSizes: PPaperSizeArray;
begin
Printer.GetPrinter(Device, Driver, Port, hDevMode);
iPaperSizesCount := DeviceCapabilities(Device, Port, DC_PAPERSIZE, nil, nil);
Result.X := 0;
Result.Y := 0;
if (iPaperSizesCount > 0) and (iPaperIndex <= iPaperSizesCount) then begin
GetMem(pPaperSizes, iPaperSizesCount * SizeOf(TPoint));
try
DeviceCapabilities(Device, Port, DC_PAPERNAMES, PChar(pPaperSizes), nil);
Result := pPaperSizes^[iPaperIndex];
finally
FreeMem(pPaperSizes);
end;
end;
end;
procedure SetPaperSize(const PaperSize: TPoint);
var
Device, Driver, Port: array [0..255] of Char;
hDevMode: THandle;
pDMode: PDeviceMode;
begin
Printer.GetPrinter(Device, Driver, Port, hDevMode);
if hDevMode <> 0 then begin
pDMode := GlobalLock(hDevMode);
if pDMode <> nil then
try
// Set to custom size
pDMode^.dmFields := pDMode^.dmFields or
DM_PAPERSIZE or DM_PAPERWIDTH or DM_PAPERLENGTH;
pDMode^.dmPaperSize := DMPAPER_USER;
pDMode^.dmPaperWidth := PaperSize.X;
pDMode^.dmPaperLength := PaperSize.Y;
finally
GlobalUnlock(hDevMode);
end;
end;
end;
lmikle: пользуемся тегами!!!
|