Entwickler-Ecke

Dateizugriff - Zwischenablage speichern und setzen


Ja-Pa - Mi 22.10.03 17:33
Titel: Zwischenablage speichern und setzen
Hallo,

ich möchte die Zwischenablage von Windows erst abspeichern, dann für mein Programm intern verwenden und dann die ursprüngliche Zwischenablage wieder setzen.
Wie kann ich den gesamten Inhalt des Clipboards in einer Variable speichern und dann auch wieder setzen?
Es sollte auch möglich sein, wenn Bilder oder Dateien in der Ablage sind. Einfach eine Instanz von TClipboard zu speichern geht leider nicht :(

Gruß, Ja-Pa


toms - Mi 22.10.03 18:01

Schau mal den Beitrag von P. Below (TeamB) an:
http://www.swissdelphicenter.ch/de/showcode.php?id=945


Ja-Pa - Do 23.10.03 15:33

Naja, etwas komplizert und lang :D, aber solange es seinen Zweck erfüllt :wink:
Wer was kürzeres (als 206 Zeilen) weiß, kann es ja trozdem noch posten.

Gruß, Ja-Pa


maximus - Do 23.10.03 17:03

Wo genau is da dein problem? ..du wirst noch öffter mit code zu tun haben, der grössen als 200 zeichen ist. Mach aus den oberen procedure eine unit und gut is :wink: ..die lösung ist doch ideal - alles schön mit streams etc. was will man mehr?

cu,


Ja-Pa - Sa 25.10.03 12:39

Na gut, ihr habt mich überredet :wink:


Ja-Pa - Sa 25.10.03 12:43

maximus hat folgendes geschrieben:
der grössen als 200 zeichen ist.

Ja 200 Zeichen wär kein Problem, ... aber 200 Zeilen.
Ich mache es jetzt aber trotzdem mit einer neuen Unit.
Es ist nur so, dass ich soviel eigentlich gar nicht gewollt habe :wink:
Eigentlich wollte ich die Zwischenablage nur für ein paar Millisekunden in einer Variablen zwischenspeichern und nicht gleich auf der Festplatte,
aber trotzdem danke. Den Zweck erfüllt es auf jeden Fall :wink:

Gruß, Ja-Pa


maximus - Sa 25.10.03 14:08

Ja-Pa hat folgendes geschrieben:
...
Eigentlich wollte ich die Zwischenablage nur für ein paar Millisekunden in einer Variablen zwischenspeichern und nicht gleich auf der Festplatte,
aber trotzdem danke. Den Zweck erfüllt es auf jeden Fall :wink:
...


Also dann hast du den code anscheinend falsch verstanden! Hier wird nix auf platte gespeichert, wenn du es nicht willst :wink: Das sind doch nur unschuldige streams...ob du sie auf platte (TFileStream) oder in den speicher (TMemoryStream) schreibst bleibt dir überlassen!

Definiere den TMemoryStream einfach als member in deinem objekt:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
//oben im objekt
   ms: TMemoryStream; 
...

// im onCreate
  ms := TMemoryStream.Create; 
...
//im onDestroy
  ms.Free; 
...

procedure TForm1.Button1Click(Sender: TObject); 
begin   
    SaveClipboard(ms); 
 end

procedure TForm1.Button3Click(Sender: TObject); 
begin  
    LoadClipboard(ms);   
end;


..es bleibt so alles im speicher! Nur wenn du deine clipboard kopie persistent haben willst, musst du auf platte speichern :wink:

cu,


Ja-Pa - Mo 27.10.03 13:26

Zitat:

ms.SaveToFile('c:\temp\ClipBrdSaved.dat');


Das hab ich gemeint mit speichern auf der Festplatte (lecker :wink:).
Aber wenn es auch anders geht, Danke!
Ich kenne mich mit Streams noch nicht so aus :oops:

mfg, Ja-Pa