Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Сержа
57 / 56 / 9
Регистрация: 11.12.2009
Сообщений: 349
1

Печать на бумагу...

14.03.2010, 10:12. Просмотров 2055. Ответов 14
Метки нет (Все метки)

Всем привет!!!

Подскажите посоветуйте кто чем сможет!!!

Как распечатать стрингрид!!!
Как можно сформировать макет страницы...
Ну вообще хоть что-нибудь связанное с печатью!!!

Заранее спасибо...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.03.2010, 10:12
Ответы с готовыми решениями:

Печать на бумагу динамических изображений
Существует форма, на ней расположено фоновое изображение, т.к. оно большего...

Двусторонняя печать на матовой бумагу (редактирование драйвера)
Ситуация не стандартная, стало интересно, есть ли возможность что-нибудь...

HP LJ 1100 заминает бумагу
Проблема следующая- принтер печатает, если только страницу проглотит. А...

Принтер жует бумагу
Начало: http://www.cyberforum.ru/cable-networks/thread1571819.html#post8300138...

HP 1200 не захватывает бумагу
Добрый день. Принесли на ремонт HP 1200 не захватывал бумагу, после замены...

14
_pva
56 / 56 / 10
Регистрация: 27.02.2010
Сообщений: 282
14.03.2010, 12:39 2
Завтра сброшу пример
0
Dream
157 / 155 / 16
Регистрация: 26.07.2008
Сообщений: 549
14.03.2010, 13:04 3
Простейший пример печати:


Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
Uses Printers;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
 With Printer do Begin
  BeginDoc; // Начало печати
  Canvas.Font.Size:=10; //задали размер шрифта
  Canvas.Font.Color:=clBlue; //задали цвет шрифта
  Canvas.Font.Name:='DS Crystal'; // Задали шрифт
  Canvas.TextOut(0,0,'Моя первая печать на бумагу');  //Печатаем текст
  EndDoc; // Конец печати
 end;
end;
Добавлено через 1 минуту
Распечатается на принтере установленным по умолчанию.
Для настроек можно использовать TPrintDialog и PrinterSetupDialog.
1
Сержа
57 / 56 / 9
Регистрация: 11.12.2009
Сообщений: 349
14.03.2010, 13:17  [ТС] 4
Спасибо, буду ждать!!!
А как сформировать там таблицу и делать переход на следующую строку???
0
Mawrat
12827 / 5735 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
14.03.2010, 23:25 5
А вот как можно распечатать, например, содержимое Мемо:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
procedure TForm1.Button2Click(Sender: TObject);
var
  Prn : TPrinter;
  FPrn : TextFile;
  i : Integer;
  StrTmp : String;
begin
  //Запускаем диалог печати.
  if not PrintDialog1.Execute then Exit;
  //С помощью функции Printer получаем ссылку на объект, который представляет
  //сведения о принтерах в системе.
  Prn := Printer;
  //Связываем файловую переменную с текущим выбранным принтером.
  //Если принтер не выбирался, то будет использован принтер, установленный
  //по умолчанию.
  AssignPrn(FPrn);
  try
    //Открываем принтер для записи. Т. е. начинаем печать.
    Rewrite(FPrn);
    //Устанавливаем для канвы принтера такой же шрифт, какой
    //использован в Мемо.
    Prn.Canvas.Font := Memo1.Font;
    //Печать строк Мемо.
    for i := 0 to Memo1.Lines.Count - 1 do begin
      StrTmp := Memo1.Lines[i];
      Writeln(FPrn, StrTmp);
    end;
  finally
    //Закрываем принтер. Т. е. прекращаем печать.
    CloseFile(FPrn);
  end;
end;
В случае с TStringGrid нужно брать параметры ячеек и прорисовывать их на канве принтера через TextRect() или TextOut().
Ждём примера от _pva.
1
_pva
56 / 56 / 10
Регистрация: 27.02.2010
Сообщений: 282
15.03.2010, 14:32 6
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
procedure TProdStock.bbPrintProductClick(Sender: TObject);
 var
   P, I, J, YPos, XPos, HorzSize, VertSize: Integer;
   AnzSeiten, Seite, Zeilen, HeaderSize, FooterSize, ZeilenSize, FontHeight: Integer;
   mmx, mmy: Extended;
begin
  //  Установка размеров
  HeaderSize := 100;
  FooterSize := 200;
  ZeilenSize := 36;
  FontHeight := 36;
  //  Инициализация принтера
//  Printer.Orientation := poPortrait {poLandscape};
  Printer.Title  := 'Остатки' ;
  Printer.BeginDoc;
  //  Масштабирование
  mmx := GetDeviceCaps(Printer.Canvas.Handle, PHYSICALWIDTH) /
     GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSX) * 25.4;
  mmy := GetDeviceCaps(Printer.Canvas.Handle, PHYSICALHEIGHT) /
     GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSY) * 25.4;
  VertSize := Trunc(mmy) * 10;
  HorzSize := Trunc(mmx) * 10;
  SetMapMode(Printer.Canvas.Handle, MM_LOMETRIC);
  //  Центр
  Zeilen := (VertSize - HeaderSize - FooterSize) div ZeilenSize;
  //  Размещение сетки
  if DataModule2.ADOProd.RecordCount mod Zeilen <> 0 then
     AnzSeiten := DataModule2.ADOProd.RecordCount div Zeilen + 1
   else
     AnzSeiten := DataModule2.ADOProd.RecordCount div Zeilen;
  Seite := 1;
  //  Рисование линий
  for P := 1 to AnzSeiten do
   begin
    Printer.Canvas.Font.Height := 36;
    if bbPrintProduct.Tag = 0 then
        Printer.Canvas.TextOut(0, - 20, ('Остатки товара на '+ FormatDatetime('hh:nn:ss dd-mm-yyyy',now)))
       else Printer.Canvas.TextOut(0, - 20, ('Реестр товаров'));
    Printer.Canvas.Font.Height := FontHeight;
    YPos := HeaderSize + 20;
    XPos := 3;
    //  Печать шапки таблицы
    Printer.Canvas.TextOut(XPos, - YPos, 'Наименование');
    XPos := XPos + dbgProdStock.Columns[0].Width * 3;
    Printer.Canvas.TextOut(XPos, - YPos, 'К-во');
    XPos := XPos + dbgProdStock.Columns[1].Width * 3;
    YPos := YPos + FontHeight;
    DataModule2.ADOProd.First;
    //  Печать таблицы
    for I := 1 to Zeilen do
      begin
        if DataModule2.ADOProd.RecordCount >= I + (Seite - 1) * Zeilen then
          begin
            XPos := 3;
            for J := 0 to 1 do
              begin
              if bbPrintProduct.Tag = 0 then  Printer.Canvas.TextOut(XPos, - YPos, dbgProdStock.Fields[j].Value)
                else
                begin
                  if j = 0 then Printer.Canvas.TextOut(XPos, - YPos, dbgProdStock.Fields[j].Value)
                    else  Printer.Canvas.TextOut(XPos, - YPos, '');
                end;
                XPos := XPos + dbgProdStock.Columns[j].Width * 3;
                Printer.Canvas.MoveTo(0, - YPos);
                Printer.Canvas.LineTo(XPos,  - YPos);
              end;
            YPos := YPos + ZeilenSize;
            DataModule2.ADOProd.Next;
          end;
      end;
    Printer.Canvas.MoveTo(0, - YPos);
    Printer.Canvas.LineTo(XPos,  - YPos);
    XPos := 0;
    Printer.Canvas.MoveTo(XPos, - (HeaderSize + 20));
    Printer.Canvas.LineTo(XPos,  - YPos);
    For j:= 0 to 1 do
      begin
        XPos := XPos + dbgProdStock.Columns[j].Width * 3;
        Printer.Canvas.MoveTo(XPos, - (HeaderSize + 20));
        Printer.Canvas.LineTo(XPos,  - YPos);
      end;
    Inc(Seite);
    if Seite <= AnzSeiten then Printer.NewPage;
  end;
  Printer.EndDoc;
  close;
end;
Пример живой, выдернул со своего проекта. Единственное, что это печть ДБГрида, но переделать думаю будет не сложно...
и еще ... в uses добавить необходимо printers
1
Сержа
57 / 56 / 9
Регистрация: 11.12.2009
Сообщений: 349
19.03.2010, 18:31  [ТС] 7
_pva, DataModule2.ADOProd.RecordCount, что это???
А как к stringgrid привязать?
0
turboq
156 / 156 / 12
Регистрация: 14.01.2010
Сообщений: 1,448
19.03.2010, 20:07 8
Если хочешь таблицу то и рисуй таблицу.
0
Сержа
57 / 56 / 9
Регистрация: 11.12.2009
Сообщений: 349
20.03.2010, 07:00  [ТС] 9
turboq, а каким способом?
0
turboq
156 / 156 / 12
Регистрация: 14.01.2010
Сообщений: 1,448
20.03.2010, 10:47 10
Вот так приблизительно можно ее рисовать:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.Button1Click(Sender: TObject);
var
i,e,w,h,l,t:integer;
begin
w:=150;h:=125;l:=150;t:=150;
Printer.BeginDoc;
  for i:=0 to 4 do
  begin
     for e:=0 to 4 do
     begin
     Printer.Canvas.Rectangle(e*w-1+l,h*i-1+t,e*w+w+l,i*h+h+t);
     Printer.Canvas.Brush.Style:=bsClear;
     Printer.Canvas.TextRect(rect(e*w+l,h*i+t,e*w+w+l,i*h+h+t),e*w-1+l,h*i-1+t,'qwe');
     end;
  end;
Printer.EndDoc;
end;
Сам привяжешь стринггрид к таблице.
Но тут нет центровки и переход на измерения принтера как сделать я не знаю(не занимался) ищи в инете. Вообще это просто простой пример. А для отчетов надо использовать рейв репорт (я не пробовал)
0
Сержа
57 / 56 / 9
Регистрация: 11.12.2009
Сообщений: 349
21.03.2010, 08:31  [ТС] 11
Всем спасибо за помощь!!!

Все печатает как надо, но формировать печать имея много Stringgrid на форме очень трудно!!! особенно делать выравнивание...
Дак вот, подскажите еще, как можно распечатать конкретную область формы (т.е распечатать форму или ее часть как коринкой)
0
adelbaew
4 / 4 / 0
Регистрация: 30.06.2011
Сообщений: 175
30.10.2011, 10:27 12
А подскажите : возможно ли печать переменной которая не указана в label или memo с помощью canvas?*

и еще если через label возможна печать - можно ли как нибудь скрыть label - на форме - чтобы он был как будто бы за формой? - то есть компонент есть - но на форме его выполнения ни кто не видит?
0
Сержа
57 / 56 / 9
Регистрация: 11.12.2009
Сообщений: 349
31.10.2011, 18:19  [ТС] 13
adelbaew, невидимость label - label1.Visible:=false или просто в свойстве label изменить visible c true на false!
А про печать что-то я не понял что ты хочешь сделать!)))
1
adelbaew
4 / 4 / 0
Регистрация: 30.06.2011
Сообщений: 175
31.10.2011, 19:27 14
спасибо добрый знающий человек .. просто я вывожу их через печать - так вообще круто - я так думаю можно с изображениями делать? тоесть c timage
0
Сержа
57 / 56 / 9
Регистрация: 11.12.2009
Сообщений: 349
31.10.2011, 19:45  [ТС] 15
adelbaew, это работает со всеми объектами в delphi! )))
0
31.10.2011, 19:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.10.2011, 19:45

Из картриджа зажевывает бумагу
Принтер зажевывает бумагу. Поставил другой картридж, не зажевывает, поставил...

Принтер жует бумагу
принтер samsung MLT 2160 жует бумагу, конец бумаги выходит волнистой. в чем...

Canon ip4300 не прокручивает бумагу
принтер не прокручивает бумагу. Захватывает, пропускает до ролика или вала,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru