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

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

Ошибка при чтении компонента из потока


TStas ©   (2011-04-18 21:28:00) 

У меня есть программа, в ней используются самописные компоненты, которые, впрочем, в среду не добавлялись, поскольку они только в ней и используются. Есть настраиваемые окна, которые сохраняются в поток в виде строки, а потом из строки грузятся.
До сегодняшнего дня все было нормально. Сегодня добавил еще один компонент в настраиваемое окно. Он записывается, но не хочет читаться. Ошибка Class TStAddressBox not found
Вот как сохраняется в виде строки компонент, который вполне корректно пишется и читается:

object TRefBox
   Left = 86
   Top = 198
   Width = 300
   Height = 50
   HelpContext = 2012
   Caption = #1057#1089#1099#1083#1082#1072
   ParentShowHint = False
   ShowHint = True
   TabOrder = 1
   FileType = ftFirms
   DesignSize = (
     300
     50)
 end

А вот компонет, который пытался добавить сегодня. Он пишется, но не читается:
 object TStAddressBox //Пишет, что этот класс не найден.
   Left = 39
   Top = 215
   Width = 300
   Height = 50
   HelpContext = 2015
   Caption = #1040#1076#1088#1077#1089
   Constraints.MinHeight = 40
   Constraints.MinWidth = 130
   ParentShowHint = False
   ShowHint = True
   TabOrder = 1
   CheckMode = [cmStreet, cmTown]
   DesignSize = (
     300
     50)
 end

Ну что может быть не так? Они даже внешне похожы, причем последний даже проще. Сколько не смотрел Фаронова "Искусство создания компонентов", там даже намека нет на подобные вещи. Дельфи седьмые.
Да, оба компонета наследники TGroupBox'а. Именно поэтому я корректные и выложил, что он тоже из TGroupBox'а сделан.


sniknik   (2011-04-20 19:43:00) [1]

- ты суслика видишь?
- нет.
- и я нет. а он есть!


Ega23   (2011-04-20 17:28:00) [2]


> RegisterClass там точно нет

Ещё раз: надо смотреть код. Не только юнита с данным контролом, но и всего того, что в .dpk прописано.


TStas   (2011-04-20 17:17:00) [3]

RegisterClass там точно нет, поскольку о существовании этой ф-ции я только вчера узнал. Код могу выложить, но он большой и вряд ли его кто-то будет читать. Если вкратце, то оба компонента - это групбоксы, на которых размещён эдит и кнопки. Но делают они совсем разные вещи и хранят разную информацию. Первый, который и раньше работал корректно, хранит просто строчку с именем файла, а второй, из-за которого и задал вопрос, хранит запись об адресе. Оба компонента имеют окна, при помощи которых данные редактируются.


Ega23   (2011-04-20 14:13:00) [4]


>  а как-же подобный ему компонент работает?


Надо смотреть код.


TStas   (2011-04-19 21:00:00) [5]

Игорь! Когда очередное ММП? С меня пиво!!!! А надо-то было всего-то написать
Initialization
RegisterClass(TStAddressBox);

Но тогда вопрос, уже ко всем: а как-же подобный ему компонент работает? Неужели из-за того, что что у данного компонента центральное св-во, из-за котрого он и был написан - это запись, да еще и со строковыми полями?
Просто выкладывать код обоих компонентов, да ещё и с окнами редакторов, не хочется, да и вряд ли их кто-то читать будет. Но ведь надо же понять!


TStas   (2011-04-19 20:44:00) [6]

Я с своему стыду, когда про RegisterClass
читал, его с RegisterComponent перепутал. А как егог написать и вызывать?


sniknik   (2011-04-19 19:45:00) [7]

> Но надо же понять, в чем ошибка.

RegisterClass

пока не сделаешь/проверишь/покажешь все будет сводится к этому...


TStas   (2011-04-19 19:29:00) [8]

Юрий, извините. Просто естьдва весьма похожих компонента, они оба из из TGroupBox'а сделаны. И обо представляют собой Edit и кнопки. В обоих случаях кнопки открывают диалоговые окна. Но один из них, который корректно сохраняется, хранит просто текстовую строку, ссылку на файл (имя файла), а второй хранит запись. Запись содержит строковые поля. Может, с этим связано?
Что TGroupBox зарегисрирован, я прекрасно понимаю. Как обойти это, тоже, в целом, ясно. Сделать обычное окно, и все бует работать. Но надо же понять, в чем ошибка. Значит, я чего-то важного не знаю, или знаю, но дела что-то не так.


_Юрий   (2011-04-19 19:06:00) [9]


> Он зарегистрирован.


> Нет, он НЕ зарегистрирован.


Автор, если Вы все знаете лучше всех, зачем тогда спрашиваете?


Игорь Шевченко   (2011-04-19 19:03:00) [10]


> Ошибка Class TStAddressBox not found


RegisterClass


TStas   (2011-04-19 18:43:00) [11]

>Он зарегистрирован. //Нет, неужели бы я до такой простой вещи не додумался! Нет, он НЕ зарегистрирован. Меня больше всего удивляет то, что в поток он вполне корректно пишется, но не читается из потока. А с "братиком" (тоже компонетом наследником TGroupBox) ничего подобного не происходит.
Дельфи 7


Ega23   (2011-04-19 16:16:00) [12]


> но ведь это, во-первых, для добавления компонента в среду


Это не для добавления в среду, а для создания экземпляра класса по его имени.


> а как же тогда корректно работает его "брат" (тоже TGroupBox)

Он зарегистрирован.


TStas   (2011-04-19 15:57:00) [13]

Может, и нужен, но ведь это, во-первых, для добавления компонента в среду, а, во-вторых, а как же тогда корректно работает его "брат" (тоже TGroupBox)? Ведь с нимм все нормально.


TStas   (2011-04-19 15:56:00) [14]

Может, и нужен, но ведь это, во-первых, для добавления компонента в среду, а, во-вторых, а как же тогда корректно работает его "брат" (тоже TGroupBox)? Ведь с нимм все нормально.


TStas   (2011-04-19 15:55:00) [15]

Может, и нужен, но ведь это, во-первых, для добавления компонента в среду, а, во-вторых, а как же тогда корректно работает его "брат" (тоже TGroupBox)? Ведь с нимм все нормально.


Германн   (2011-04-18 23:28:00) [16]

А RegisterClass при этом не нужен?


Наверх

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