hallo,
ich dreh hier gleich durch...ich versuche, bilder aus einer datei zu laden.
diese sollen auf einer listenstruktur gespeichert werden und dann angezeigt werden...das mit dem laden klappt ja auch, die bilder sind da, (habe ich mit einem form geprüft, auf das ich das eingelesene bild geladen habe)...bis zu einem gewissen zeitpunkt...
hier erstmal meine prozedur zum einlesen der datei:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77:
| function baumstruktur_einlesen; var fs : TFilestream; ms : TMemorystream; mystrs : TStringstream; jpg : TJPegimage; text : TStringlist; size : cardinal; datei : file; temp : TSpeicherbaum2; ds : TSpeicherbaum; reader : TReader; i : integer; begin baumstruktur_einlesen:=false; try fs:=tfilestream.Create(dateiname,fmopenread); ms:=tmemorystream.Create; mystrs:=TStringstream.Create(''); fs.ReadBuffer(header,sizeof(header)); i:=1; ds.Bild:=Tpicture.Create; ds.Bemerkung:=tstringlist.Create; ds.Hilfe:=TStringlist.Create;
while i<=header.zeilen do begin jpg:=tjpegimage.Create; text:=tstringlist.Create; fs.Read(size,4); ms.CopyFrom(fs,size); ms.Position:=0; jpg.LoadFromStream(ms); ds.Bild.Assign(jpg); fs.Read(size,4); mystrs.CopyFrom(fs,size); mystrs.Position:=0; text.LoadFromStream(mystrs); ds.Bemerkung.Assign(text); ds.Bemerkung[1]:=ds.Bemerkung[1]+inttostr(i); fs.Read(size,4); mystrs.CopyFrom(fs,size); mystrs.Position:=0; text.LoadFromStream(mystrs); ds.hilfe.Assign(text); fs.ReadBuffer(temp,sizeof(temp)); ds.nummer:=temp.nummer; ds.frageincheckliste:=temp.frageincheckliste; ds.ebene:=temp.ebene; ds.kapitel:=temp.kapitel; ds.kapitellaenge:=temp.kapitellaenge; ds.unummer:=temp.unummer; ds.canchange:=temp.canchange; ds.ischecked:=temp.ischecked; ds.isquestion:=temp.isquestion; ds.isvisible:=temp.isvisible; ds.haengtabvon:=temp.haengtabvon; ds.Bewertung:=temp.Bewertung; ds.Gewichtung:=temp.Gewichtung; ds.question:=temp.question; insert_baum(root,aktueller,ds,tree,box); mystrs.Position:=0; ms.Clear; jpg.Free; text.Free; inc(i); end; baumstruktur_einlesen:=true; fs.Free; ms.Free; mystrs.Free; except on Exception do begin showmessage('Fehler beim Laden der Datei (Code (blabla))') ; baumstruktur_einlesen:=false; end; end; end; |
innerhalb diesewr prozedur schreibe ich den datensatz dann in die listenstruktur:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60:
| function insert_baum; begin if root = nil then begin root:=make_blatt(Datensatz,treeview,scrollbox); aktueller:=root; end else begin root.runter:=make_blatt(Datensatz,treeview,scrollbox); root.runter.hoch:=root; root:=root.runter; end;
end;
function make_blatt; var Tempelement : TBaumpointer; ms : TMemorystream; jpg: tjpegimage; begin ms:=Tmemorystream.Create; jpg:=tjpegimage.create; new(Tempelement); tempelement.nummer:=datensatz.nummer; tempelement.frageincheckliste:=datensatz.frageincheckliste; tempelement.ebene:=datensatz.ebene; tempelement.kapitel:=datensatz.kapitel; tempelement.kapitellaenge:=datensatz.kapitellaenge; tempelement.unummer:=datensatz.unummer; tempelement.canchange:=datensatz.canchange; tempelement.ischecked:=datensatz.ischecked; tempelement.isquestion:=datensatz.isquestion; tempelement.isvisible:=datensatz.isvisible; tempelement.haengtabvon:=datensatz.haengtabvon; tempelement.question:=datensatz.question; tempelement.box:=make_box(tempelement,treeview); tempelement.Bild:=tpicture.Create; tempelement.Hilfe:=TStringlist.Create; tempelement.Bemerkung:=TStringlist.Create; tempelement.Gewichtung:=datensatz.Gewichtung; tempelement.Bewertung:=datensatz.Bewertung; if scrollbox<>nil then tempelement.zeile:=make_label(tempelement,scrollbox); tempelement.Bild:=(datensatz.Bild); tempelement.Bemerkung.Assign(datensatz.Bemerkung); tempelement.hoch:=nil; tempelement.runter:=nil; make_blatt:=tempelement; end; |
sobald ich aber anschießend auf die bilder zugreifen will, sind sie weg...sprich, gleich, nachdem die funktion
baumstruktur_einlesen beendet wurde...werden denn da irgendwie nur adressen übergeben, und wenn ich in der funktion sage ms.free oder jpeg.free...gehen die verloren?
wäre echt sehr geil, wenn mir hierbei jemand helfen könnte...denn wie oben geschrieben...ich dreh sonst gleich durch, sitz da schon einige stunden an dem kram...
Gruß, Wile E.