Hallo zusammen,
ich habe folgendes Problem:
Ich lese bestimmte Zellen aus einer Exceldatei (in den Zellen befinden sich sowohl Text als
auch Bilder zusammen) über das Clipboard aus und stecke den Inhalt auf ein TPicture-Objekt.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| type dataset = record ueberschrift : string; inhalt : Tpicture; quellen : string; fragen : string; end; ... ... ... for k:=1 to x do begin setlength(data,k); clipboard.Clear; data[k-1].ueberschrift:=myexcel.range['A'+inttostr(K),'A'+inttostr(k)].value; myexcel.Range['B'+inttostr(K),'B'+inttostr(k)].Copy(Emptyparam); data[k-1].inhalt:=Tpicture.create; data[k-1].inhalt.assign(clipboard); data[k-1].quellen:=myexcel.Range['C'+inttostr(K),'C'+inttostr(k)].Value; data[k-1].fragen:=myexcel.Range['D'+inttostr(K),'D'+inttostr(k)].Value; end; |
das klapp auch wunderbar, ich kann mir den jeweiligen inhalt von data[k].inhalt auch
wunderbar auf dem formular anzeigen lassen.
ich möchte das ganze aber nun als jpg haben und zusammen mit noch diversem anderen kram
über einen filestream in einer datei speichern.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| fs:=tfilestream.Create(dateiname,fmcreate); ms:=tmemorystream.Create; jpg:=TJpegImage.Create; bildstream:=Tmemorystream.Create; fs.WriteBuffer(x,sizeof(x)); for i:=0 to x-1 do begin speicher.ueberschrift:=data[i].ueberschrift; speicher.quellen:=data[i].quellen; speicher.fragen:=data[i].fragen; jpg.Assign(<span style="color: red">data[i].inhalt.bitmap</span>); jpg.SaveToStream(ms); size:=ms.Size; fs.Write(size,4); ms.Position:=0; fs.CopyFrom(ms,size); ms.clear; bildstream.Clear; fs.WriteBuffer(speicher,sizeof(speicher)); end; jpg.Free; ms.Free; fs.Free; |
das problem ist nun, dass sobald ich dass mit "jpg.assign" mache, ist das bild aus data[i].inhalt weg. ich habe dann weder in data[i].inhalt noch in jpg ein bild drin.
wenn ich (rote zeile) das "bitmap" weglasse, bekomme ich einen convert-error: tpicture kann nicht zu tjpegimage zugewiesen werden". die einzige möglichkeit bisher war, anstelle
von "data[i].inhalt.bitmap" direkt "data[i].inhalt.graphic" auf den stream zu schreiben, dann kommen die bilder in die datei. hier ist dann aber das problem, dass ich das nicht mehr eingelesen bekomme. ich habe beim auslesen dann entweder eine zugriffsverletzung (wenn ich versuche, das bild aus der datei wieder auf TGraphic zuzuweisen)
oder den fehler "TMetafile kann nicht zu TBitmap zugewiesen werden". die größe (ms.size)
ist beim schreiben und lesen identisch.
kann mir hier vielleicht irgendjemand weiterhelfen? ich weiss da echt nicht weiter.
habe dass schon mal gemacht und absolut keine probleme gehabt, allerdings habe ich da initial bitmaps auf das picture-objekt gepackt. hat das clipboard evtl ein anderes format?
müßte dann aber nicht nach der ersten zuweisung auf mein tpicture-objekt das format geändert sein?
Danke und Gruß,
Wile E.