Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.027 c
1-1102078078
СергА
2004-12-03 15:47
2004.12.19
отладка исходного кода Delphi


1-1102082863
MegaVolt
2004-12-03 17:07
2004.12.19
Почему один кусок кода работает а второй нет ведь они эквивалентн


14-1101805553
парамоша
2004-11-30 12:05
2004.12.19
Экспорт революции


11-1084281508
Рома
2004-05-11 17:18
2004.12.19
Снимок с экрана


3-1101100426
АланЖук
2004-11-22 08:13
2004.12.19
IBConsole -> Tools -> Interactive SQL...