Skocz do zawartości

[Delphi] Schowek


Max1414

Polecane posty

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.

Moje projekty: http://wojciechkulik.pl

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...