Guest User

Untitled

a guest
Jun 19th, 2016
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 5.24 KB | None | 0 0
  1.  
  2. unit UPrinting;
  3.  
  4. interface
  5.  
  6. uses
  7.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  8.   Dialogs, DB, Grids, DBGrids, ADODB, ExtCtrls, DBCtrls, ComCtrls, comobj, OleServer, ExcelXP, UMain;
  9.  
  10. type
  11.   TPrinting = class(TForm1)
  12.     procedure CreateWord(const visible: Boolean);
  13.     procedure Print;
  14.     procedure PBar;
  15.  
  16.   private
  17.  
  18.   public
  19.  
  20.   end;
  21.  
  22. var
  23.   Printing: TPrinting;
  24.   Word1: Variant;
  25.   pb: TProgressBar;
  26.  
  27. implementation
  28.  
  29. // uses UMain;
  30.  
  31.  
  32.  
  33. procedure TPrinting.CreateWord(const visible: Boolean);  // «Создание объекта Word.Application».
  34. begin
  35.   Word1 := CreateOleObject('Word.Application');
  36.   Word1.visible := visible;
  37.   Word1.Documents.Add;
  38. end;
  39.  
  40. procedure TPrinting.PBar;
  41. var
  42.   pb: TProgressBar;
  43. begin
  44.   pb := TProgressBar.create(Self);
  45.   pb.parent := Form1;
  46.   pb.Top := 350;
  47.   pb.Left := 350;
  48.   pb.Smooth := True;
  49.   pb.Max := Form1.ADOQuery1.RecordCount;
  50.   pb.Visible := True;
  51.   Form1.ADOQuery1.RecNo := 1;
  52. end;
  53.  
  54. procedure TPrinting.Print;
  55. var
  56.   WordTable, WordRow: OleVariant;
  57.   I: Integer;
  58. begin
  59.   CreateWord(True); //«Создание отчета в новом документе Word».;
  60.    {
  61. «InsertBefore вставляет текст в начало содержимого Range - объекта работы с текстом»
  62. и «InsertAfter вставляет текст в конец содержимого Range».
  63.                                                             }
  64.  
  65.                                                              // Word1.ActiveDocument.tables.item(1).columns.item(<номер столбца>).delete // удалить столбцы
  66.   if ADOQuery1.FieldCount > 2 then
  67.     Word1.activeDocument.PageSetup.Orientation := 1; // Альбомная
  68.  //Word1.activeDocument.PageSetup.Orientation := 0; // Книжная
  69.  
  70.   Word1.ActiveDocument.Range.InsertBefore (Form1.Caption + ' ');
  71.   Word1.ActiveDocument.Range.InsertAfter (#13+#10+'cпециальности: "Программное обеспечение"'+#13+#10);
  72.   Word1.ActiveDocument.Range.InsertAfter ('вычислительной техники и автоматизированных систем'+#13+#10+#13+#10);
  73.     //«Изменение параметров абзаца и шрифта».
  74.   Word1.ActiveDocument.Range.ParagraphFormat.Alignment := 1;
  75.   Word1.ActiveDocument.Range.Font.Name := 'Times New Roman';
  76.   Word1.ActiveDocument.Range.Font.Size := 16;
  77.   Word1.ActiveDocument.Range.Font.Bold := True;
  78.   Word1.ActiveDocument.Range.Characters.Last.Font.Size := 12;;   //Изменение формата абзаца со следующей строки
  79.   Word1.ActiveDocument.Range.Characters.Last.Font.Bold := False;
  80.     //Создание таблицы
  81.   Word1.ActiveDocument.Tables.Add(Word1.ActiveDocument.Range.Characters.Last,1,adoQuery1.Fields.Count);
  82.   WordTable := Word1.ActiveDocument.Tables.Item(1);
  83.   // Изменение ширины столбцов
  84.   if ADOQuery1.FieldCount = 9 then
  85.   begin
  86.     Word1.ActiveDocument.tables.item(1).columns.item(1).PreferredWidth := 50;
  87.     Word1.ActiveDocument.tables.item(1).columns.item(2).PreferredWidth := 90;
  88.     Word1.ActiveDocument.tables.item(1).columns.item(3).PreferredWidth := 90;
  89.     Word1.ActiveDocument.tables.item(1).columns.item(4).PreferredWidth := 100;
  90.     Word1.ActiveDocument.tables.item(1).columns.item(7).PreferredWidth := 110;
  91.   end;
  92.   if ADOQuery1.FieldCount = 5 then
  93.   begin
  94.     //
  95.   end;
  96.  
  97.     for I := 1 to DBGrid1.fieldcount do
  98.       begin
  99.       WordTable.Cell(1,i).range.text := (DBGrid1.Columns[i-1].title.caption);
  100.       WordTable.Cell(1,i).range.font.bold := True;
  101.       end;
  102.   with adoquery1 do
  103.     while not eof do begin
  104.     pb.Position := ADOQuery1.RecNo;
  105.     //Добавляя новые строки
  106.     WordRow := WordTable.Rows.Add;
  107.     if ADOQuery1.FieldCount = 9 then
  108.     begin
  109.       WordTable.Cell(WordRow.Index, 2).Range.ParagraphFormat.Alignment := 0;
  110.       WordTable.Cell(WordRow.Index, 3).Range.ParagraphFormat.Alignment := 0;
  111.       WordTable.Cell(WordRow.Index, 4).Range.ParagraphFormat.Alignment := 0;
  112.       WordTable.Cell(WordRow.Index, 9).Range.ParagraphFormat.Alignment := 0;
  113.     end;
  114.     if ADOQuery1.FieldCount = 5 then
  115.     begin
  116.      WordTable.Cell(WordRow.Index, 1).Range.ParagraphFormat.Alignment := 0;
  117.      WordTable.Cell(WordRow.Index, 2).Range.ParagraphFormat.Alignment := 0;
  118.      WordTable.Cell(WordRow.Index, 3).Range.ParagraphFormat.Alignment := 0;
  119.     end;
  120.  
  121.     for I := 1 to FieldCount do
  122.       // Вписываем в ячейки данные
  123.       begin
  124.       WordTable.Cell(WordRow.Index, i).Range.Text := Fields[i-1].AsString;
  125.       WordTable.Cell(WordRow.Index,i).range.font.bold := False;
  126.      // WordTable.Cell(WordRow.Index,i).range.ParagraphFormat.Alignment := 0;
  127.       end;
  128.       adoquery1.Next;
  129.     end;
  130.     WordTable.borders.enable := True;
  131.     Word1.ActiveDocument.Range.Characters.Last.ParagraphFormat.Alignment := 0;
  132.     Word1.ActiveDocument.Range.InsertAfter(#13+#10);
  133.     Word1.ActiveDocument.Range.InsertAfter(#13+#10);
  134.     Word1.ActiveDocument.Range.InsertAfter ('Подпись________________                                                        ');
  135.     Word1.ActiveDocument.Range.InsertAfter (Date);
  136.     pb.Destroy;
  137.  
  138. end;
  139.  
  140. end.
Add Comment
Please, Sign In to add comment