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.