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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2014, 14:22   #1
DarkSmile
Пользователь
 
Регистрация: 14.03.2013
Сообщений: 24
По умолчанию Обнуление параметров класса

Здравствуйте! Столкнулся с такой непонятной проблемой, имеются классы:

Код:
TEeventParam = class(TStringList)
    public
      ProcName: string;
      vars: TStringList;
      constructor Create; virtual;
  end;

  TCodeEvent = record
    public
      _OnShanage:   TEeventParam;
      _OnClick:     TEeventParam;
      _On2xClick:   TEeventParam;
      _OnClose:     TEeventParam;
      _OnCloseQuery:TEeventParam;
      _OnCreate:    TEeventParam;
      _OnAktivate:  TEeventParam;
      _OnDeaktivate:TEeventParam;
      _OnShow:      TEeventParam;
      _OnHide:      TEeventParam;
      _OnResize:    TEeventParam;
      _OnPaint:     TEeventParam;
      _OnKeyUp:     TEeventParam;
      _OnKeyDown:   TEeventParam;
      _OnDownMause: TEeventParam;
      _OnUpMause:   TEeventParam;
      _OnMoveMouse: TEeventParam;
      _OnLeaveMouse:TEeventParam;
      _OnSelect:    TEeventParam;
  end;

  TSelectComp = class
    public
      NumEvent: Integer;
      CodeEvent: TCodeEvent;
      CompEvents: TCompEvents;
      constructor Create; virtual;
  end;
Мне нужно определять какие из переменныхTCodeEvent равны nil, делаю это так:

Код:
 if TSelectComp(SelectedComponent).CodeEvent._OnShanage = nil then
    ShowMessage('is nil');
 end;
И так с каждой переменной. Изначально все переменные TCodeEvent должны равняться nil, но по какой то не понятной мне причине, некоторые из переменных не равны nil.
Delphi показывает:


Скажите пожалуйста почему так то? У меня уже не осталось идей как их обнулить при создании
DarkSmile вне форума Ответить с цитированием
Старый 06.04.2014, 14:41   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну а ты опиши конструктор, в котором будет обнуление.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.04.2014, 15:13   #3
DarkSmile
Пользователь
 
Регистрация: 14.03.2013
Сообщений: 24
По умолчанию

Да я делал так

Код:
constructor TSelectComp.Create;
begin
   inherited Create;
   CompEvents:= TCompEvents.Create;
   CodeEvent._OnShanage := nil;
   CodeEvent._OnClick := nil;
   и т.д.
end;
Но ему на это пофиг

Последний раз редактировалось DarkSmile; 06.04.2014 в 15:38.
DarkSmile вне форума Ответить с цитированием
Старый 06.04.2014, 15:32   #4
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

Ничего не путаете? TCompEvents - это что-то другое, Вами не описанное
ReportCube вне форума Ответить с цитированием
Старый 06.04.2014, 15:39   #5
DarkSmile
Пользователь
 
Регистрация: 14.03.2013
Сообщений: 24
По умолчанию

Ой да имена попутал, но фак в том что не обнуляет
DarkSmile вне форума Ответить с цитированием
Старый 06.04.2014, 15:57   #6
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,883
По умолчанию

Цитата:
Код:
OnShanage
OnAktivate
OnDeaktivate
OnDownMause
OnUpMause
Engrish

Скорее всего, проблемы из-за того, что TCodeEvent - запись (record). Я бы на Вашем месте сделал классом - всё равно Вы вызываете конструктор (хоть и у ошибочно Вами указанного типа TCompEvents, я полагаю Вы подразумевали именно TCodeEvent). У класса гарантированно все поля инициализируются в nil (0 и т.д.), у записи не помню чтобы была гарантия.
phomm вне форума Ответить с цитированием
Старый 06.04.2014, 16:34   #7
DarkSmile
Пользователь
 
Регистрация: 14.03.2013
Сообщений: 24
По умолчанию

Сделал классом, теперь все переменные имеют значение
DarkSmile вне форума Ответить с цитированием
Старый 06.04.2014, 16:55   #8
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

Неверный код, показывайте - как делали. Чудес не бывает, поверьте...
ReportCube вне форума Ответить с цитированием
Старый 06.04.2014, 17:09   #9
DarkSmile
Пользователь
 
Регистрация: 14.03.2013
Сообщений: 24
По умолчанию

Заменил record на class

Код:
TCodeEvent = class
      _OnShanage:   TEeventParam;
      _OnClick:     TEeventParam;
      _On2xClick:   TEeventParam;
      _OnClose:     TEeventParam;
      _OnCloseQuery:TEeventParam;
      _OnCreate:    TEeventParam;
      _OnAktivate:  TEeventParam;
      _OnDeaktivate:TEeventParam;
      _OnShow:      TEeventParam;
      _OnHide:      TEeventParam;
      _OnResize:    TEeventParam;
      _OnPaint:     TEeventParam;
      _OnKeyUp:     TEeventParam;
      _OnKeyDown:   TEeventParam;
      _OnDownMause: TEeventParam;
      _OnUpMause:   TEeventParam;
      _OnMoveMouse: TEeventParam;
      _OnLeaveMouse:TEeventParam;
      _OnSelect:    TEeventParam;
  end;
В конструктор TSelectComp добавил создание CodeEvent

Код:
constructor TSelectComp.Create;
begin
   inherited Create;
   CompEvents := TCompEvents.Create;
   CodeEvent  := TCodeEvent.Create;
end;
DarkSmile вне форума Ответить с цитированием
Старый 06.04.2014, 17:17   #10
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

Замечательно. А теперь поставьте точку останова на выходе из конструктора и посмотрите в отладчике свойства всех элементов CodeEvent.
ReportCube вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Организация программ с использованием процедур .использованием параметров-значений и параметров переменных Фрейтор 40-500 Помощь студентам 0 02.11.2012 21:58
Организация программ с использованием процедур .использованием параметров-значений и параметров переменных Фрейтор 40-500 Помощь студентам 6 02.11.2012 21:46
Обнуление переменных Dmitry1983 PHP 8 25.06.2011 19:13
обнуление kuzjaca Microsoft Office Access 7 24.02.2011 10:03
обнуление счетчика в бд Tanuska___:) БД в Delphi 2 22.01.2009 23:10