Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Содержимое буфера в поток


95 ©   (2009-05-04 14:06:00) 

нашел код сохранения содержимого буфера в поток, если в буфере хранится текст - все выводится без проблем, когда картинка - создается пустой файл? Этот код разве не применим для сохранения картинок?


clickmaker   (2009-05-04 16:54:00) [1]

и вообще, причем тут GlobalSize, если там сидит HBITMAP?


Сергей М.   (2009-05-04 16:26:00) [2]


> допер


Не надо "допирать")
Следует просто проанализировать код отказа ф-ции GlobalSize, коль скоро она у тебя возвращает 0.


Palladin   (2009-05-04 15:18:00) [3]

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1229944689&n=0
исследуй, чего у тебя на самом деле в буфере


Palladin   (2009-05-04 15:16:00) [4]

)


95   (2009-05-04 15:15:00) [5]

Все кажется допер почему возвращает 0, изображения то я копирую в буфер в браузере. Може поэтому?


clickmaker   (2009-05-04 15:13:00) [6]

> fs := TFileStream.Create('d:\2. jpg', fmCreate);
> SaveClipboardToStream( CF_BITMAP, fs);

не в этом ли грабли?


95   (2009-05-04 15:07:00) [7]

Странно, процедуру взял из JVCL библиотеки, а она не работает. Кстати с текстом все OK...


Сергей М.   (2009-05-04 15:00:00) [8]

Угу .. вижу ..


> Size почему-то равен 0.


Справку почему бы не проштудировать ?

Return Value

If the function succeeds, the return value is the size of the specified global memory object, in bytes.

If the specified handle is not valid or if the object has been discarded, the return value is zero. To get extended error information, call GetLastError.


95   (2009-05-04 14:53:00) [9]


> А где вызов OpenClipboard() ?


Так ведь Clipboard открывается внутри процедуры в которую я передаю созданный stream?


Сергей М.   (2009-05-04 14:45:00) [10]

А где вызов OpenClipboard() ?


95   (2009-05-04 14:31:00) [11]


> Data = 0


Проверял отладчиком при выполнении Data <> 0, а вот Size почему-то равен 0.


Сергей М.   (2009-05-04 14:24:00) [12]

Пустой файл означает только одно:

Data = 0


95   (2009-05-04 14:20:00) [13]


var
 fs: TFileStream;
begin
 fs := TFileStream.Create('d:\2.jpg', fmCreate);
 SaveClipboardToStream(CF_BITMAP, fs);
 fs.Free;


Сергей М.   (2009-05-04 14:19:00) [14]


> блин забыл добавить


Блин добавляй на блины.ру


> когда картинка


В параметре Format, наверно, так и передается CF_КАРТИНКА ?)


95   (2009-05-04 14:14:00) [15]

блин забыл добавить


procedure SaveClipboardToStream(Format: Word; Stream: TStream);
 var
   Buffer: Pointer;
   Data: THandle;
   Size: Longint;
 begin
   Clipboard.Open;
   try
     Data := GetClipboardData(Format);
     if Data = 0 then
       Exit;
     Buffer := GlobalLock(Data);
     try
       // (rom) added handling of Format and Size!
       Size := GlobalSize(Data);
       Stream.Write(Format, SizeOf(Word));
       Stream.Write(Size, SizeOf(Longint));
       ShowMessage(IntToStr(Size));
       Stream.Write(Buffer^, Size);
     finally
       GlobalUnlock(Data);
     end;
   finally
     Clipboard.Close;
   end;
 end;


Сергей М.   (2009-05-04 14:11:00) [16]


> Этоткод


Этотне применим, а вот тотприменим


Palladin   (2009-05-04 14:10:00) [17]

прикинь, я тоже нашел код. он применим.


Наверх

Титульная страница Поиск, карта сайта Написать письмо