Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.141.29.145] |
|
Сообщ.
#1
,
|
|
|
Вхожу в функцию по нажатию на кнопку на форме, на форме указываю размеры TImage и надо до реального выделения для него памяти узнать будет ли память выделена?
В предыдущей программке, где эта проблема исследовалась, запрос большой памяти приводил к появлению сообщения "недостаточно памяти для выполнения команды" и потом уже даже при убиении TImage, выделить даже реальный размер не удавалось, все время появлялась одна и та же ошибка. Что посоветуете? |
Сообщ.
#2
,
|
|
|
Надо забыть о TImage и работать с TBitmap.
Размер блока данных битмапа вычисляется, исходя из размеров и цветности, например, в graphics.pas biSizeImage := BytesPerScanline(biWidth, biBitCount, 32) * biHeight; и функции BytesPerScanline с учетом выравнивания строк |
Сообщ.
#3
,
|
|
|
А толку? Можно узнать размер, но никак нельзя узнать, удастся ли выделить память. Так что только try-catch. А вот с описанной ошибкой надо разбираться. При ошибке выделения большой картинки память ничем не занимается, и последующие неудачные выделения аномальны
|
Сообщ.
#4
,
|
|
|
Цитата Fr0sT @ нельзя узнать, удастся ли выделить память. Так что только try-catch Можно проверить наличие необходимого диапазона адресов, вызвав VirtualAlloc с flAllocationType = MEM_RESERVE. |