Picture Beispiel
Zuletzt geändert: 12.06.2023 07:36

Picture Beispiel (Pascal-Script) #

Aufgabe: Auf jede Rechnung soll im Fuß je nach Benutzer der EULANDA® ein bestimmtes Bild gedruckt werden. Die Bilder liegen auf der Festplatte im Verzeichnis ‘C:\Bilder’ und heißen wie die jeweiligen Benutzer mit der Endung ‘.jpg’, also:

Franz.jpg
Administrator.pg
Joseph.jpg
Luise.jpg  
usw.

Im Fuß platzieret man dazu ein Bild (Image) und fügt in die Prozedur FooterBeforePrint folgendes ein:

procedure FooterBeforePrint;
   begin
     Imgage.Picture.LoadFromFile( ('c:\Bilder\' + Grundwerte['User'] + '.jpg') );
   end;

Das wars schon. Damit wird das entsprechende Bild geladen und im Fuß angezeigt. Man sollte darauf achten, dass die Bilder entweder immer gleich groß sind oder aber die „Automatische Größenanpassung“ aktiviert ist. In letzterem Fall muss man darauf achten dass die Bilder nicht zu groß werden und nicht mehr in den Fuß passen!

Hierbei wird allerdings bei jeder neuen Seite auf die Festplatte zugegriffen und das Bild 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, das Bild einmal zu laden und dann immer wieder zu benutzen. Dazu deklariert man unter Deklarationen –> Variables ein TPicture:

var
   Bild: TPicture;

… und lädt es in ReportBeforePrint aus der Datei (geschieht genau einmal):

procedure ReportBeforePrint;
  begin
     Bild:= TPicture.create;	
     Bild.LoadFromFile( ( 'C:\Bilder' + Grundwerte['User'] + '.jpg') );
  end;

Das Bild ist dann im Hauptspeicher und man kann im Fuß immer wieder auf das bereits geladene Bild zurückgreifen:

procedure FooterBeforePrint;
  begin
    Image.Picture.Assign(Bild);
  end;

Aber nicht vergessen, auch ein Bild muss wieder freigegeben werden (nach dem Drucken):

procedure ReportAfterPrint;
  begin
     Bild.Free;
  end;

Damit spart man für jede Seite (außer für die erste natürlich) den Plattenzugriff, bei relativ großen Bildern kann sich das durchaus bemerkbar machen.