![]() |
Rave Zugriffsverletztung bei übergabe von Bitmap
Ich habe in meinem Projekt ein Report an den eine Grafik übergeben wird, unter Delphi 2007
funktioniert noch alles einwandfrei. Seit der Umstellung auf Delphi 2009 mit Rave 7.6.2 BE klappt es nicht mehr bzw. bei einer Grafik geht es, wählt man eine andere erhält man eine Zugriffsverletzung. Bei den Grafiken handelt es sich jeweils um JPEG Dateien mit einer Auflösung von 250x75 Pixel, die Dateigröße beträgt einmal ca. 40 KB (Diese Datei wird übergeben) bei der Anderen ca. 4 KB (Bei dieser Datei gibt es die Zugriffsverletzung). Ich habe auch eine weitere Grafik ausprobiert um auszuschließen das die Grafik selbst korrupt ist, aber auch bei einer anderen Grafik erhalte ich immer die Zugriffsverletzung. Ich bin mit dem Debugger durch den Quelltext gelaufen und der Fehler tritt bei Connection.WriteBlobData auf, ich habe jedoch keine Idee wieso bzw. wie ich das ändern muss.
Delphi-Quellcode:
Mittlerweile glaube ich das Rave Report 7.6.2 sowas von total verbuggt ist und ich mich frage wieso es kein Update gibt.
procedure TfrmCertificate.RvCustomConHeaderGetRow(Connection: TRvCustomConnection);
var MemStream: TMemoryStream; Bitmap: TBitmap begin MemStream := TMemoryStream.Create; try Bitmap := TBitmap.Create; try try if Assigned(imgSignature.Picture.Graphic) then begin //Unterschriftdatei zuweisen Bitmap.Assign(imgSignature.Picture.Graphic); //'Unterschrift' Connection.WriteStrData('', ''); end else begin //'leer' Bitmap erzeugen... Bitmap.PixelFormat := pf4bit; Bitmap.Width := 2; Bitmap.Height := 2; //'Unterschrift' Connection.WriteStrData(cmbSignature.Text, ''); end;{else} Bitmap.SaveToStream(MemStream); Connection.WriteBlobData(MemStream.Memory^, MemStream.Size); except on E: Exception do ShowMessage(E.Message); //Bitmap ungültig end; finally Bitmap.Free; end; finally MemStream.Free; end; end; mfg TUX |
Re: Rave Zugriffsverletztung bei übergabe von Bitmap
So ich habe eine Lösung gefunden wie ich das Problem mit Rave 7.6.2 umschiffen kann. Merkwürdigerweise kommt der
Report damit klar wenn die Grafiken eine Auflösung haben von 531 x 189 Pixel was dem Grafik Objekt im Report entspricht, das Objekt hat dort eine Größe von 45 x 16 mm. Und Grafiken die nicht in diese Auflösung passen können nicht korrekt an den Report übergeben werden und so erscheint eine Zugriffsverletzung. In der folgenden Lösung erstelle ich ein leeres Bitmap mit den "richten" Werten und kopiere einfach die Grafik auf dieses Bitmap und das schicke ich zum Report und dann läuft es.
Delphi-Quellcode:
Ich hoffe das das jetzt alle Bugs waren im Rave Report System.
//'Unterschrift' Datei...
if Assigned(imgSignature.Picture.Graphic) then begin MemStream := TMemoryStream.Create; try Bitmap := TBitmap.Create; try try //Bitmap erzeugen mit der entsprechenden Größe (45x16 mm) Bitmap.PixelFormat := pf32bit; Bitmap.Height := 189; Bitmap.Width := 531; //Unterschrift Grafik auf Bitmap Zeichnen Bitmap.Canvas.StretchDraw(Rect(0,0,Bitmap.Width, Bitmap.Height), imgSignature.Picture.Graphic); //Unterschrift in Speicher kopieren Bitmap.SaveToStream(MemStream); //'Unterschrift' an Report übergeben Connection.WriteStrData('', ''); Connection.WriteBlobData(MemStream.Memory^, MemStream.Size); except on E: Exception do ShowMessage(E.Message); end; finally Bitmap.Free; end; finally MemStream.Free; end; end else begin //'Unterschrift' Connection.WriteStrData(cmbSignature.Text, ''); Connection.WriteBlobData(nil^, 0); end;{else} |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz