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

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

Работа с памятью [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)

Отладчиком надо воспользоваться.


Наверх

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