Einzelnen Beitrag anzeigen

Niko

Registriert seit: 23. Jun 2003
416 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Code zum Managen der Zwischenablage

  Alt 14. Jul 2004, 20:50
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 MSDN-Library durchsuchenClipboard 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)
  Mit Zitat antworten Zitat