Ja, ich glaube genau hier liegt das Problem.
durch die Funktion SetClipboardData(format,handler)
kann ich doch was im clipboard speichern, oder?
und genau hier brauche ich doch das Handle auf den Speicher
block (bzw. mein Objekt, sag’ mer mal testobj vom
Typ TTestClass). Ich dachte, ganz naiv, ich könnte
mit GlobalHandle(Addr(testobj)) die ganze Sache gewinnen.
Das ging aber nicht…
Wie Stream ??
Ah, schau mal in die Hilfe zum Stichwort „TClipboard“. Zitat: „Um ein persistentes Komponentenobjekt in die Zwischenablage einzufügen oder aus ihr heraus abzurufen, rufen Sie die Methoden GetComponent und SetComponent auf“. Das heißt: Wenn Dein Objekt (direkt oder indirekt) von TPersistent abstammt (insbesondere trifft das auf alle Komponenten zu, weil TComponent von TPersistent abgeleitet ist), solltest Du mit diesen Methoden zum Ziel kommen. Wenn es sich dagegen um „rohe“ Objekte (Vorfahr = TObject) handelt, mußt Du selbst die erwähnten In-und-aus-Stream-Methoden schreiben (Du weißt, was Streams sind?).
Bei Deinem Versuch, Dir einfach den Speicherbereich eines Objekts zu verschaffen, sehe ich das Problem, das jedes Objekt einfach weitere Objekte besitzen kann, die aber nur als Zeiger im Besitzerobjekt repräsentiert sind, und diese Zeiger im Clipboard zu speichern, ist sicher nicht im Sinne des Erfinders. Ich denke, das ist der Grund für das Verfahren „Alle relevanten Daten aus Objekt holen, in Stream speichern und dann diesen Stream ins Clipboard schreiben“ bzw. in umgekehrter Richtung „Aus Clipboard Stream erhalten – daraus die enthaltenen Daten extrahieren – mit diesen das Objekt rekonstruieren“.
Gruß
Martin