|
|
Регистрация | << Правила форума >> | 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. |