![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Добрый день.
Есть вопрос на который пока не смог найти ответ в поисковиках. Цель - создать альтернативный упрощённый диалог настройки печати 1.Необходимо выбрать принтер из списка установленных - с этим разобрался Код:
ComboBox1.Items:=Printer.Printers; ComboBox1.ItemIndex:=Printer.PrinterIndex; Получение списка форматов бумаги 3.Установили Альбомный поворот бумаги - с этим понятно Код:
Printer.Orientation:=poLanscape; Нашёл как задать формат бумаги но это не то, здесь только выбор из стандартного списка DMPAPER_..., а нужно чтобы выбор и установка бумаги была из пункта 2. Подскажите кто чем может, или вектор покажите - куда копать. Последний раз редактировалось Admin, 04.02.2011 в 13:23. |
|
#2
|
|||
|
|||
|
Код:
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: пользуемся тегами!!! Последний раз редактировалось lmikle, 21.10.2011 в 18:09. |