![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с памятью [D6]
vvvaaa © (2005-09-08 19:51:00)Подскажите пожалуста что в не так, я не правильно обращаюсь с кучей или с указателем?
hMem:HWND;
p:pointer;
...
hMem:=GetProcessHeap;
p:=HeapAlloc(hMem,0,8256);
hFile:=CreateFile('c:\test.bin',GENERIC_READ,FILE_SHARE_READ,nil,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,0);
ReadFile(hFile,p^,8256,t,nil);
hbmp:=CreateCompatibleBitmap(hDC1,w,h);
SetBitmapBits(hbmp,8256,p);
BitBlt(hdc1,10,10,w+10,h+10,hbmp,0,0,0);
vvvaaa (2005-09-11 10:18:00) [1]> alpet © (10.09.05 14:15) [9]
Спасибо, но я уже это понял, за три дня нашел исходник функции загрузки битмапа из файла.
>существует справка, которую можно было и почитать.
В справке написано (последний параметр SetBitmapBits):
lpBits - Points to an array of bytes that contain color data for the specified bitmap.
Ну я и указывал на массив данных цвета, а оказалось на до указывать на полную структуру битмапа (HEADER, INFO ...). Вот и верь теперь справкам
alpet (2005-09-10 14:15:00) [2]vvvaaa (10.09.05 12:33) [8]
Ну и наконец главная ошибка - функция BitBlt принимает в параметрах контексты устройства (Device Context) - исходный и назначения. У тебя же вместо исходного контекста используется почему-то описатель растра (HBITMAP вместо HDC). Вобщем потрудись создать так-же совместимый контекст (CreateCompatibleDC), и "прицепить" к нему собсвенно растр (SelectObject). А вообще для разрешения таких вопросов существует справка, которую можно было и почитать.
vvvaaa (2005-09-10 12:33:00) [3]>коль скоро ты используешь ф-цию, а не процедуру, нужно получить
>(а не игнорировать !) результат, ею возвращаемый
Интересно зачем, если он мне не нужен.
Из асм (условно):
call AnyFunctin
mov result,eax
Все функции возращают результат в eax,edx, eax:edx, и очень реко ecx,ebx. Это регистры общего назначения, их обработка производится только если это надо в программе.
>SRCCOPY
Да это я пропустил, но теперь картинка вообще не рисуется. Подскажите что ещё не так
Digitman (2005-09-09 13:31:00) [4]
> vvvaaa (09.09.05 13:20) [5]
> вижу уже наверно двадцатую твою реплику и все они одинаковые
постоянство во мнениях - не худшее, думаю, человеческое качество)
> тебе видимо IQ не позволяет высказываться более конструктивно
ну а тебе, видимо, он самый не позволяет сообразить, что коль скоро ты используешь ф-цию, а не процедуру, нужно получить (а не игнорировать !) результат, ею возвращаемый
> стественно я проверяю в отладчике и слежу за всеми возвращаемыми
> результатами
малацца.
не забудь всем пользователям своего софта поставлять в дистрибутиве свою версию Делфи, чтобы пользователи могли сделать то же самое при возникновении проблем, которые обязательно возникнут при таком твоем подходе (мол, раз у меня под отладчиком все в порядке, то уж у пользователей и подавно будет все в порядке с вызовом этой ф-ции)
alpet (2005-09-09 13:25:00) [5]vvvaaa (09.09.05 13:20) [5]
Не понятно, зачем вызывать BitBlt без указания кода растровой операции. Подозреваю что последний параметр должен быть SRCCOPY.
vvvaaa (2005-09-09 13:20:00) [6]Удалено модератором
Digitman (2005-09-09 12:19:00) [7]какого ляда ты не анализируешь рез-ты , возвращаемые WinAPI-ф-циями ? религия не позволяет что ли ?
vvvaaa (2005-09-09 12:16:00) [8]> [2]
BltBtn рисует черный квадрат, и я не понимаю данные в память не загружаются
ReadFile(hFile,p^,8256,t,nil);
или не читаются
SetBitmapBits(hbmp,8256,p);
n0name (2005-09-09 11:02:00) [9]А что не так?
alpet (2005-09-09 10:55:00) [10]vvvaaa (08.09.05 19:51)
Отладчиком надо воспользоваться.