Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.11.2010, 09:48   #1
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
По умолчанию TMemoryStream проверка на создание

Здравствуйте.
Как можно проверить была ли инициализирована переменная типа TMemoryStream.

потому что при выполнении кода
Код:
имя_переменной.free
вылетает ошибка. Думаю из за того что переменная не создавалась
таким образом
Код:
имя_переменной :=TMemoryStream.Create;
Lokos вне форума Ответить с цитированием
Старый 29.11.2010, 10:15   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Попробуйте вот так (набросал рабочий примерчик):
Код:
procedure TForm1.Button1Click(Sender: TObject);
var ms: TMemoryStream;
begin
ms:=nil;
ms:=TMemoryStream.Create;
if ms<>nil then
begin
Image1.Picture.Graphic.SaveToStream(ms);
ms.Free;
end;
end;
З.Ы.
Цитата:
Сообщение от Lokos Посмотреть сообщение
Код:
ms:=TMemoryStream //не выполняется
это можно как то определить прежде чем делать
Код:
ms.free
или придется делать какой то флаг для определения.
Слов нет, одни эмоции... Похоже на разговор глухого со слепым...

Последний раз редактировалось mihali4; 29.11.2010 в 10:36.
mihali4 вне форума Ответить с цитированием
Старый 29.11.2010, 10:23   #3
Lokos
Форумчанин
 
Регистрация: 29.09.2009
Сообщений: 587
По умолчанию

не происходит процедура создания. То есть действие
Код:
ms:=TMemoryStream //не выполняется
это можно как то определить прежде чем делать
Код:
ms.free
или придется делать какой то флаг для определения.
Lokos вне форума Ответить с цитированием
Старый 29.11.2010, 10:27   #4
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

if assigned(ms) then ms.Free;
_Engine_ вне форума Ответить с цитированием
Старый 29.11.2010, 11:09   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

если Free выбил ошибку то значит переменка nil не равна.

_Engine_, метод Free имеет код
Код:
if assigned(Self) then Destroy;
так что масло маслянное

вообще насколько я помню, конструкторы обычно в случае чего исключения кидают.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.11.2010, 11:20   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
или придется делать какой то флаг для определения.
да не надо никаких флагов.
Вам же тут в теме, начиная с примера mihali4
пытаются втолковать, что переменная типа TMemoryStream должна быть проиницилизированна!
например, так:
Код:
YourTMemStr := nil;
ОБЯЗАТЕЛЬНО!
Хотите, делайте это на FormCreate, хотите, там, где объявляете переменную,
НО ИНИЦИЛИЗИРОВАТЬ ЕЁ НАДО ОБЯЗАТЕЛЬНО!

p.s. вместо метода Free я бы рекомендовал использовать процедуру
FreeAndNil(ВашаПеременная)
она не только вызовет метод Free объекта, но и присвоит ему nil
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ReadProcessMemory+TMemoryStream Bad-XxX Общие вопросы Delphi 2 10.10.2010 20:11
Удалить данные из TMemoryStream TwiX Общие вопросы Delphi 3 17.06.2010 14:05
TMemoryStream и Zlib Sanprof Общие вопросы Delphi 13 28.05.2010 16:43
TMemoryStream Владимир1988 Помощь студентам 0 13.02.2010 13:04