Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Почему не печатает?

9.0K
22 августа 2007 года
mr_smit
64 / / 03.12.2006
Мне надо напечатать таблицу (строго по размерам) где много очень тонких линий. Попробовал для начала просто линию напечатать – получаю чистый лист. Ничего не печатается. Не пойму почему?

procedure TForm1.Button1Click(Sender: TObject);
begin
if PrintDialog1.Execute then
Printer.BeginDoc;
with Printer.Canvas do
begin
SetMapMode(Handle, MM_HIMETRIC);
{
одна наша единица = 0,01 мм при печати
т.е. 10 ед. = 0,1 мм
}

pen.Width:=10;
moveto(5000,1000);// 5 см вправо, 1 см вниз
lineto(5000,10000); //5 см вправо, 10 см вниз
end;
Printer.EndDoc;
end;;

Если изменить

SetMapMode(Handle, MM_HIMETRIC)
на
SetMapMode(Handle, MM_TEXT) // т.е. 1 наша единица = 1 единице устройства (1 пикселю принтера)

То печатается всё без проблем

procedure TForm1.Button1Click(Sender: TObject);
begin
if PrintDialog1.Execute then
Printer.BeginDoc;
with Printer.Canvas do
begin
SetMapMode(Handle, MM_TEXT);

pen.Width:=1; // примерно 0,1 мм
moveto(600,300); // 5 см и 2,5 см соответственно
lineto(600,1200); //5 см и 10 см соответственно
{
300 пикселей/дюйм - разрешение принтера
1 дюйм = 2,5 см
следовательно 600 наших единиц = 5 см
}

end;
Printer.EndDoc;
end;

Но не хочется привязываться к разрешению принтера. Если будет не 300, а например 200 или 250, то то все мои размеры “полетят”. Нужны тонкие линии заданной длинны на любом принтере.

Извечный русский вопрос: Что делать? Может еще какой параметр надо указать?
9.0K
23 августа 2007 года
mr_smit
64 / / 03.12.2006
Всё, понял. Оказывается положительная ось направлена в таком случае вверх и надо просто в моем коде добавить "-" :

procedure TForm1.Button1Click(Sender: TObject);
begin
if PrintDialog1.Execute then
Printer.BeginDoc;
with Printer.Canvas do
begin
SetMapMode(Handle, MM_HIMETRIC);

pen.Width:=10;
moveto(5000, -1000);// 5 см вправо, 1 см вниз
lineto(5000, -10000); //5 см вправо, 10 см вниз
end;
Printer.EndDoc;
end;
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог