![]() |
Bild richtig laden und löschen?
Hallo Jungs,
hab folgendes Problem. Ich hab zwei Buttons für das Laden und Löschen eines Bildes. Ich kann ein Bild wählen, wenn es nicht das richtige ist, wieder laden, also da klappt alles, wenn ich aber ein geladenes Bild lösche und dann wieder ein Bild wähle, kracht es, ein Speicherzugriffsfehler. Ich vermute, dass das an der Freigabe des TFileStream (fs, ist FileStream und globale Variable) liegt. Kapier aber nicht, wie ich das richtig machen soll. Danke euch!
Delphi-Quellcode:
Und hier das löschen des Bildes
// Bild laden
procedure TForm2.PictureBitBtnClick(Sender: TObject); var jpeg: TJPEGImage; begin if fs<>nil then fs.Free; if OpenPictureDialog1.Execute then begin jpeg := TJPEGImage.Create; try jpeg.LoadFromFile(OpenPictureDialog1.FileName); if (((jpeg.Width>100) and (jpeg.Width<200)) or ((jpeg.Height>100) and (jpeg.Height<200))) then begin fs := TFileStream.Create(OpenPictureDialog1.FileName, fmOpenRead); PictureImage.Picture.Graphic := jpeg; end else MessageDlg('Das Bildformat entspricht nicht den Anforderungen!' + CHR(13) + 'Bitte wählen Sie das Format von min. 100x100 und max. 200x200 Pixel.', mtError, [mbOK], 0); finally jpeg.Free; end; end; end;
Delphi-Quellcode:
// Bild löschen
procedure TForm2.PictureDeleteBitBtnClick(Sender: TObject); begin fs.Free; PictureImage.Picture := nil; end; |
AW: Bild richtig laden und löschen?
Die Zuweisung wäre
Delphi-Quellcode:
den Sinn des Filestreams kann ich nicht erkennen, der läuft hier völlig nutzlos mit.
PictureImage.Picture.Assign(jpeg);
|
AW: Bild richtig laden und löschen?
Zitat:
|
AW: Bild richtig laden und löschen?
Diese Prüfung der Bildgrösse ist ziemlich schlecht gelöst.
Mal angenommen der Benutzer hat ein Bild 240 * 180 und er kann sich auf den Kopf stellen, aber er bekommt das Bild nicht in die DB. Was mag der User wohl denken? Wird er das Programm gut finden oder sich ärgern? Natürlich wird er sich über das dumme Programm ärgern denn der User wird regelrecht entmündigt. Für den Programmierer heisst das er darf eine Warnung ausgeben, aber er darf den User nicht blockieren.
Code:
Und dann sollte die Prüfung in einer eigenen Funktion stattfinden, anstatt alles in PictureBtnClick zu erledigen.
Warnung
Das Bild C:\test\urlaub.jpg hat eine Grösse von 240 * 180. Mindestgrösse 100*100, Maximalgrösse 200*200 [OK] [Ignorieren] Dies verbessert die esbarkeit und die Erweiterungsfähigkeit des Codes.
Delphi-Quellcode:
function TForm1.ImageBoundsOK(const filename:string; width,height:Integer):Boolean;
begin // jenachdem wie gross das Bild ist wird eine Warnung angezeigt oder nicht // der Benutzer darf die Warnung ignorieren // Result = True => Bildgrösse ist in Ordnung (oder Benutzer hat Warnung ignoriert) // Result = False => Bildgrösse nicht OK // end; |
AW: Bild richtig laden und löschen?
Plane das später in eine eigene Funktion packen, da aktuell sich vieles ändern kann. Das Bild werde ich später skalieren, die Fehlermeldung verschwindet ganz. :thumb:
|
AW: Bild richtig laden und löschen?
Zitat:
Beim neuen erstellen prüfst du auf nil (was eh überflüssig ist) und ruft dann free auf. Damit versuchst du, den fs ein zweites Mal freizugeben. Das scheitert 8-) Entweder noch ein fs:=nil beim löschen, oder das fs.Free aus dem löschen Button entfernen. |
AW: Bild richtig laden und löschen?
Scheint zu funktionieren, danke! :thumb: Aber ich glaube das ist noch nicht alles, melde mich später noch ein mal.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:02 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-2025 by Thomas Breitkreuz