Hi,
Zitat von
Suche_Ein_Orakel:
BIS ich dann nicht mehr bloß Texte kopiert hab, sondern auch mal Bitmaps.. dann bekam ich einen unbekannten Anwendungsfehler.
Das Problem besteht darin, dass einige der grafischen Zwischenablageformate (CF_BITMAP, CF_METAFILEPICT und CF_ENHMETAFILE) nicht einfach als Datenblock gespeichert werden, sondern als
Handle auf ein entsprechendes Windows-
GDI-Objekt.
Dein Code interpretiert aber auch diese Handles als Speicheradressen, versucht darauf zuzugreifen und führt so zu einer Schutzverletzung. Die Lösung besteht darin, die betroffenen Formate getrennt zu behandeln und zu deren Zwischenspeicherung entsprechende
GDI-Objekte anzulegen.
Näheres zu den Zwischenablageformaten steht unter
Clipboard Formats.
[EDIT]
Gerade noch ein bisschen rumprobiert ...
Was das Problem mit den Bitmaps anbelangt kann ich dir gleich konkret helfen:
Die Prozedur CopyStreamFromClipboard einfach um folgende Zeile direkt nach dem begin ergänzen:
Delphi-Quellcode:
if fmt = CF_BITMAP then
Exit;
Damit werden Daten des Formats CF_BITMAP einfach ignoriert. Informationen verlierst du dadurch trotzdem nicht, da das Bitmap von Windows automatisch auch in das Format CF_DIB umgewandelt und dieses ja weiterhin gespeichert wird.
Bei CF_METAFILEPICT und CF_ENHMETAFILE führt AFAIK allerdings nichts an der Speicherung über das GDI vorbei.
[/EDIT]
"Electricity is actually made up of extremely tiny particles called electrons, that you cannot see with the naked eye unless you have been drinking." (Dave Barry)