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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.11.2010, 16:53   #1
NoName_emaNoN
Форумчанин
 
Аватар для NoName_emaNoN
 
Регистрация: 15.11.2007
Сообщений: 229
По умолчанию Определить создан ли TStringList

Добрый день!

Есть функция в своём компоненте, там нужно поставить проверку на то что входной StringList создан или нет, и если нет, то создавать его.

Код:
procedure TMyComponent.GetRecordsList(List: TStringList);
Дело в том, что Assigned не работает. а проверять вызывая exception не хотелось бы. Есть ещё способы?
Компьютер не подчиняется законам физики: глюки возникают из ниоткуда, файлы исчезают в никуда, а вес измеряется в метрах.
NoName_emaNoN вне форума Ответить с цитированием
Старый 14.11.2010, 16:57   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Код:
if MyStringList =nil then
//MyStringList не создан
mihali4 вне форума Ответить с цитированием
Старый 14.11.2010, 17:06   #3
NoName_emaNoN
Форумчанин
 
Аватар для NoName_emaNoN
 
Регистрация: 15.11.2007
Сообщений: 229
По умолчанию

Не работает
Компьютер не подчиняется законам физики: глюки возникают из ниоткуда, файлы исчезают в никуда, а вес измеряется в метрах.
NoName_emaNoN вне форума Ответить с цитированием
Старый 14.11.2010, 17:09   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

либо проверять указатель на nil, либо никак.
ибо если обьект не существует то будет AV.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.11.2010, 17:16   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от NoName_emaNoN Посмотреть сообщение
Не работает
Простите, но это - чушь...
Я в обязательном порядке проверяю перед тем, как выложить ответ....
Все прекрасно работает.
mihali4 вне форума Ответить с цитированием
Старый 14.11.2010, 17:17   #6
NoName_emaNoN
Форумчанин
 
Аватар для NoName_emaNoN
 
Регистрация: 15.11.2007
Сообщений: 229
По умолчанию

Тоже не работает. И самое странное что...

Код:
var L:TStringList;
begin
L.Add('bla');
Не вызывает ошибки.

17:19

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Простите, но это - чушь...
Я в обязательном порядке проверяю перед тем, как выложить ответ....
Все прекрасно работает.
Если это чушь, как вы смеете выражаться, то прошу выложить ваш "проверенный" код, чтобы исключить недоразумения.

Вот мой:
Код:
procedure TForm1.Button4Click(Sender: TObject);
var L:TStringList;
begin
if Assigned(L) then ShowMessage('AAAA');
end;
И сообщение выскакивает.
Компьютер не подчиняется законам физики: глюки возникают из ниоткуда, файлы исчезают в никуда, а вес измеряется в метрах.

Последний раз редактировалось mihali4; 14.11.2010 в 17:20.
NoName_emaNoN вне форума Ответить с цитированием
Старый 14.11.2010, 17:19   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Смею, смею...

Нормальный подход - объявлять его в локальных переменных, а потом пытаться проверить вне процедуры, где он был объявлен...
Литературой по программированию, похоже, брезгуете ?

И кстати:
У нас принято пользоваться кнопочкой "Правка", дабы не плодить посты подряд, друг за другом. Это - флуд.
Читаем правила. Рекомендую. Помимо общих правил форума есть и дополнения к ним в каждом разделе...
Уважайте форумчан, и они ответят вам взаимностью...
Модератор

Последний раз редактировалось mihali4; 14.11.2010 в 19:12.
mihali4 вне форума Ответить с цитированием
Старый 14.11.2010, 17:24   #8
NoName_emaNoN
Форумчанин
 
Аватар для NoName_emaNoN
 
Регистрация: 15.11.2007
Сообщений: 229
По умолчанию

Упс, в этом да, ошибочка вышла. Если переменная передаётся в процедуру, то всё нормально определяется.
Литературой не брезгую, но в той, что у меня есть - ответа этот вопрос нет.
Компьютер не подчиняется законам физики: глюки возникают из ниоткуда, файлы исчезают в никуда, а вес измеряется в метрах.
NoName_emaNoN вне форума Ответить с цитированием
Старый 14.11.2010, 18:24   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

NoName_emaNoN
Просто на будущее.
По всем законам программирования любая переменная перед тем как она будет использована, должна быть проиницилизирована. Это - Святое правило. И часто причина трудноуловимых багов и самых неожиданных глюков ПО.
Другой вопрос, что многие компиляторы языков высокого уровня по разному относятся к использованию неиницилизированных переменных.
Delphi выдаст warning...
А вот программка под .NET compiler (например, на C#)
выдаст ошибку (имхо, абсолютно законно):
Код:
  int ii;
  // ii = 234;
  Console.WriteLine("Yout number is {0}:\n", ii);
Этот код не компилируется, если не убрать комментарий.

Вернёмся к Delphi.
Во всех известных версиях Delphi действует следующая не совсем документированная фишка (разработчики в документации к одной из версий сказали, что это так, но в будущей версии может и не быть. Но пока есть): Все глобальные переменные автоматически иницилизируются (нулём или пустым значением).
А вот локальные переменные - не иницилизируются.
(можете самостоятельно проверить это утверждение).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.11.2010, 20:03   #10
NoName_emaNoN
Форумчанин
 
Аватар для NoName_emaNoN
 
Регистрация: 15.11.2007
Сообщений: 229
По умолчанию

Да, спасибо, конечно, за прописные истины)
Проверять даже не буду, поверю на слово.
У меня была немного иная ситуация, и всё равно, кстати, Assigned не сработал, так что решил просто этого не делать до лучших времён, пока это не станет проблемой.
Компьютер не подчиняется законам физики: глюки возникают из ниоткуда, файлы исчезают в никуда, а вес измеряется в метрах.
NoName_emaNoN вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать, создан/уничтожен ли обьект типа TObject? Bad-XxX Общие вопросы Delphi 1 04.10.2010 18:46
Определить, создан ли класс. Alex Cones Общие вопросы Delphi 4 14.01.2010 18:12
Как проверить создан ли класс конструктором? Вадим Буренков Общие вопросы Delphi 10 01.07.2009 22:47
Проверить создан ли уже массив slips Общие вопросы C/C++ 2 19.04.2009 18:31
С помощью какого языка был создан windows? Pilmaks Свободное общение 20 24.10.2008 11:18