Конференция "Начинающим" » Ошибка при чтении компонента из потока
 
  • TStas (18.04.11 21:28) [0]
    У меня есть программа, в ней используются самописные компоненты, которые, впрочем, в среду не добавлялись, поскольку они только в ней и используются. Есть настраиваемые окна, которые сохраняются в поток в виде строки, а потом из строки грузятся.
    До сегодняшнего дня все было нормально. Сегодня добавил еще один компонент в настраиваемое окно. Он записывается, но не хочет читаться. Ошибка 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'а сделан.
  • Германн © (18.04.11 23:28) [1]
    А RegisterClass при этом не нужен?
  • TStas (19.04.11 15:55) [2]
    Может, и нужен, но ведь это, во-первых, для добавления компонента в среду, а, во-вторых, а как же тогда корректно работает его "брат" (тоже TGroupBox)? Ведь с нимм все нормально.
  • TStas (19.04.11 15:56) [3]
    Может, и нужен, но ведь это, во-первых, для добавления компонента в среду, а, во-вторых, а как же тогда корректно работает его "брат" (тоже TGroupBox)? Ведь с нимм все нормально.
  • TStas (19.04.11 15:57) [4]
    Может, и нужен, но ведь это, во-первых, для добавления компонента в среду, а, во-вторых, а как же тогда корректно работает его "брат" (тоже TGroupBox)? Ведь с нимм все нормально.
  • Ega23 © (19.04.11 16:16) [5]

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


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


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

    Он зарегистрирован.
  • TStas (19.04.11 18:43) [6]
    >Он зарегистрирован. //Нет, неужели бы я до такой простой вещи не додумался! Нет, он НЕ зарегистрирован. Меня больше всего удивляет то, что в поток он вполне корректно пишется, но не читается из потока. А с "братиком" (тоже компонетом наследником TGroupBox) ничего подобного не происходит.
    Дельфи 7
  • Игорь Шевченко © (19.04.11 19:03) [7]

    > Ошибка Class TStAddressBox not found


    RegisterClass
  • _Юрий (19.04.11 19:06) [8]

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


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


    Автор, если Вы все знаете лучше всех, зачем тогда спрашиваете?
  • TStas (19.04.11 19:29) [9]
    Юрий, извините. Просто естьдва весьма похожих компонента, они оба из из TGroupBox'а сделаны. И обо представляют собой Edit и кнопки. В обоих случаях кнопки открывают диалоговые окна. Но один из них, который корректно сохраняется, хранит просто текстовую строку, ссылку на файл (имя файла), а второй хранит запись. Запись содержит строковые поля. Может, с этим связано?
    Что TGroupBox зарегисрирован, я прекрасно понимаю. Как обойти это, тоже, в целом, ясно. Сделать обычное окно, и все бует работать. Но надо же понять, в чем ошибка. Значит, я чего-то важного не знаю, или знаю, но дела что-то не так.
  • sniknik © (19.04.11 19:45) [10]
    > Но надо же понять, в чем ошибка.

    RegisterClass

    пока не сделаешь/проверишь/покажешь все будет сводится к этому...
  • TStas (19.04.11 20:44) [11]
    Я с своему стыду, когда про RegisterClass
    читал, его с RegisterComponent перепутал. А как егог написать и вызывать?
  • TStas (19.04.11 21:00) [12]
    Игорь! Когда очередное ММП? С меня пиво!!!! А надо-то было всего-то написать
    Initialization
    RegisterClass(TStAddressBox);

    Но тогда вопрос, уже ко всем: а как-же подобный ему компонент работает? Неужели из-за того, что что у данного компонента центральное св-во, из-за котрого он и был написан - это запись, да еще и со строковыми полями?
    Просто выкладывать код обоих компонентов, да ещё и с окнами редакторов, не хочется, да и вряд ли их кто-то читать будет. Но ведь надо же понять!
  • Ega23 © (20.04.11 14:13) [13]

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


    Надо смотреть код.
  • TStas (20.04.11 17:17) [14]
    RegisterClass там точно нет, поскольку о существовании этой ф-ции я только вчера узнал. Код могу выложить, но он большой и вряд ли его кто-то будет читать. Если вкратце, то оба компонента - это групбоксы, на которых размещён эдит и кнопки. Но делают они совсем разные вещи и хранят разную информацию. Первый, который и раньше работал корректно, хранит просто строчку с именем файла, а второй, из-за которого и задал вопрос, хранит запись об адресе. Оба компонента имеют окна, при помощи которых данные редактируются.
  • Ega23 © (20.04.11 17:28) [15]

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

    Ещё раз: надо смотреть код. Не только юнита с данным контролом, но и всего того, что в .dpk прописано.
  • sniknik © (20.04.11 19:43) [16]
    - ты суслика видишь?
    - нет.
    - и я нет. а он есть!
 
Конференция "Начинающим" » Ошибка при чтении компонента из потока
Есть новые Нет новых   [120271   +35][b:0][p:0.001]