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

•  DeLiKaTeS Tetris (Тетрис)  253

•  TDictionary Custom Sort  3 402

•  Fast Watermark Sources  3 157

•  3D Designer  4 914

•  Sik Screen Capture  3 408

•  Patch Maker  3 611

•  Айболит (remote control)  3 815

•  ListBox Drag & Drop  3 076

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

•  Графические эффекты  4 013

•  Рисование по маске  3 311

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

•  Canvas Drawing  2 827

•  Рисование Луны  2 639

•  Поворот изображения  2 250

•  Рисование стержней  2 191

•  Paint on Shape  1 590

•  Генератор кроссвордов  2 271

•  Головоломка Paletto  1 789

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

•  Пазл Numbrix  1 701

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

•  Игра HIP  1 297

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

•  Симулятор лифта  1 494

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

•  Генератор лабиринта  1 565

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

•  HEX View  1 515

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

 
скрыть


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-2024 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

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