Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  3 669

•  TDictionary Custom Sort  5 800

•  Fast Watermark Sources  5 603

•  3D Designer  8 215

•  Sik Screen Capture  5 913

•  Patch Maker  6 388

•  Айболит (remote control)  6 378

•  ListBox Drag & Drop  5 237

•  Доска для игры Реверси  94 551

•  Графические эффекты  6 570

•  Рисование по маске  5 643

•  Перетаскивание изображений  4 759

•  Canvas Drawing  5 135

•  Рисование Луны  4 863

•  Поворот изображения  4 410

•  Рисование стержней  3 116

•  Paint on Shape  2 360

•  Генератор кроссвордов  3 228

•  Головоломка Paletto  2 551

•  Теорема Монжа об окружностях  3 328

•  Пазл Numbrix  2 200

•  Заборы и коммивояжеры  2 849

•  Игра HIP  1 820

•  Игра Go (Го)  1 740

•  Симулятор лифта  2 072

•  Программа укладки плитки  1 798

•  Генератор лабиринта  2 240

•  Проверка числового ввода  1 924

•  HEX View  2 225

•  Физический маятник  1 911

 
скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Пример использования TPrinter



Автор: Jeff Fisher

Может ли мне кто-либо сказать, как с помощью TPrinter сделать следующее?:

  1. Замена исходного Paper Bin страницей. Создание отчета, который нужно переключать между двумя бункерами (некоторым страницам отчета нужно работать с другим бункером, например бланки писем и пр.).
  2. Печать нескольких копий отчета. Для этого желательно использовать диалог настройки принтера, но это, похоже, не работает.
То, что вы собираетесь делать, возможно с помощью структуры TDevMode, получив к которой доступ, можно делать необходимые вам изменения. Структура TDevMode имеет все необходимые для настройки принтера поля и позволяет сделать любые настройки не обращаясь к диалогу настройки принтера.

Вот пример одного из моих компонентов, инкапсулирующий вышесказанную функциональность:


procedure TCrpePrinter.GetCurrentPrinter;
var
  lpDevice: PChar;
  lpDriver: PChar;
  lpPort: PChar;
  Handle: THandle;
begin
  lpDevice := StrAlloc(255);
  lpDriver := StrAlloc(255);
  lpPort := StrAlloc(255);

  try
    Printer.GetPrinter(lpDevice, lpDriver, lpPort, Handle);
    if Handle <> 0 then
      { если это не 0, то мы имеем указатель на структуру устройства}
    begin
      FDevMode := Ptr(Handle, 0); {Получаем дескриптор структуры устройства}
      FDevice := StrPas(lpDevice);
      FDriver := StrPas(lpDriver);
      FPort := StrPas(lpPort);
    end
    else
    begin
      Printer.PrinterIndex := Printer.PrinterIndex;
        {Этим мы пытаемся осуществить инициализацию}
      Printer.GetPrinter(lpDevice, lpDriver, lpPort, Handle);
      if Handle <> 0 then
      begin
        FDevMode := Ptr(Handle, 0);
        FDevice := StrPas(lpDevice);
        FDriver := StrPas(lpDriver);
        FPort := StrPas(lpPort);
      end
      else
      begin
        FDevMode := nil;
        raise ECrpe.Create('Ошибка загрузки драйвера принтера');
      end;
    end;
  finally
    StrDispose(lpDevice);
    StrDispose(lpDriver);
    StrDispose(lpPort);
  end;
end;

Изменение лотка и количества копий:


dmCopies := 2;
dmDefaultSource := 2;  {Нижний лоток}

Как только вы получите указатель на структуру devmode, вы вправе делать изменения любых полей. Говорят, могут быть проблемы при изменении лотков во время печати, но сам я не пробовал менять эти поля в структуре DevMode.





Похожие по теме исходники

Примеры работы с БД

Примеры оформления DBGrid

Пример использования DBGrid




Copyright © 2004-2025 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте