Witam!
Pracuje trochę nad schowkiem i robię coś takiego (opis i kod jaki przedstawiam jest testowy, ale mój działa na podobnej zasadzie):
- kopiuje grafikę do schowka (ctrl+c na obrazku) - ręcznie
- następnie zapisuje do pliku "C:\formaty.txt" wszystkie identyfikatory formatów schowka w jakich jest dostępna ta grafika
- zapisuję te formaty do plików [format].txt
- wyświetlam grafikę ze schowka w Image1(TImage)
Teraz w drugą stronę:
- otwieram plik "formaty.txt"
- po kolei wrzucam do schowka odpowiednie formaty
- próbuję wyświetlić grafikę ze schowka i... ZONK, nie działa, mimo, że można ją wkleić np. do painta...
Dodam, że jak damy start/uruchom "clipbrd" to widać tą grafikę, więc czemu nie mogę jej wyświetlić w TImage?
Ma ktoś pomysł czemu tak się dzieje?
Zamieszczam kodzik:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Clipbrd, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Image1: TImage;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
Stream: TMemoryStream;
I: Integer;
Data: THandle;
TF: TextFile;
begin
AssignFile(TF, 'C:\formaty.txt');
ReWrite(TF);
Clipboard.Open;
for i:=0 to Clipboard.FormatCount-1 do
begin
WriteLn(TF, Clipboard.Formats[i]);
Stream:= TMemoryStream.Create;
Data:= Clipboard.GetAsHandle(Clipboard.Formats[i]);
Stream.SetSize(GlobalSize(Data));
Move(GlobalLock(Data)^, Stream.Memory^, GlobalSize(Data));
Stream.SaveToFile('C:\'+IntToStr(Clipboard.Formats[i])+'.txt');
GlobalUnlock(Data);
Stream.Free;
end;
CloseFile(TF);
Image1.Picture:=nil;
Image1.Picture.LoadFromClipboardFormat(CF_BITMAP, Clipboard.GetAsHandle(CF_BITMAP),0);
Clipboard.Close;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
Stream: TMemoryStream;
I: Integer;
Data: THandle;
TF: TextFile;
Format: String;
begin
AssignFile(TF, 'C:\formaty.txt');
Reset(TF);
Clipboard.Open;
while not EoF(TF) do
begin
ReadLn(TF, Format);
Stream:= TMemoryStream.Create;
Stream.LoadFromFile('C:\'+Format+'.txt');
Data := GlobalAlloc(GMEM_MOVEABLE, Stream.Size);
Move(Stream.Memory^, GlobalLock(Data)^, Stream.Size);
Clipboard.SetAsHandle(StrToInt(Format), Data);
GlobalUnlock(Data);
Stream.Free;
end;
CloseFile(TF);
Image1.Picture:=nil;
Image1.Picture.LoadFromClipboardFormat(CF_BITMAP, Clipboard.GetAsHandle(CF_BITMAP),0);
Clipboard.Close;
end;
end.