Kaufmännische Software für Handel, Handwerk und Produktionsbetriebe
Aufgabe: Auf jede Rechnung soll im Fuß je nach Benutzer der EULANDA®
eine bestimmte Signatur gedruckt werden. Die Signaturen liegen auf der
Festplatte im Verzeichnis 'C:\Signaturen'
und heißen wie die jeweiligen Benutzer mit der Endung '.txt',
also
Franz.txt
Administrator.txt
Joseph.txt
Luise.txt usw.
Bekanntermaßen basieren Memos auf String Listen. Was also würde sich besser eigenen um die Signatur im Fuß anzuzeigen als ein Memo?
Im Fuß platziert man also ein Memo (MemoSignatur) und fügt in die Prozedur FooterBeforePrint folgendes ein:
procedure FooterBeforePrint;
var
Signatur: TStringList; { 1 }
begin
Signatur:=TStringList.create; { 2 }
Signatur.LoadFromFile( ( 'C:\Signaturen\' + Grundwerte['User'] + '.txt') ); { 3 }
MemoSignatur.Lines.Assign(Signatur); { 4 }
Signatur.Free; { 5 }
end;
Hierbei wird allerdings bei jeder neuen Seite auf die Festplatte
zugegriffen und die Signatur geladen, doch Festplattenzugriffe sind teuer
(kosten Zeit, die Festplatte ist ein sehr langsames Speichermedium, Zugriffe
auf den Hauptspeicher sind zwar immer noch verhältnismäßig langsam, aber um
ein Vielfaches schneller als Plattenzugriffe). Also bietet es sich an, die
Signatur einmal zu laden und dann immer wieder zu benutzen.
Dazu deklariert man unter Deklarationen --> Variables die StringList
...
var Signatur: TStringList;
... und lädt sie in ReportBeforePrint aus der Datei (geschieht genau einmal):
procedure ReportBeforePrint;
begin
Signatur:=TStringList.create;
Signatur.LoadFromFile( ( 'C:\Signaturen\' + Grundwerte['User'] + '.txt') );
end;
Sie ist dann im Hauptspeicher und somit kann man im Fuß immer wieder auf die bereits geladene Signatur zurückgreifen:
procedure FooterBeforePrint;
begin
MemoSignatur.Lines.Assign(Signatur);
end;
Aber nicht vergessen, die Liste muss wieder freigegeben werden (nach dem Drucken):
procedure ReportAfterPrint;
begin
Signatur.Free;
end;
Damit spart man für jede Seite (außer für die erste natürlich) den Plattenzugriff. Dies wird hier kaum ins Gewicht fallen, bei größeren Objekten wie Bildern z.B. kann es sich aber schon bemerkbar machen.