Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WinAPI и печать изображений 
:(
    Опции темы
Limonchik
Дата 9.11.2008, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 17.11.2007

Репутация: нет
Всего: нет



Привет всем!Помогите решить одну проблемку.Необходимо осуществить вывод на печать изображения при помощи только WinAPI, не используя никаких стандартных дельфовских компонентов(PrintDialog,PrintSetupPage) и классов TPrinter и TPrintDlg

Это сообщение отредактировал(а) Limonchik - 9.11.2008, 19:02
PM MAIL   Вверх
Веталька
Дата 9.11.2008, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 338
Регистрация: 2.11.2008

Репутация: нет
Всего: 6



1) тинц сюди =>>>  http://sources.ru/delphi/delphi_print.shtml =>>>
Код

uses CommDlg;

{$IFNDEF WIN32}
 const MAX_PATH = 144;
{$ENDIF}

procedure TForm1.Button1Click(Sender: TObject);
var
  Pd : TPrintDlg;
  DocInfo: TDocInfo;
begin
  FillChar(Pd, sizeof(Pd), #0); 
  Pd.lStructSize := sizeof(Pd);
  Pd.hWndOwner := Form1.Handle;
  Pd.Flags := PD_RETURNDC;
  if PrintDlg(pd) then begin
    FillChar(DocInfo, sizeof(DocInfo), #0);
    DocInfo.cbSize := SizeOf(DocInfo);
    GetMem(DocInfo.lpszDocName, 32);
    GetMem(DocInfo.lpszOutput, MAX_PATH);
    lStrCpy(DocInfo.lpszDocName, 'My Document');
   {Следующая строка указывает на файл, который надо распечатать }
    lStrCpy(DocInfo.lpszOutput, 'C:\Download\Test.doc');
    StartDoc(Pd.hDc, DocInfo);
    StartPage(Pd.hDc);
    TextOut(Pd.hDc, 100, 100, 'Page 1', 6);
    EndPage(Pd.hDc);
    StartPage(Pd.hDc);
    TextOut(Pd.hDc, 100, 100, 'Page 2', 6);
    EndPage(Pd.hDc);
    EndDoc(Pd.hDc);
    FreeMem(DocInfo.lpszDocName, 32);
    FreeMem(DocInfo.lpszOutput, MAX_PATH);
  end;
end;



2)ище есть такое:
Код

// Инициализируем поля структуры TPrintDlg
    FillChar(pd, SizeOf(pd), 0);
    pd.lStructSize := SizeOf(pd);
    pd.hwndOwner   := hRichEdit;
    pd.hInstance   := hInstance;
    pd.Flags       := PD_RETURNDC or PD_NOPAGENUMS or PD_NOSELECTION or PD_PRINTSETUP or PD_ALLPAGES;
    pd.nFromPage   := $ffff;
    pd.nToPage     := $ffff;
    pd.nMinPage    := 0;
    pd.nMaxPage    := $ffff;
    pd.nCopies     := 1;

    // Выводим на экран диалоговую панель, предназначенную
    // для печати документа
    if PrintDlg(pd) = True then
    begin
      PrintDC := pd.hDC;

      // Инициализируем поля структуры TFormatRange
      FillChar(fr, SizeOf(fr), 0);
  
      // Будем печатать с использованием контекста
      // принтера, полученного от функции PrintDlg
      fr.hdc       := PrintDC;
      fr.hdcTarget := PrintDC;

      // Печатаем весь документ
      fr.chrg.cpMin := 0;
      fr.chrg.cpMax := -1;
  
      // Устанавливаем размеры страницы в TWIPS-ах
      with fr.rcPage do
      begin
    Top    := 0;
        Left   := 0;
        Right  := MulDiv(GetDeviceCaps(PrintDC, PHYSICALWIDTH),  1440, GetDeviceCaps(PrintDC, LOGPIXELSX));
        bottom := MulDiv(GetDeviceCaps(PrintDC, PHYSICALHEIGHT), 1440, GetDeviceCaps(PrintDC, LOGPIXELSY));
      end;
      fr.rc := fr.rcPage;

      // Оставляем поля
      if (fr.rcPage.Right > 2 * 3 * 1440 / 4 + 1440) then
      begin
    fr.rc.Left := 3 * 1440 div 4;
    dec(fr.rc.Right, fr.rc.Left);
      end;
      if (fr.rcPage.Bottom > 3 * 1440) then
      begin
        fr.rc.top := 1440;
        dec(fr.rc.Bottom, fr.rc.top);
      end;
    
      // Заполняем поля структуры DOCINFO
      FillChar(DocInfo, SizeOf(DocInfo), 0);
      with DocInfo do
      begin
    cbSize      := SizeOf(DocInfo);
    lpszOutput  := '';
    lpszDocName := 'DIMTable document';
      end;

      // Начинаем печать документа
      nRc := StartDoc(PrintDC, DocInfo);
    
      // Если произошла ошибка, получаем и выводим на экран код ошибки
      if (nRc < 0) then
      begin
        dwErr := GetLastError;
        MessageBox(0, PChar(Format('Ошибка печати = %ld', [dwErr])), AppName, MB_OK or MB_ICONEXCLAMATION);
      
    DeleteDC(PrintDC);
    Exit;
      end;

      // Начинаем печать страницы
      StartPage(PrintDC);
      lLastChar := 0;

      // Определяем длину текста в байтах
      lTextSize := SendMessage(hRichEdit, WM_GETTEXTLENGTH, 0, 0);

      // Цикл по всем страницам документа
//====================================    
      // этот цткл и клинит, а почему не понял
//====================================
      while (lLastChar < lTextSize) do
      begin
    // Форматируем данные для принтера и печатаем их
        lLastChar := SendMessage(hRichEdit, EM_FORMATRANGE, 1, Longint(@fr));
        
    if (lLastChar < lTextSize) then
        begin
      // Завершаем печать очередной страницы
          EndPage(PrintDC);
        
      // Начинаем новую страницу
      StartPage(PrintDC);    
          fr.chrg.cpMin := lLastChar;
          fr.chrg.cpMax := -1;
    end;
      end;

      // Удаляем информацию, которая хранится в 
      // органе управления Rich Edit
      SendMessage(hRichEdit, EM_FORMATRANGE, 1, 0);

      // Завершаем печать страницы
      EndPage(PrintDC);

      // Завершаем печать документа
      EndDoc(PrintDC);

      // Удаляем контекст принтера
      DeleteDC(PrintDC);
    end;




--------------------
Ради зачета студент идет на все, даже на лекции........................ 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0575 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.