Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Подскажите где ошибка.


Автор: Sponger 31.5.2006, 12:45
Код

procedure TFMain.Printselectedphoto1Click(Sender: TObject);
var i, j, k, m, n : integer;
    iLeft, iTop, iRight, iBottom : integer;
begin
  Printer.Orientation := poLandscape;
  if PrinterSetupDialog1.Execute then begin
    with Printer do begin
      BeginDoc;
      n := length(aTImage) div 3;
      if length(aTImage) mod 3 > 0 then inc(n);
      m := 3; k := 0;
      for i := 1 to n do // n - коичество картнок по вертикали в одном столбце.
        for j := 1 to m do  // m - количество картнок по горизонтали в одной строке.
          if k < length(aTImage) then begin
            TJPEGImage(aTImage[k].Picture.Graphic).Scale := jsFullSize;
            TJPEGImage(aTImage[k].Picture.Graphic).Performance := jpBestSpeed;

            iLeft := 20 + round((PageWidth * (j - 1) / m));
            iTop := 20 + round((PageHeight * (i - 1) / n));

            if aTImage[k].Picture.Graphic.Width > aTImage[k].Picture.Graphic.Height then begin
              iRight := round((PageWidth * j / m)) - 80;
              iBottom := round(iTop + ((iRight - iLeft) / 1.33)) - 60;
            end
            else begin
              iBottom := round((PageHeight * i / n)) - 60;
              iRight := round(iLeft + ((iBottom - iTop) / 1.33)) - 80;
            end;
            Canvas.StretchDraw(Rect(iLeft, iTop, iRight, iBottom), aTImage[k].Picture.Graphic);
            TJPEGImage(aTImage[k].Picture.Graphic).Scale := jsEighth;
            inc(k);
          end;
      EndDoc;
    end;
  end;
end;


aTImage - public массив TImage, все картинки размером 1024*768 или 768*1024

На принтер печатает в шахматном порядке. Если вывожу в файл (на Microsoft Office Document Image Writer) то все нормально.

Где собака порылась?     

Автор: Sponger 1.6.2006, 05:12
Почему-то игнорируют. Посмотрите код, где ошибка. 

Автор: Sponger 1.6.2006, 12:08
Люди помогите. Надо очень. А сам не могу допереть. 
И масштаб и размер все менял, а все равно выводится на принтер в шахматном порядке, т.е. из 6 картинок выводит 3, а на месте оставшихся 3 пусто, соответственно из 9 показывает 5 и т.д. 

Автор: Sponger 2.6.2006, 05:52
Вроде бы локализовал ошибку но не могу понять почему так.

Код

TJPEGImage(aTImage[k].Picture.Graphic).Scale := jsFullSize;


Если эту строчку меняю jsFullSize на jsHalf - то не печатается один столбец.
Если меняю jsFullSize на jsEighth - печатается все, но с отвратительным качеством.

Не дайте человеку погибнуть. Помогите. Три дня уже бьюсь над этим.  

ps Картинки который печатаю *.jpg
 

Автор: skyboy 2.6.2006, 07:46
А зачем ты сначала делаешь FullSize, а потом Eight?
Проблема точно - не в драйвере принтера? Сам ведь говоришь:
Цитата(Sponger @  31.5.2006,  12:45 Найти цитируемый пост)
Если вывожу в файл (на Microsoft Office Document Image Writer) то все нормально.

 

Автор: Sponger 2.6.2006, 08:04
Картинка отображена на экране. Поэтому сперва делаю Fullsize чтобы печаталось оптимальное качество, а потом обратно возвращаю.

В чем разница между Microsoft Office Document Image Writer и реальным принтером? 
И на тот и на тот картинка 300DPI идет. Т.е. размер Canvas одинаковый.
Ведь если печатаю файл который получился после печати на виртуальный принтер, распечатывается нормально. 

Автор: skyboy 2.6.2006, 08:13
Sponger, я и говорю, что принципиальной разницы нет  - и то, и то воспринимается системой как самый обычный принтер(если соврал, меня поправят ;)), потому если на что-то идёт нормально,а на что-то нет, то баг, вероятней всего, не в механизме передачи,а в этом "чём-то". На других компах/принтерах пробовал? 

Автор: Sponger 2.6.2006, 09:15
Пробовал на 2-х принтерах, лазерниках, и 2-х компах 
Других в моих пределах нет.

Дык я и спрашиваю в чем баг. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)