(Gast)
n/a Beiträge
|
Re: TImage überschreiben
5. Jul 2006, 09:08
ist ein kleineres Projekt
sorry, war etwas neben der Kappe gestern!
also:
1. Formular MainWindow mit TImage und Menü - darunter eben auch der Menüpunkt ändern, der folgenden Quellcode enthält:
Delphi-Quellcode:
procedure TMainWindow.AendernClick(Sender: TObject);
begin
if Eingabe.ShowModal = mrOK then
begin
// Detailansicht verfügbar machen
BildGroesse(3);
if TJubilaeum then
PAusgabe(1, main.MainWindow.Bild.Canvas, 'B', 'J')
else if TTeilwert then
PAusgabe(1, main.MainWindow.Bild.Canvas, 'B', 'T')
else if TIAS then
PAusgabe(1, main.MainWindow.Bild.Canvas, 'B', 'I');
// Menüeinträge verfügbar machen
Bearbeiten.Enabled:=True;
Drucken.Enabled:=True;
end;
end;
2. Forumal Eingabe - hier werden Daten eingegeben, die dann berechnet werden (in ziemlich vielen anderen Units, aber das ist ja nicht das Problem)
3. Die Grafiken werden wie schon gesagt in der Unit Ausgabe initialisiert. Hier mal der gekürzte Quellcode:
Delphi-Quellcode:
{******************************************************************************}
{ PROCEDURE : BildGroesse }
{ }
{ AUFGABE: legt die Höhe des Bild.Canvas auf die angegebene Anzahl Seiten fest }
{******************************************************************************}
procedure BildGroesse(Seitenzahl: Integer);
begin
with Mainwindow do
begin
bild.visible := true;
bild.Align := alclient;
bild.align:= alnone;
bild.Left := 20;
bild.width := 2*round(bild.Height*0.7);
bild.height := 2 * Seitenzahl*bild.Height;
myprint.pagex := mainwindow.Bild.Width;
myprint.pagey := mainwindow.Bild.Height div Seitenzahl;
diff := 0;
end;
end;
{********************************************************}
{ PROCEDURE : PAusgabe }
{ }
{ AUFGABE: erzeugt die Bildschirmausgabe sowie den Druck }
{********************************************************}
procedure PAusgabe( copies: integer; // Anzahl Ausdrucke
target:tcanvas; // target : entweder bild.canvas
// oder printer.canvas
targetStr: Char; // targetstr : entweder 'B' für Bildschirmausgabe
// oder 'D' für Drucker
Ausgabe: char); // Ausgabe : entweder T für Teilwertausgabe
// oder J für Jubiläumsausgabe
label LTeilwert, LEnde, LJubilaeum1, LJubilaeum2, LJubilaeum3, LJubilaeum4,
LJubilaeum5, LJubilaeum6, LJubilaeum7, LIAS;
var copycount,i,p,pmax,ep : Integer;
lf : logfont;
begin
with mainwindow do
begin
for copycount := 1 to Copies do
begin
myprint.target:=target;
if targetstr = 'D' then
begin
Printer.Title := 'Teilwert v. 4.0';
myprint.pagex := printer.pagewidth;
myprint.pagey := printer.pageheight;
Diff := 0;
p:=0;
// 83 ist Druckendalter!
pmax:=trunc((83-AngDaten.PersDaten.PersX-p*22) / 22);
if (83-AngDaten.PersDaten.PersX-p*22) mod 22 > 0 then pmax:=pmax+1;
printer.BeginDoc;
end; // if targetstr = 'D' then
lf.lfCharSet := DEFAULT_CHARSET;
lf.lfFaceName := 'Arial';
target.Font.Handle := CreateFontIndirect(lf);
target.Font.Color := clblack;
if targetstr <> 'D' then BildGroesse(2);
if Ausgabe = 'T' then
GoTo LTeilwert
//....
{*********************** Beginn LTeilwert ***********************}
LTeilwert:
target.Font.Style:= [];
lf.lfFaceName := 'Arial Narrow';
target.Font.Handle := CreateFontIndirect(lf);
// entsprechend zu druckende Zeilen
if pmax > p+1 then ep := 22
else ep := 83-AngDaten.PersDaten.PersX-p*22-1;
p:=p+1;
// Überschrift Dokument
target.Font.Style:= [fsBold,fsUnderline];
setfont(16);
prntext(3,1.5,'VERSICHERUNGSMATHEMATISCHE BERECHNUNGEN',0,0);
target.Font.Style:= [fsBold];
setfont(11);
prntext(5,2.3,'Richttafeln 2005 von Dr. Klaus Heubeck',0,0);
with AngDaten.EinDaten do
begin
setfont(10);
prntext(3,3,'Firma:',0,0);
prntext(6,3,EinFirma,0,0);
prntext(3,3.5,'Personalnummer:',0,0);
prntext(6,3.5,EinPersNr,0,0);
//...
// beim Ausdrucken Datum sowie Seitenzahlen angeben
if targetstr = 'D' then
begin
target.font.Pitch := fpDefault;
//prnline(0,28,maxx,28);
SetFont(12);
prntext(0,28.5,datetostr(date),0,0);
prntext(18,28.5,'Seite '+inttostr(p)+'/'+inttostr(pmax),0,0);
// neue Seite ausdrucken wenn notwendig
if p < pmax then
begin
Printer.NewPage;
goto LTeilwert;
end; // if p < pmax then
end; // if targetstr = 'D' then
Goto LEnde;
{************************* Beginn LEnde *************************}
LEnde:
if targetstr = 'D' then if printer.Printing = true then printer.enddoc;
if Ausgabe = 'J' then
if targetstr <> 'B' then BildGroesse(7);
end;
end;
end;
Ich weiß, vielleicht würde es über einen Report besser/leichter gehen, aber ich musste den Quellcode von meinem Vorgänger übernehmen...
jetzt klarer?
|