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

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

Pointer => HBITMAP [D5, Win95/98, WinME, NT4, Win2k, WinXP]


Yurko ©   (2002-12-02 03:44:00) 

Как имея указатель на bitmap (или cursor) получить его hbitmap (hcursor)?


Yurko   (2002-12-04 02:13:00) [1]

Да, потому что загружает курсор;
Нет, потому что пишет на диск.


AK-74   (2002-12-04 01:30:00) [2]

А тебе изложенная выше большая функция подходит?


Yurko   (2002-12-03 23:49:00) [3]

Вот-вот, и я о том же.
Тогда как при использовании tmemorystream загрузить ani-курсор?


AK-74   (2002-12-03 04:02:00) [4]

При использовании tmemorystream изменится не только эта строчка


Yurko   (2002-12-03 02:36:00) [5]

А как быть с (при memorystream):

> Result := LoadCursorFromFile(FileName);


AK-74   (2002-12-03 01:22:00) [6]

А че, успевает записать?
Там же написано: вместо filestream проставь memorystream


Yurko   (2002-12-03 01:07:00) [7]

А без записи на диск можно?


AK-74   (2002-12-03 00:58:00) [8]

Как-то не очень понятно. Может вот это поможет:

function LoadAniCursor(Instance: THandle; ResID: PChar): HCursor;
var
S: TFileStream;
// можно TMemoryStream
Path, FileName: array[0..MAX_PATH] of Char;
Rsrc: HRSRC;
Res: THandle;
Data: Pointer;
begin
Result := 0;
Rsrc := FindResource(Instance, ResID, RT_ANICURSOR);
if Rsrc <> 0 then begin
Win32Check(GetTempPath(MAX_PATH, Path) <> 0);
Win32Check(GetTempFileName(Path, "ANI", 0, FileName) <> 0);
try
Res := LoadResource(Instance, Rsrc);
try
Data := LockResource(Res);
if Data <> nil then
try
S := TFileStream.Create(StrPas(FileName), fmCreate);
try
S.WriteBuffer(Data^, SizeOfResource(Instance, Rsrc));
finally
S.Free;
end;
Result := LoadCursorFromFile(FileName);
finally
UnlockResource(Res);
end;
finally
FreeResource(Res);
end;
finally
Windows.DeleteFile(FileName);
end;
end;
end;


Yurko   (2002-12-02 23:19:00) [9]

Я здесь!
HBITMAP не получил.
Но меня скорее интересует HCURSOR (с bitmap через vcl разобратся можно).
Pointer на курсор получил из LockResource, а теперь нужен HCURSOR!!!


AK-74   (2002-12-02 17:14:00) [10]

Да, я подразумевал именно структуру BITMAP.
(Потому что с VCL TBitmap и так все ясно)
Но куда делся хозяин вопроса? Получил он HBITMAP?


MBo   (2002-12-02 14:59:00) [11]

>AK-74
Почему? или имеется в виду тип windows.tbitmap, а не graphics.tbitmap?


AK-74   (2002-12-02 14:41:00) [12]

>MBo © (02.12.02 13:25)

Как это не покажется странным, но в последней строчке может быть ошибка. В том то и вопрос, что у TBitmap"a может не быть handle. А также всего остального (canvasa, maski и т.п.).


MBo   (2002-12-02 13:25:00) [13]

var b:tbitmap;
b является укзателем на объект типа TBitmap.
b.handle - это как раз HBITMAP


AK-74   (2002-12-02 04:34:00) [14]

CreateBitmapIndirect ?


Наверх

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