Как я могу напечатать текстовые поля с правильными координатами? - PullRequest
4 голосов
/ 12 мая 2010

У меня нет опыта в программировании, и это мой первый шанс.Я написал программу Delphi, которая должна печататься на листе результатов.Я работаю в институте, и мы должны составлять сотни таблиц результатов каждые 2 месяца.Это действительно трудно сделать, и другой почерк также является важной проблемой.У меня есть этот код:

if PrintDialog.Execute() then
    begin
      with MyPrinter do
      begin
          MyPrinter.BeginDoc();//Start Printing

          //Prints First Name
          MyPrinter.Canvas.TextOut(FirstNameX,FirstNameY,EditFirstName.Text);

          //Prints Last Name
          MyPrinter.Canvas.TextOut(LastNameX,LastNameY,EditLastName.Text);

          //Prints Level
          MyPrinter.Canvas.TextOut(LevelX,LevelY,EditLevel.Text);

          //Prints Date
          MyPrinter.Canvas.TextOut(DateX,DateY,MEditDate.Text);

          //Prints Student Number
          MyPrinter.Canvas.TextOut(StdNumX,StdNumY,EditStdnumber.Text);
          ....
          MyPrinter.EndDoc();//End Printing
        end;
      end;

Я не могу получить правильные координаты для печати правильно.Я что-то пропустил?Как я могу установить правильные координаты?Вы знаете, что TPrinter использует пиксели для получения координат, но бумага измеряется в дюймах или сантиметрах.Я действительно смущен.Я ценю любую помощь.

Ответы [ 2 ]

4 голосов
/ 12 мая 2010

@ Милад Я рекомендую вам использовать такой компонент отчета, как Быстрый отчет (поставляется с устаревшими версиями delphi и очень прост в использовании) или FreeReport (это бесплатно) для созданияВаша задача проще.

для получения дополнительной информации проверьте ссылки на тезисы

Если вы хотите печатать прямо из Delphi без компонентов, здесь я оставлю несколько ссылок, которые могут помочь.

1 голос
/ 12 мая 2010

Хотя использование инструмента отчетности - хорошая идея, если вы действительно хотите сделать это самостоятельно, вы можете это сделать. Я делаю это для печати на заказной бумаге в нашем приложении для лицензирования. Ключ заключается в том, чтобы узнать размер вашей бумаги и рассчитать ее, используя свойства принтера PageHeight и PageWidth. Для бумаги формата А4 я решил использовать 297 мм на 210 мм, и из этого я смог рассчитать, где я хочу, чтобы вещи были. Расчет сделан так:

nStartPos := 210-141;
nUserColX := muldiv(localPrinter.PageWidth, 187, 297);
nUserColY := muldiv(localPrinter.PageHeight, nStartPos, 210);

Переменная nStartPos используется для запуска в определенном месте, а затем nUserColY используется для перемещения вниз по строке, как показано здесь:

nUserColY := nUserColY - localPrinter.canvas.font.height - (localPrinter.canvas.font.height div 8);

Это позволяет более чем одной строке за раз уместиться. Это не завершено, но должно стать хорошим началом для пользовательской печати. ​​

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...