Ошибка открытия формы, содержащей TFBAnsiField

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ошибка открытия формы, содержащей TFBAnsiField

Сообщение alexs » 29.05.2008 16:20:54

В последней (сегодняшней сборке Lazarus и FPC не открываются формы, содержащие поля типа TFBAnsiField.
TFBAnsiField - это наследник от обычного TStringField. Сам тип в регистрации FBDataSet я регистрирую.
В v0.9.25 r15190M i386-win32-win32/win64 было нормально - форма открывалась. Теперь появляется ошибка о том, что нет возможности создать такое поле :(.
Но в той версии свой прикол - строковые поля не создаёются с 1-го раза. Поле создаётся только в момент создания любого целочисленного поля.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Ошибка открытия формы, содержащей TFBAnsiField

Сообщение Сергей Смирнов » 29.05.2008 16:53:06

А это TFBAnsiField вообще нужно зачем-то? Может, ну его нафик?

PS: Может быть, оно всё уже не важно, потому как кое-кто умудрился скомпилить FIB+ :)
Аватара пользователя
Сергей Смирнов
энтузиаст
 
Сообщения: 595
Зарегистрирован: 28.04.2005 13:23:25
Откуда: Москва

Re: Ошибка открытия формы, содержащей TFBAnsiField

Сообщение alexs » 29.05.2008 22:43:15

Ага. тока фибплюсы - хороошая вещь конечно. но тормозят...
а это нужно мне.
да и вобще - какой то баг в лазаре с сохзданием персистентных наследников от TField.

Добавлено спустя 22 часа 9 минут 56 секунд:
Такж заметил, что DataSet содержаший статические TFBAnsiField не удаляется. Только после очистки списка полей можно и его удалить.
У меня закрадывается подозрение, что наследников TField надо как-то специально регестрировать в IDE, причём RegisterClass я делаю - бех этого они в готовой программе не работают. А вот где ещё регистрировать - непонятно.
И не могу понять - как происходит регистрация стандартных наследников TField (тех, которые в модуле DB).
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Ошибка открытия формы, содержащей TFBAnsiField

Сообщение Attid » 31.05.2008 10:26:18

Сергей Смирнов писал(а):потому как кое-кто умудрился скомпилить FIB+

и что даже под линуксом ?
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: Ошибка открытия формы, содержащей TFBAnsiField

Сообщение Сергей Смирнов » 31.05.2008 13:38:29

alexs писал(а):Ага. тока фибплюсы - хороошая вещь конечно. но тормозят...
а это нужно мне.
да и вобще - какой то баг в лазаре с сохзданием персистентных наследников от TField.

Добавлено спустя 22 часа 9 минут 56 секунд:
Такж заметил, что DataSet содержаший статические TFBAnsiField не удаляется. Только после очистки списка полей можно и его удалить.
У меня закрадывается подозрение, что наследников TField надо как-то специально регестрировать в IDE, причём RegisterClass я делаю - бех этого они в готовой программе не работают. А вот где ещё регистрировать - непонятно.
И не могу понять - как происходит регистрация стандартных наследников TField (тех, которые в модуле DB).
Поскольку у фрипаскаля менеджер памяти продвинутее дельфёвого, может быть плюсы и не будут так тормозить :)

Я попробовал найти какие-то особенности наследников TField, объявленных в FCL, но ничего слишком уж необычного не обнаружил. Все встроенные в лазаря компоненты используют только наследников TField, объявленных в FCL, так что там ничего найти тоже не получается. Скорее всего, имеет место глюк FCL. А где можно исходники глянуть? В последней версии датасета?

Добавлено спустя 1 минуту 59 секунд:
Attid писал(а):
Сергей Смирнов писал(а):потому как кое-кто умудрился скомпилить FIB+

и что даже под линуксом ?
Не знаю... почему бы и нет?
Аватара пользователя
Сергей Смирнов
энтузиаст
 
Сообщения: 595
Зарегистрирован: 28.04.2005 13:23:25
Откуда: Москва

Re: Ошибка открытия формы, содержащей TFBAnsiField

Сообщение alexs » 31.05.2008 20:52:08

Всё - вопрос снят. Оказывается енобходимо дополнительно вызвать процедуру
Код: Выделить всё
RegisterNoIcon([TFBAnsiMemoField, TFBAnsiField]);

Сергей Смирнов писал(а):Я попробовал найти какие-то особенности наследников TField, объявленных в FCL, но ничего слишком уж необычного не обнаружил

В модуле dbctrls.pp происходит регистрация всех объектов - наследников TField через массив DefaultFieldClasses.
Исходники собираюсь выкладывать на Шаманграде на svn. Вот почитаю инструкцию как с моим локальным репозитарием их засинхронизировать :-) и выложу.
А по FIBPlus-ам - не могу разобраться где отключить фичу запроса к метаданным для оперделения доп. параметров полей. При 1-м открытии запроса они постоянно генерят системные запросы, которые мне нафиг не нужны. На быстродействие на слабом канале очень сильно влияет.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Ошибка открытия формы, содержащей TFBAnsiField

Сообщение Сергей Смирнов » 31.05.2008 23:44:21

alexs писал(а):Всё - вопрос снят. Оказывается енобходимо дополнительно вызвать процедуру
Код: Выделить всё
RegisterNoIcon([TFBAnsiMemoField, TFBAnsiField]);
То есть, судя по всему, таким образом надо регистрировать не только наследников TField? Что нибудь более подробное про этот регистратор известно?
alexs писал(а):В модуле dbctrls.pp происходит регистрация всех объектов - наследников TField через массив DefaultFieldClasses.
Попахивает "грязным хаком" :?
alexs писал(а):А по FIBPlus-ам - не могу разобраться где отключить фичу запроса к метаданным для оперделения доп. параметров полей. При 1-м открытии запроса они постоянно генерят системные запросы, которые мне нафиг не нужны. На быстродействие на слабом канале очень сильно влияет.
В частности, там вроде был флажок, отвечающий за получение дефолтных значений полей. Может есть и другие. Однако совсем уж полностью отключить, скорее всего, нельзя. А что, UIB ничего лишнего не читает?
Аватара пользователя
Сергей Смирнов
энтузиаст
 
Сообщения: 595
Зарегистрирован: 28.04.2005 13:23:25
Откуда: Москва

Re: Ошибка открытия формы, содержащей TFBAnsiField

Сообщение alexs » 01.06.2008 01:40:35

Сергей Смирнов писал(а): А что, UIB ничего лишнего не читает?

Пока не замечал :-)
Сергей Смирнов писал(а):В частности, там вроде был флажок, отвечающий за получение дефолтных значений полей

В том-тои дело, что полностью отключить в фибах не получается. Всё равно при первом запросе происходит чтение метаданных. Повторного уже нет. Но так как запросы создаются динамически - каждый раз получается, что метаданные перечитваются - не держать же из-за этого все компоненты статически созданными.
Сергей Смирнов писал(а):Что нибудь более подробное про этот регистратор известно?

Может Павел знает? или надо на англицком форуме спросить. Почему существует два регистратора для не визуальных компонент? RegisterClass (аналогичное есть в дельфях) и RegisterNoIcon. Второй, я подозреваю, необходим для самого лазаря.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9

Рейтинг@Mail.ru