Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.10.2012, 00:03
aqula aqula вне форума
Новичок
 
Регистрация: 19.10.2012
Сообщения: 95
Репутация: 10
По умолчанию Печать объекта

Рябят помогите плиз. Запутался.
Я тут пытаюсь распечатать штрих-код.
Скачал barcode.pas
Прикрутил юнит.
Теперь хочу его вывести на принтер
Пытаюсь так
Код:
Printer.BeginDoc;
Printer.Canvas.Draw(0, 0, BarCode1);
Printer.EndDoc;
Пишет
[Error] Unit1.pas(52): Incompatible types: 'TGraphic' and 'TBarCode'
Хочет чтоб графический был, а лучше битмап.
Но по сути он и есть битмап только уже в виде объекта.
Ответить с цитированием
  #2  
Старый 20.10.2012, 00:07
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от aqula
Рябят помогите плиз. Запутался.
Я тут пытаюсь распечатать штрих-код.
Скачал barcode.pas
Прикрутил юнит.
Теперь хочу его вывести на принтер
Пытаюсь так
Код:
Printer.BeginDoc;
Printer.Canvas.Draw(0, 0, BarCode1);
Printer.EndDoc;
Пишет
[Error] Unit1.pas(52): Incompatible types: 'TGraphic' and 'TBarCode'
Хочет чтоб графический был, а лучше битмап.
Но по сути он и есть битмап только уже в виде объекта.
Нет. Если бы он действительно был TBitmap, то в этом месте не ругался бы.
Ответить с цитированием
  #3  
Старый 20.10.2012, 00:19
aqula aqula вне форума
Новичок
 
Регистрация: 19.10.2012
Сообщения: 95
Репутация: 10
По умолчанию

Тогда получается его надо преобразовать или сохранить в этот TBitmap или TGraphic?
Как бы это сделать?
Ответить с цитированием
  #4  
Старый 20.10.2012, 00:55
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от aqula
Тогда получается его надо преобразовать или сохранить в этот TBitmap или TGraphic?
Как бы это сделать?
Тебе нужно либо прочитать документацию на этот объект, либо поизучать файл barcode.pas. У меня нет ни того ни другого, поэтому единственное что я мог по поводу этой ошибки написать, я уже написал выше.

p.s. Вообще нет такого понятия как "Печать объекта", так как "объект" это абстрактное понятие, его невозможно увидеть. А раз невозможно увидеть, то и распечатать тоже невозможно.
Ответить с цитированием
  #5  
Старый 20.10.2012, 08:43
aqula aqula вне форума
Новичок
 
Регистрация: 19.10.2012
Сообщения: 95
Репутация: 10
По умолчанию

Согласен. Тут правильнее было бы сказать "печать компонента".
Вот сам barcode.pas
_http://www.delphisources.ru/pages/sources/raznoe/2007_year/barcode39.html
И мне его надо напечатать на бумаге. Помоги.
Ответить с цитированием
  #6  
Старый 20.10.2012, 19:04
aqula aqula вне форума
Новичок
 
Регистрация: 19.10.2012
Сообщения: 95
Репутация: 10
По умолчанию

многие говорят надо преобразовать в битмап и можно сделать что-то типа этого
Код:
uses
  Printers;
...
Printer.BeginDoc;
try
  Printer.Canvas.Draw (PosX, PosY, FBarcodeBitmap);
finally
  Printer.EndDoc;
end;

А как это делается? Сложновато для меня. Помогите плиииз.
Ответить с цитированием
  #7  
Старый 20.10.2012, 21:58
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от aqula
Согласен. Тут правильнее было бы сказать "печать компонента".
Вот сам barcode.pas
_http://www.delphisources.ru/pages/sources/raznoe/2007_year/barcode39.html
И мне его надо напечатать на бумаге. Помоги.
Посмотрел я этот компонент.
К сожалению он не позволяет рисовать себя на произвольной канве без соответствующей доработки.
Однако его можно распечатать обходным путём:
Положи на форму панель (TPanel) и на эту панель кинь этот компонент (TBarCode). Теперь можно распечатывать на принтере эту панель со всем её содержимым следующим образом:
Код:
Panel1.PaintTo(Printer.Canvas, 10, 20);
Ответить с цитированием
  #8  
Старый 20.10.2012, 23:02
Аватар для YVitaliy
YVitaliy YVitaliy вне форума
Местный
 
Регистрация: 14.12.2011
Сообщения: 481
Версия Delphi: Borland Delphi7
Репутация: 17
По умолчанию

Так любая канва его может печатать на себе без доработок
Можно печатать таким способом:
Код:
procedure TForm1.ButtonClick(Sender: TObject);
var bmp:TBitMap;
begin
  bmp:=TBitMap.Create;
   try
    bmp.Width:=BarCode1.Width;
    bmp.Height:=BarCode1.Height;
    bmp.Canvas.CopyRect(rect(0,0,bmp.Width,bmp.Height),BarCode1.Canvas ,
                        rect(0,0,BarCode1.Width,BarCode1.Height));
    //printer.PrinterIndex:=1;
    printer.BeginDoc;
    printer.Canvas.Draw(0,0,bmp);
    printer.EndDoc;
   finally
     bmp.Free;
   end;
end;
Но версия с TPanel, возможно, более "компактна" в плане кода.
Ответить с цитированием
  #9  
Старый 20.10.2012, 23:45
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от YVitaliy
Так любая канва его может печатать на себе без доработок
Можно печатать таким способом:
Код:
procedure TForm1.ButtonClick(Sender: TObject);
var bmp:TBitMap;
begin
  bmp:=TBitMap.Create;
   try
    bmp.Width:=BarCode1.Width;
    bmp.Height:=BarCode1.Height;
    bmp.Canvas.CopyRect(rect(0,0,bmp.Width,bmp.Height),BarCode1.Canvas ,
                        rect(0,0,BarCode1.Width,BarCode1.Height));
    //printer.PrinterIndex:=1;
    printer.BeginDoc;
    printer.Canvas.Draw(0,0,bmp);
    printer.EndDoc;
   finally
     bmp.Free;
   end;
end;
Но версия с TPanel, возможно, более "компактна" в плане кода.
Версия с TPanel лучше не потому что компактнее, а потому что будет работать даже если эта панель перекрыта (полностью или частично) другим окном и даже если будет находиться на скрытой форме. А вот с обычным копированием одной канвы на другую в таких случаях фокус не пройдёт.

Но вообще лучше доработать компонент, чтобы он мог выводить штрих-код на произвольную канву, тогда можно будет вывести например в метафайл, а уже с этим метафайлом можно творить что угодно без потери качества (в отличие от TBitmap).
Ответить с цитированием
  #10  
Старый 27.10.2012, 10:53
aqula aqula вне форума
Новичок
 
Регистрация: 19.10.2012
Сообщения: 95
Репутация: 10
По умолчанию

Спасибо ребят.
Первые трудности.
По методу Poli-smen'a у меня появляется ошибка при компиляции и при запуске процедуры
.
Project Project.exe raised exception class Eprinter with message "Printer is not currently printing". Process stopped. Use Step or Run to continue.

А по методу YVitaliy

Картинка получается не четкой и маленькой
Как это можно исправить. Тут можно найти pdf примера печати. http://www.aqula.ru/barcode.pdf
Как можно почетче распечатать и без ошибок?
Ответить с цитированием
  #11  
Старый 27.10.2012, 12:54
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от aqula
Спасибо ребят.
Первые трудности.
По методу Poli-smen'a у меня появляется ошибка при компиляции и при запуске процедуры
.
Project Project.exe raised exception class Eprinter with message "Printer is not currently printing". Process stopped. Use Step or Run to continue.
А ты делаешь перед этим "Printer.BeginDoc", а после этого "Printer.EndDoc"?
Цитата:
Сообщение от aqula
А по методу YVitaliy

Картинка получается не четкой и маленькой
Как это можно исправить.
Непонятно почему у тебя так плохо пропечаталось. У меня по методу YVitaliy нормально печатается (главное чтобы при печати компонента со штрих-кодом не была перекрыта чем либо).
А чтобы увеличить масштаб - вместо Draw используй StretchDraw.

И повторю ещё раз что идеальнее всего было бы доделать этот компонент, чтобы он мог пропечатывать штрих-код на произвольной канве.
Ответить с цитированием
  #12  
Старый 27.10.2012, 13:32
aqula aqula вне форума
Новичок
 
Регистрация: 19.10.2012
Сообщения: 95
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
А ты делаешь перед этим "Printer.BeginDoc", а после этого "Printer.EndDoc"?
Да про бегин и энд я забыл. Добавил - стал печатать. Вот распечатал в пдф вашим методом.
http://www.aqula.ru/barcode1.pdf
Цитата:
Сообщение от poli-smen
Непонятно почему у тебя так плохо пропечаталось. У меня по методу YVitaliy нормально печатается (главное чтобы при печати компонента со штрих-кодом не была перекрыта чем либо).
Что касается перекрываний вот моя формочка.
Вроде ничем не перекрывается.

Цитата:
Сообщение от poli-smen
И повторю ещё раз что идеальнее всего было бы доделать этот компонент, чтобы он мог пропечатывать штрих-код на произвольной канве.
Я не совсем понимаю что такое канва. А сейчас он как пропечатывает? Как масштабирует на листе? Видать что мне это будет сложно доделать.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:26.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter