Einzelnen Beitrag anzeigen

SimStar001

Registriert seit: 18. Jan 2008
594 Beiträge
 
#4

Re: Fehler bei JPEG-Umwandlung

  Alt 22. Mär 2008, 07: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 = 'Herrthen
        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
  Mit Zitat antworten Zitat