
A mellékelt példaprogram megnyitása előtt a WordReport.pas-ban levő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A komponensben létrehoztunk egy ShowReport nevű függvényt, mely a Word dokumentum megjelenítését végzi. Nézzük meg ennek felépítését:
procedure TWordReport.ShowReport;
var
Range: Variant;
i, j: integer;
begin
Megvizsgáljuk, hogy van-e StringGrid megadva a komponens FGrid property-jében. Amennyiben igen, megnyitjuk a Word-öt, és létrehozunk egy új dokumentumot.
if FGrid = nil then
raise Exception.Create('Nincs grid kiválasztva!');
FWordApp := CreateOleObject('Word.Application');
try
FWordApp.Visible := True;
FWordApp.Documents.Add;
Amennyiben beállítottuk a dátum és az idő megjelenítését, elhelyezzük azokat a dokumentum fejlécében.
if FShowDate then begin
Range := FWordApp.Documents.Item(1);
Range := Range.Sections.Item(1);
Range := Range.Headers.Item(1).Range;
Range.Text := 'Dátum: ' + DateToStr(Date) + ' Idő: ' + TimeToStr(Time);
end;
A láblécben feltüntetjük az aktuális oldal sorszámát.
Range := FWordApp.Documents.Item(1);
Range := Range.Sections.Item(1);
Range := Range.Footers.Item(1);
Range.Range.Text := 'Oldal:';
Range.Range.ParagraphFormat.Alignment := ord(waAlignParagraphRight);
Range.PageNumbers.Add;
Ezután létrehozzuk a jelentés címét, és a komponensben beállítottak szerint formázzuk.
FWordApp.Documents.Item(1).Paragraphs.Add;
Range := FWordApp.Documents.Item(1).Range(
FWordApp.Documents.Item(1).Paragraphs.Item(FWordApp.Documents.Item(1).Paragraphs.Count - 1).Range.End,
FWordApp.Documents.Item(1).Paragraphs.Item(FWordApp.Documents.Item(1).Paragraphs.Count - 1).Range.End);
Range.Text := FTitle;
Range.Bold := fsBold in FTitleFont.Style;
...
Range.Font.Name := FTitleFont.Name;
Range.Font.Size := FTitleFont.Size;
Range.Font.ColorIndex := ord(FTitleColor);
Range.ParagraphFormat.Alignment := ord(FTitleAlignment);
...
Létrehozzuk a megadott StringGrid-el megegyező méretű Word táblázatot, és annak megfelelően formázzuk.
FWordApp.Documents.Item(1).Tables.Add(Range, FGrid.RowCount, FGrid.ColCount);
Range := FWordApp.Documents.Item(1).Tables.Item(FWordApp.Documents.Item(1).Tables.Count);
for i := 1 to FGrid.RowCount do
for j := 1 to FGrid.ColCount do begin
Range.Cell(i, j).Range.InsertAfter(FGrid.Cells[j-1, i-1]);
Azokat a cellákat, ahol a Grid-ben fix cellák találhatóak, a Word-ben is különböző színnel és betűtípussal jelenítjük meg.
if (i <= FGrid.FixedRows) or (j <= FGrid.FixedCols) then begin
Range.Cell(i, j).Range.Bold := True;
Range.Cell(i, j).Range.Shading.BackgroundPatternColorIndex := ord(wcGray25);
end
else begin
Range.Cell(i, j).Range.Bold := fsBold in FCellFont.Style;
...
Range.Cell(i, j).Range.Font.Name := FCellFont.Name;
Range.Cell(i, j).Range.Font.Size := FCellFont.Size;
Range.Cell(i, j).Range.Shading.BackgroundPatternColorIndex := FCellColor;
end;
end;
finally
end;
end;
A nyomtatási kép megjelenítését a PrintPreview függvény végzi.
procedure TWordReport.PrintPreview;
begin
ShowReport;
if not VarIsEmpty(FWordApp) then begin
FWordApp.PrintPreview := True;
end;
end;
Közvetlenül a nyomtatóra is küldhetjük a jelentést a Word PrintOut parancsával. Mindezt a PrintReport függvény valósítja meg.
procedure TWordReport.PrintReport;
begin
ShowReport;
if not VarIsEmpty(FWordApp) then begin
FWordApp.PrintOut;
end;
end;
A mellékelt példaprogramban mindhárom függvény működését kipróbálhatjuk.