Registriert seit: 18. Jan 2008
594 Beiträge
|
Re: Fehler bei JPEG-Umwandlung
22. Mär 2008, 08:10
das mit dem memory stream ist ganz gut, nur will ich die bmp vorher nicht erstauf der festplatte speichern, sondern direkt ausdem programm umwandeln!
dein code sieh aber net danach aus!
so und hier jetzt der komlette code!
Delphi-Quellcode:
procedure TFRechnung.Button4Click(Sender: TObject);
var Eintrag, tmp : string;
i , u ,breite,hoehe: integer;
Preis : extended;
Tabellenanfang , Artikel_von_letzter_seite : integer;
year, month , day : word;
Zahldatum : string;
datum : tdate;
bild : TJPEGIMAGE;
zeit1 , zeit2 : tdatetime;
pic : TJPEGImage;
begin
Seitenanzahl := 1;
Aktuelle_Seite := 1;
Aktuelle_rechnung.Clear;
if edit4.Text = '' then
begin
showmessage('Bitte wählen Sie einen Kunden aus!');
exit;
end;
if edit5.Text = '' then
begin
showmessage('Bitte geben Sie das Rechnungsdatum an!');
edit5.SetFocus;
exit;
end;
if edit6.Text = '' then
begin
showmessage('Bitte geben Sie das Lieferdatum an!');
edit6.SetFocus;
exit;
end;
if (edit7.Text = '') or (stringgrid1.RowCount - 1 = 0) then
begin
showmessage('Bitte wählen Sie mindestens einen Artikel aus!');
exit;
end;
rechnungNr := ReNr(edit4.Text);
with Rechnung.canvas do
begin
pen.color := clwhite;
brush.color := clwhite;
font.color := clblack;
font.name := 'Arial';
font.Size := 66;
//Addresskopf
textout(550,550,'Sabine Mucha');
textout(550,660,'Calvisiusstraße 31');
textout(550,770,'04177 Leipzig');
//Datum
textout(3135,1980,'Leipzig, den ' + edit5.text);
// Addreskopf Kunde
textout(550,1320,edit1.text);
textout(550,1430,edit2.text);
textout(550,1540,edit3.text);
textout(550,1650,'KdNr.: ' + edit4.Text);
Aktuelle_rechnung.Add(edit4.Text);
Aktuelle_rechnung.Add(edit1.Text);
Aktuelle_rechnung.Add(edit2.Text);
Aktuelle_rechnung.Add(edit3.Text);
Aktuelle_rechnung.Add(edit5.text);
//Betreffkopf
font.Style := [fsbold];
textout(550,2310,'Rechnung Nr.: '+ RechnungNr);
font.Style := [];
Aktuelle_rechnung.Add(RechnungNr);
//Anrede
Eintrag := Kundendatei.strings[AktuellerKunde];
Eintrag := copy(Eintrag,pos('{',Eintrag) + 1, length(Eintrag));
tmp := copy(Eintrag,1,pos('{',Eintrag) - 1);
Eintrag := copy(Eintrag,pos('{',Eintrag) + 1, length(Eintrag));
if tmp = 'Herr' then
textout(550,2750,'Sehr geehrter Herr ' + copy(Eintrag,1,pos('{',Eintrag) - 1 ) + ',')
else
textout(550,2750,'Sehr geehrte Frau ' + copy(Eintrag,1,pos('{',Eintrag) - 1 ) + ',');
// Text
textout(550,2970,'am ' + edit6.Text + ' lieferten wir Ihnen wie folgt:');
Aktuelle_rechnung.Add(edit6.text);
// Tabellenkopf
font.Style := [fsbold];
textout(550,3190,'Anzahl');
textout(935,3190,'Bezeichnung');
textout(2145,3190,'Einzelpreis');
textout(2860,3190,'Gesamtpreis');
pen.Width := 6;
pen.Color := clblack;
moveto(533,3289);
lineto(533,3173);
lineto(3410,3173);
lineto(3410,3289);
lineto(533,3289);
moveto(918,3173);
lineto(918,3289);
moveto(2128,3173);
lineto(2128,3289);
moveto(2843,3173);
lineto(2843,3289);
Tabellenanfang := 3300;
Artikel_von_letzter_seite := 0;
// Tabelleneinträge
font.Style := [];
if FRechnung.StringGrid1.RowCount > 1 then
for i := 0 to FRechnung.StringGrid1.RowCount - 2 do
begin
if (i > 23 ) and (Artikel_von_letzter_seite = 0) then
begin
// Seite Speichern zum drucken
Rechnung.Picture.Graphic.savetofile(extractfilepath(paramstr(0)) + '\Daten\Rechnungen\Seite' + inttostr(Aktuelle_Seite) + '.bmp');
Bild := TJPEGIMAGE.create;
Bild.Assign(Rechnung.Picture.Bitmap);
Bild.savetofile(extractfilepath(paramstr(0)) + '\Daten\Rechnungen\Seite' + inttostr(Aktuelle_Seite) + '.jpeg');
bild.Free;
deletefile(extractfilepath(paramstr(0)) + '\Daten\Rechnungen\Seite' + inttostr(Aktuelle_Seite) + '.bmp');
Tabellenanfang := 550;
inc(Seitenanzahl);
inc(Aktuelle_Seite);
Artikel_von_letzter_seite := i;
with Rechnung.Canvas do
begin
pen.Color := clwhite;
rectangle(0,0,4548,6660);
pen.Color := clblack;
pen.Width := 6;
moveto(533,533);
lineto(3410,533);
end;
end;
if (Tabellenanfang + (i - Artikel_von_letzter_seite) * 110) > 5665 then
begin
Tabellenanfang := 550;
inc(Seitenanzahl);
// Seite speichern zum Drucken
Rechnung.Picture.Graphic.savetofile(extractfilepath(paramstr(0)) + '\Daten\Rechnungen\Seite' + inttostr(Aktuelle_Seite) + '.bmp');
Bild := TJPEGIMAGE.create;
Bild.Assign(Rechnung.Picture.Bitmap);
Bild.savetofile(extractfilepath(paramstr(0)) + '\Daten\Rechnungen\Seite' + inttostr(Aktuelle_Seite) + '.jpeg');
bild.Free;
deletefile(extractfilepath(paramstr(0)) + '\Daten\Rechnungen\Seite' + inttostr(Aktuelle_Seite) + '.bmp');
inc(Aktuelle_Seite);
Artikel_von_letzter_seite := i;
with Rechnung.Canvas do
begin
pen.Color := clwhite;
rectangle(0,0,4548,6660);
pen.Color := clblack;
pen.Width := 6;
moveto(533,533);
lineto(3410,533);
end;
end;
Aktuelle_rechnung.Add(StringGrid1.Cells[2,i] + '}' + StringGrid1.Cells[0,i] + '}' + StringGrid1.Cells[1,i] + '}' + StringGrid1.Cells[3,i]);
FRechnung.StringGrid1.cells[1,i] := Komma(copy(FRechnung.StringGrid1.cells[1,i],1,length(FRechnung.StringGrid1.cells[1,i]) - 1)) + '€';
FRechnung.StringGrid1.cells[3,i] := Komma(copy(FRechnung.StringGrid1.cells[3,i],1,length(FRechnung.StringGrid1.cells[3,i]) - 1)) + '€';
textout(550,Tabellenanfang + (i - Artikel_von_letzter_seite) * 110,copy(FRechnung.StringGrid1.Cells[2,i],1,length(FRechnung.StringGrid1.cells[2,i]) - 1));
textout(935,Tabellenanfang + (i - Artikel_von_letzter_seite) * 110,FRechnung.StringGrid1.Cells[0,i]);
textout(2733 - canvas.TextWidth(FRechnung.StringGrid1.cells[1,i]),Tabellenanfang + (i - Artikel_von_letzter_seite) * 110,FRechnung.StringGrid1.cells[1,i]);
textout(3283 - canvas.TextWidth(FRechnung.StringGrid1.cells[3,i]),Tabellenanfang + (i - Artikel_von_letzter_seite) * 110,FRechnung.StringGrid1.cells[3,i]);
pen.Width := 6;
pen.Color := clblack;
moveto(533,Tabellenanfang - 2 + ((i - Artikel_von_letzter_seite) + 1) * 110);
lineto(3410,Tabellenanfang - 2 + ((i - Artikel_von_letzter_seite) + 1) * 110);
moveto(2931,Tabellenanfang - 2 + (i - Artikel_von_letzter_seite) * 110);
lineto(2931,Tabellenanfang - 2 + ((i - Artikel_von_letzter_seite) + 1) * 110);
moveto(918,Tabellenanfang - 2 + (i - Artikel_von_letzter_seite) * 110);
lineto(918,Tabellenanfang - 2 + ((i - Artikel_von_letzter_seite) + 1) * 110);
moveto(2128,Tabellenanfang - 2 + (i - Artikel_von_letzter_seite) * 110);
lineto(2128,Tabellenanfang - 2 + ((i - Artikel_von_letzter_seite) + 1) * 110);
moveto(2843,Tabellenanfang - 2 + (i - Artikel_von_letzter_seite) * 110);
lineto(2843,Tabellenanfang - 2 + ((i - Artikel_von_letzter_seite) + 1) * 110);
moveto(3410,Tabellenanfang - 2 + (i - Artikel_von_letzter_seite) * 110);
lineto(3410,Tabellenanfang - 2 + ((i - Artikel_von_letzter_seite) + 1) * 110);
end;
textout(2145,Tabellenanfang + ((i - Artikel_von_letzter_seite) + 1) * 110,'Zzgl. 19% MwSt.');
Preis := strtofloat(copy(FRechnung.Edit7.Text,1,length(FRechnung.Edit7.Text)));
tmp := floattostr(roundto((Preis * 0.19),-2));
tmp := Komma(tmp);
Aktuelle_rechnung.Add(tmp);
textout(3283 - canvas.TextWidth(tmp + '€'),Tabellenanfang + ((i - Artikel_von_letzter_seite) +1) * 110,tmp + '€');
moveto(2128,Tabellenanfang - 2 + (i - Artikel_von_letzter_seite) * 110);
lineto(2128,Tabellenanfang - 2 + ((i - Artikel_von_letzter_seite) + 1) * 110);
lineto(3410,Tabellenanfang - 2 + ((i - Artikel_von_letzter_seite) + 1) * 110);
lineto(3410,Tabellenanfang - 2 + (i - Artikel_von_letzter_seite) * 110);
lineto(2128,Tabellenanfang - 2 + (i - Artikel_von_letzter_seite) * 110);
moveto(2843,Tabellenanfang - 2 + (i - Artikel_von_letzter_seite) * 110);
lineto(2843,Tabellenanfang - 2 + ((i - Artikel_von_letzter_seite) + 1) * 110);
moveto(2128,Tabellenanfang - 2 + ((i - Artikel_von_letzter_seite) + 1) * 110);
lineto(2128,Tabellenanfang - 2 + ((i - Artikel_von_letzter_seite) + 2) * 110);
lineto(3410,Tabellenanfang - 2 + ((i - Artikel_von_letzter_seite) + 2) * 110);
lineto(3410,Tabellenanfang - 2 + ((i - Artikel_von_letzter_seite) + 1) * 110);
lineto(2128,Tabellenanfang - 2 + ((i - Artikel_von_letzter_seite) + 1) * 110);
moveto(2843,Tabellenanfang - 2 + ((i - Artikel_von_letzter_seite) + 1) * 110);
lineto(2843,Tabellenanfang - 2 + ((i - Artikel_von_letzter_seite) + 2) * 110);
tmp := floattostr(roundto((Preis * 1.19),-2));
tmp := Komma(tmp);
Aktuelle_rechnung.Add(tmp);
font.Style := [fsbold];
Textout(2145,Tabellenanfang + ((i - Artikel_von_letzter_seite) + 2) * 110,'Gesamt');
textout(3283 - canvas.TextWidth(tmp + '€'),Tabellenanfang + ((i - Artikel_von_letzter_seite) +2) * 110,tmp + '€');
moveto(2128,Tabellenanfang - 2 + ((i - Artikel_von_letzter_seite) + 2) * 110);
lineto(2128,Tabellenanfang - 2 + ((i - Artikel_von_letzter_seite) + 3) * 110);
lineto(3410,Tabellenanfang - 2 + ((i - Artikel_von_letzter_seite) + 3) * 110);
lineto(3410,Tabellenanfang - 2 + ((i - Artikel_von_letzter_seite) + 2) * 110);
lineto(2128,Tabellenanfang - 2 + ((i - Artikel_von_letzter_seite) + 2) * 110);
moveto(2843,Tabellenanfang - 2 + ((i - Artikel_von_letzter_seite) + 2) * 110);
lineto(2843,Tabellenanfang - 2 + ((i - Artikel_von_letzter_seite) + 3) * 110);
font.style := [];
{ TODO 1 : Neue Seiten Optionen einfügen }
if Tabellenanfang + ((i - Artikel_von_letzter_seite) + 5) * 110 > 4977 then
begin
Tabellenanfang := 550;
inc(Seitenanzahl);
//Seite speichern zum Drucken
Rechnung.Picture.Graphic.savetofile(extractfilepath(paramstr(0)) + '\Daten\Rechnungen\Seite' + inttostr(Aktuelle_Seite) + '.bmp');
Bild := TJPEGIMAGE.create;
Bild.Assign(Rechnung.Picture.Bitmap);
Bild.savetofile(extractfilepath(paramstr(0)) + '\Daten\Rechnungen\Seite' + inttostr(Aktuelle_Seite) + '.jpeg');
bild.Free;
deletefile(extractfilepath(paramstr(0)) + '\Daten\Rechnungen\Seite' + inttostr(Aktuelle_Seite) + '.bmp');
inc(Aktuelle_Seite);
Artikel_von_letzter_seite := 0;
i := - 5;
with Rechnung.Canvas do
begin
pen.Color := clwhite;
rectangle(0,0,4548,6660);
pen.Color := clblack;
pen.Width := 6;
end;
end;
datum := strtodate(Frechnung.Edit5.Text);
datum := datum + 14;
Zahldatum := datetostr(datum);
Aktuelle_rechnung.Add(Zahldatum);
textout(550,Tabellenanfang + ((i - Artikel_von_letzter_seite) + 5) * 110, 'Bitte überweisen Sie den o.a. fälligen Gesamtbetrag bis zum ' + Zahldatum + ' auf folgendes');
textout(550,Tabellenanfang + ((i - Artikel_von_letzter_seite) + 6) * 110, 'Konto:');
textout(550,Tabellenanfang + ((i - Artikel_von_letzter_seite) + 8) * 110, 'Bankinstitut:');
textout(1210,Tabellenanfang + ((i - Artikel_von_letzter_seite) + 8) * 110, 'Citibank');
textout(550,Tabellenanfang + ((i - Artikel_von_letzter_seite) + 9) * 110, 'BLZ:');
textout(1210,Tabellenanfang + ((i - Artikel_von_letzter_seite) + 9) * 110, '30020900');
textout(550,Tabellenanfang + ((i - Artikel_von_letzter_seite) + 10) * 110, 'Konto Nr.:');
textout(1210,Tabellenanfang + ((i - Artikel_von_letzter_seite) + 10) * 110, '3108624137');
if Tabellenanfang + ((i - Artikel_von_letzter_seite) + 12) * 110 > 5197 then
begin
Tabellenanfang := 550;
inc(Seitenanzahl);
// Seite speichern zum Drucken
Rechnung.Picture.Graphic.savetofile(extractfilepath(paramstr(0)) + '\Daten\Rechnungen\Seite' + inttostr(Aktuelle_Seite) + '.bmp');
Bild := TJPEGIMAGE.create;
Bild.Assign(Rechnung.Picture.Bitmap);
Bild.savetofile(extractfilepath(paramstr(0)) + '\Daten\Rechnungen\Seite' + inttostr(Aktuelle_Seite) + '.jpeg');
bild.Free;
deletefile(extractfilepath(paramstr(0)) + '\Daten\Rechnungen\Seite' + inttostr(Aktuelle_Seite) + '.bmp');
inc(Aktuelle_Seite);
Artikel_von_letzter_seite := 0;
i := - 12;
with Rechnung.Canvas do
begin
pen.Color := clwhite;
rectangle(0,0,4548,6660);
pen.Color := clblack;
pen.Width := 6;
end;
end;
textout(550,Tabellenanfang + ((i - Artikel_von_letzter_seite) + 12) * 110, 'Für weitere Fragen stehe ich Ihnen gerne unter der Rufnummer 01 63 / 4 67 46 55 zur');
textout(550,Tabellenanfang + ((i - Artikel_von_letzter_seite) + 13) * 110, 'Verfügung.');
textout(550,Tabellenanfang + ((i - Artikel_von_letzter_seite) + 16) * 110, 'Mit freundlichen Grüßen');
textout(550,Tabellenanfang + ((i - Artikel_von_letzter_seite) + 21) * 110, 'Sabine Mucha');
// Seite speichern zum Drucken
Rechnung.Picture.Graphic.savetofile(extractfilepath(paramstr(0)) + '\Daten\Rechnungen\Seite' + inttostr(Aktuelle_Seite) + '.bmp');
Bild := TJPEGIMAGE.create;
Bild.Assign(Rechnung.Picture.Bitmap);
Bild.savetofile(extractfilepath(paramstr(0)) + '\Daten\Rechnungen\Seite' + inttostr(Aktuelle_Seite) + '.jpeg');
bild.Free;
deletefile(extractfilepath(paramstr(0)) + '\Daten\Rechnungen\Seite' + inttostr(Aktuelle_Seite) + '.bmp');
end;
Rechnungsdaten_Speichern('noch drucken','offen',RechnungNr,FRechnung.Edit4.Text,FRechnung.Edit5.Text,FRechnung.edit6.Text,Zahldatum,tmp);
Aktuelle_rechnung.SaveToFile(extractfilepath(paramstr(0)) + '\Daten\Rechnungen\' + RechnungNr + '.dat');
if not fileexists(extractfilepath(paramstr(0)) + '\Daten\Rechnungen\Rechnungsdaten.dat') then
showmessage('Fehler beim Speichern der Rechnungsdaten! [Fehler: 022]')
else
Rechnungsdaten.LoadFromFile(extractfilepath(paramstr(0)) + '\Daten\Rechnungen\Rechnungsdaten.dat');
tmp := Rechnungsdaten.strings[Rechnungsdaten.Count - 1];
if printdialog1.Execute then
begin
with printer do
begin
pic := TJPEGImage.create;
Orientation := poPortrait;
BeginDoc;
for i := 1 to Seitenanzahl do
begin
if i < Seitenanzahl then
NewPage;
pic.LoadFromFile(extractfilepath(paramstr(0)) + 'Daten\Rechnungen\Seite' + inttostr(i) + '.jpeg');
breite := GetDeviceCaps(Printer.Handle,Horzres);
hoehe := GetDeviceCaps(Printer.Handle,Vertres);
Canvas.StretchDraw(Rect(0,0,breite,Hoehe), pic);
deleteFile(extractfilepath(paramstr(0)) + 'Daten\Rechnungen\Seite' + inttostr(i) + '.jpeg')
end;
EndDoc;
pic.Free;
tmp := stringreplace(tmp,'noch drucken','gedruckt',[]);
Rechnungsdaten.strings[Rechnungsdaten.Count - 1] := tmp;
Rechnungsdaten.SaveToFile(extractfilepath(paramstr(0)) + '\Daten\Rechnungen\Rechnungsdaten.dat');
messagedlg('Die Rechnung wurde erfolgreich erstellt und wird jetzt gedruckt!',mtinformation,[mbok],0);
end;
end;
{ TODO : Rechnung schreiben in Verlauf eintragen }
darfschliessen := true;
FRechnung.Close;
form1.Visible := true;
end;
Marco Tröger
|