Текущий архив: 2004.12.19;
Скачать: CL | DM;
Вниз
Правильное унаследование свойств классов. Найти похожие ветки
← →
Виктор © (2004-12-06 10:42) [0]Доброго всем дня Ув. Мастера.
Пишу на библиотеках Bpl часто используемые uses запихнул в общую библиотеку vcl, DB, DBGrid, pFIBDatabase ,pFIBDataSet
Подскажите пожалуста как правильно описать свойства класса так, что бы в другом юните который использует общий подгружаемый модуль, видеть свойства перечисляемого типа?
← →
ЮЮ © (2004-12-06 10:57) [1]чтобы "видеть свойства", нужно обеспечить необходимую видимость
чтобы исользовать "перечисляемый тип" - в uses указать модуль, где он объявлен.
А нельзя побольше конкретики и проблематики в вопросе ? В чем проблемы?
← →
Виктор © (2004-12-06 11:10) [2]>чтобы исользовать "перечисляемый тип" - в uses указать модуль, где он объявлен.
Это все понятно, но проблема в том что я пытался объявить свойства самостоятельно но получил при присвоении несоответсвие типов.
////////// Объявляем класс edxDBGrid потомком класса TdxDBGrid
type
{ edxDBGridOptionView = (edgoAutoCalcPreviewLines, edgoAutoHeaderPanelHeight,
edgoAutoWidth, edgoBandHeaderWidth, edgoDrawEndEllipsis, edgoHideFocusRect,
edgoHotTrack, edgoIndicator, edgoInvertSelect, edgoPreview, edgoRowAutoHeight,
edgoRowSelect, edgoShowButtonAlways, edgoUseBitmap);
edxDBGridOptionsView = set of TdxDBGridOptionView;
}
edxDBGrid=class(TdxDBGrid)
private
public
constructor Create(AOwner: TComponent); override;
property eOptionsView:TdxDBGridOptionsView read GetView write SetView; пишу и читаю св-ва OptionsView класса TdxDBGrid
end;
Потребность возникла тогда, когда я захотел поменять эти свойства но не увидел множества значений.
А принцип проекта заключается в том, что все часто используемые функции, модули, константы и пр. выносятся в общую библиотеку которой пользуются другие модули.
← →
DiamondShark © (2004-12-06 11:12) [3]
> Потребность возникла тогда, когда я захотел поменять эти
> свойства но не увидел множества значений.
Где не увидел?
← →
Виктор © (2004-12-06 11:17) [4]> DiamondShark © (06.12.04 11:12) [3]
В другом модуле!
← →
DiamondShark © (2004-12-06 11:23) [5]Тип описан в interface модуля?
Модуль в uses указан?
← →
Виктор © (2004-12-06 11:32) [6]Project.exe
-> MAIN.BPL : переобъявлются все классы и содержит все uses-ы
-> sub_lib.bpl: по характеру проекта должен использовать то, что обозначено в MAIN-е.
← →
DiamondShark © (2004-12-06 11:37) [7]Ну и при чём тут bpl?
Тексты взаимозависимых модулей можно показать?
Хотя бы то место, где "не увидел"?
← →
Виктор © (2004-12-06 11:43) [8]-repeatedly-
А принцип проекта заключается в том, что все часто используемые функции, модули, константы и пр. выносятся в общую библиотеку которой пользуются другие модули.
← →
ЮЮ © (2004-12-06 11:46) [9]>MAIN.BPL : переобъявлются все классы и содержит все uses-ы
переобъявляться все классы и содаржать все uses-ы может, наверное, какой-нимудь MAIN.Pas
>sub_lib.bpl: по характеру проекта должен использовать то, что обозначено в MAIN-е.
но для этого всё равно в его uses должны указываться реальные модули, где впервые объявлены перечислимые типы, а не просто main. MAIN.BPL просто обеспечивает наличие всех модулей, но MAIN.pas никак не избавит от необходимости их упоминания в uses.
← →
DiamondShark © (2004-12-06 11:46) [10]Да не трахает никого принцип проекта.
У тебя в каком-то месте чего-то "не видит".
Вот и показывай это место.
← →
Виктор © (2004-12-06 11:54) [11]Так вот про это я и говорю:
в библиотеке(bpl) которая в свою очередь использует другую билбиотеку (main.bpl) вижу свойство наследуемого класса, но не могу его изменить поскольку оно перечисляемого типа.
Вот его нужно как-то описать что-бы я смог менять значения в любом месте проекта.
← →
DiamondShark © (2004-12-06 11:58) [12]
> но не могу его изменить поскольку оно перечисляемого типа.
Как меняем-то?
И что значит "не могу"? Ошибка компиляции? Ошибка времени исполнения? Результат не соответствует ожиданиям?
← →
Виктор © (2004-12-06 12:01) [13]Говорит нет такого значения свойтсва класса edxDBGrid которого я объявил предком класса TdxDBGrid.
← →
ЮЮ © (2004-12-06 12:11) [14]Ты читать умеешь?
uses <имя модуля, где этот перечислимый тип объявлен>
← →
DiamondShark © (2004-12-06 12:12) [15]Модуль, в котором описан тип, должен быть перечислен в uses.
← →
Виктор © (2004-12-06 12:26) [16]Уважаемые если Вы не понимаете принципа построения проекта с модульной организацией Plugin-ов зачем меня тритировать.
Я же все это время пытаюсь Вам объяснить что нет смысла в Bpl описывать uses-ы которые уже описаны в основном модуле Bpl, а основной модуль описывается в разделе requires.
Например работает же класс eFIBDatabase потомок класса TpFIBDatabase: его uses"s FIBDatabase, pFIBDatabase описаны только в основной библиотеке(Bpl), а там где я создаю FIBDatabase:eFIBDatabase я объявляю только основной модуль и все.
А вопрос был характера наследования и приведения типов.
← →
DiamondShark © (2004-12-06 12:37) [17]Уважаемый, никого не трахает принцип построения проекта.
Для того, чтобы использовать значения перечислимого типа, модуль, в котором описан этот перечислимый тип, должен быть указан в uses.
← →
Виктор © (2004-12-06 12:46) [18]Хорошо, тогда вопрос другой, как обойти подключения того модуля где указаны родные множества?
← →
DiamondShark © (2004-12-06 12:49) [19]Никак.
А зачем?
← →
Виктор © (2004-12-06 12:52) [20]Ну если Вас не ..рахает принцип построения проекта как же мне Вам объяснить >Зачем?
← →
DiamondShark © (2004-12-06 12:54) [21]Для чего такое извращение: "часто используемые uses запихнул в общую библиотеку"?
Ведь эта самая библиотека будет зависима от пакетов, содержащих всё это часто используемое.
← →
Виктор © (2004-12-06 12:57) [22]Простите но этот прицип используется в плагинах, если Вы этого не знали!
← →
DiamondShark © (2004-12-06 13:06) [23]
> Простите но этот прицип используется в плагинах, если Вы
> этого не знали!
Это вас обманули.
Но речь не о том.
Вот примерчик простой:
unit Unit2;
interface
type
TEnum = (one, two, three);
implementation
end.
unit Unit3;
interface
uses
Unit2;
type
TMyClass = class
public
Field: TEnum
end;
implementation
end.
unit Unit1;
interface
implementation
uses Unit3;
var
Z: TMyClass;
begin
Z.Field := one; // <= Undeclared identifier "one"
end.
Этот пример безотносителен к пакетам.
Модули могут быть в разных пакетах, в одном, или вообще в монолитном приложении.
Медитировать до просветления.
← →
ЮЮ © (2004-12-06 13:07) [24]так в плагинах же, а не в плагиатах, типа
edxDBGrid=class(TdxDBGrid);
у библиотеки dx наверняка есть RunTimе билиотека, как и у VCL. Вот их и распространяйте со своим приложением, а не "дутую" Main.bpl
Страницы: 1 вся ветка
Текущий архив: 2004.12.19;
Скачать: CL | DM;
Память: 0.53 MB
Время: 0.024 c