Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.07.2009, 19:05   #1
The Best
Пользователь
 
Регистрация: 17.12.2008
Сообщений: 50
По умолчанию Печать из файла

Я в своей программе написал печать данных, но у меня проблема: Как определить размеры символов. Я думал, что если размер шрифта 14, то это 14х14 пикселов, но оказалось - нет. И ещё, как определить межстрочный интервал для печати? Зарание спасибо..
The Best вне форума Ответить с цитированием
Старый 15.07.2009, 23:35   #2
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

А как вы печатаете? На объекте TPrinter?
Цитата:
Я думал, что если размер шрифта 14, то это 14х14 пикселов, но оказалось - нет
Каждый символ имеет разную длину. Чтобы узнать длину какого-либо текста или просто символа в пикселах, примерно надо писать так:
Код:
tw := Printer.Canvas.TextWidth('text');
Для высоты:
Код:
th := Printer.Canvas.TextHeight('text');
Цитата:
как определить межстрочный интервал для печати?
Тут не знаю, смотря как вы печатаете. Можно методом тыка.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Neeter вне форума Ответить с цитированием
Старый 16.07.2009, 00:19   #3
The Best
Пользователь
 
Регистрация: 17.12.2008
Сообщений: 50
По умолчанию

Вот часть кода из процедуры печати:
Код:
dpiX := GetDeviceCaps(Printer.handle,LOGPIXELSX);
dpiY := GetDeviceCaps(Printer.handle,LOGPIXELSY);
kx := dpiX / Screen.PixelsPerInch;
ky := dpiY / Screen.PixelsPerInch;
px := Round(LEFT_MARGIN / 2.54 * dpiX);
py := Round(TOP_MARGIN  / 2.54 * dpiY);
Код:
if printdialog1.Execute then
 with printer do
  begin
   begindoc;
   try
    for I:=1 to filesize(*) do
     begin
      canvas.TextOut(px,py+200+500*(i-1),*);
      canvas.TextOut(144+px,py+200+500*(i-1),**);
      canvas.TextOut(650+px,py+200+500*(i-1),***);
      for j:=1 to 5 do
       begin
        canvas.TextOut(950+px,py+200+500*(i-1)+100*(j-1),inttostr(*[j].*));
        canvas.TextOut(1230+px,py+200+500*(i-1)+100*(j-1),inttostr(*[j].*));
        canvas.TextOut(1780+px,py+200+500*(i-1)+100*(j-1),inttostr(*[j].*));
        canvas.TextOut(2220+px,py+200+500*(i-1)+100*(j-1),inttostr(*[j].*));
       end;
     end;
   finally
    if printing then
     enddoc;
   end;
Neeter, спасибо)
PS: Межстрочный интервал мне просто для интереса, чтобы знать)

Последний раз редактировалось The Best; 16.07.2009 в 00:26. Причина: добавил пару слов)
The Best вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перезапись файла без путя или определение расположения файла программы The Best Общие вопросы Delphi 4 13.07.2009 22:50
Печать .doc файла MaZai Microsoft Office Excel 3 06.11.2008 14:50
Два XL файла, данные 1-го файла являются частью другого в формуле 2-го Кот Microsoft Office Excel 2 14.08.2007 16:56
Печать текстового файла на сетевой принтер VAbramyak Общие вопросы Delphi 3 06.04.2007 20:16