[delphi] Bitmapa zapis ze schowka na dysk

0

Witam, mam taki problem, potrzebuję zapisać zawartość formatu CF_BITMAP (schowka) na dysk jednak dzieją się bardzo dziwne rzeczy...

Jak widać na poniższym kodzie przypisuje uchwyt do pamięci zawierającej dane w formacie CF_BITMAP, jednak GlobalSize(Data) zwraca mi że te dane mają rozmiar 0 bajtów O_O, a o dziwo gdy przy pomocy tych danych ładuje obraz do Image1 to się pojawia... więc WTF? dodatkowo jeżeli usuniemy komentarz z tych linijek:

Clipboard.Open;
Clipboard.SetAsHandle(CF_BITMAP, Data);
clipboard.Close;

to obrazek się nie załaduje... a przecież powinien...

Macie jakiś pomysł jak zapisać ten format CF_BITMAP na dysk? ( nie pytam o zapis bitmapy ze schowka )


uses Clipbrd;

procedure TForm1.Button1Click(Sender: TObject);
var
  Data: THandle;
begin
  Data:= Clipboard.GetAsHandle(CF_BITMAP);
  //Clipboard.Open;
  //Clipboard.SetAsHandle(CF_BITMAP, Data);
  //clipboard.Close;
  Showmessage(IntToStr(GlobalSize(Data)));

  Image1.Picture.LoadFromClipboardFormat(CF_BITMAP, Data, 0);
end;
0

to o co Ci w koncu chodzi? bo jak dla mnie to w schowku siedzi bitmapa. a ty nie chcesz zapisac bitmapy ze schowka tylko co?

potrzebuję zapisać zawartość formatu CF_BITMAP (schowka) na dysk
[...]
Macie jakiś pomysł jak zapisać ten format CF_BITMAP na dysk? ( nie pytam o zapis bitmapy ze schowka )

///chyba ze chodzi Ci o zapisanie zawartosci schowka do streamu.
tedy uzyj google, mi to zajelo 20-30sek :-P

0

no chodzi o zapisanie zawartości schowka... tylko ze wtedy:
http://4programmers.net/Forum/515260#id515260

0

inaczej: wytlumacz mi czym sie rozni zapisanie bitmapy ze schowka od zapisania zawartosci schowka?

wczytywanie i zapisywanie bitmapy:

  if Clipboard.HasFormat(CF_BITMAP) then 
  begin
    Image1.Picture.Assign(Clipboard);
    image1.Picture.SaveToFile('c:\plik.bmp');
  end;

odczytywanie/zapisywanie uzywajac TStream:
http://www.swissdelphicenter.ch/torry/showcode.php?id=945

0
cimak napisał(a)

odczytywanie/zapisywanie uzywajac TStream:
http://www.swissdelphicenter.ch/torry/showcode.php?id=945

Wiem, bo tak mam u siebie zrobione.
A jeszcze odnośnie tego kodu, chciałem go wypróbować czy podziała... i w przypadku bitmapy wywala: "CopyStreamFromClipboard: could not lock global handle obtained from clipboard!"

cimak napisał(a)

inaczej: wytlumacz mi czym sie rozni zapisanie bitmapy ze schowka od zapisania zawartosci schowka?

Tym że bitmapa = jeden format
Schowek = rozne formaty

Potrzebuje zapisać każdy format na dysk, z bitmapy raczej będzie ciężko z tym.

0

hmm.. to chodzi o to ze w schowku moga byc jednoczesnie zalozmy text i bitmapa i chcesz cala zawartosc schowka zapisac do jednego pliku i potem to ew przywocic?
nie wiem czy pomoge ale z czystej ciekawosci pytam...
//i caly czas nie lapie jednej rzeczy.. pytasz, jak zapisac format (jeden) CF_BITMAP na dysk. wiec czemu nie mozna zwyczajnie tej bitmapy zapisac na dysku. ten format niesie ze soba jeszcze jakies informacje?

0
cimak napisał(a)

//i caly czas nie lapie jednej rzeczy.. pytasz, jak zapisac format (jeden) CF_BITMAP na dysk. wiec czemu nie mozna zwyczajnie tej bitmapy zapisac na dysku. ten format niesie ze soba jeszcze jakies informacje?

Bo wszystkie rzeczy ze schowka zapisuje i odczytuje oraz wyciagam z nich informacje w jeden sposób, więc zmiana, że z bitmapą postępowałbym inaczej wywołałaby wiele zmian w kodzie :]

1 użytkowników online, w tym zalogowanych: 0, gości: 1