![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Содержимое буфера в поток
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]прикинь, я тоже нашел код. он применим.