Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Компонент на основе TFrame и bpl 
:(
    Опции темы
JSinx
Дата 29.9.2008, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 12.12.2006

Репутация: нет
Всего: 1



Есть 2 библиотеки (допустим first.bpl и second.bpl). Вторая библиотека использует первую (всякие общие файлы и т.п.)

В first.bpl у меня сделан компонент (TTestFrame) на основе TFrame (сделал все правильно, через File -> New -> Frame).
Если в этой же библиотеке создавать фрейм на основе TTestFrame, все нормально работает и ничто не ругается.

Чтобы создать во второй библиотеке фрейм на основе TTestFrame, приходиться включать файл с компонентом в библиотеку и создавать фрейм.  После этого он перестает компилироваться, т.к. говорит, что этот файл уже есть в другой библиотеке. 
Если убрать файл из библиотеки, то при переходе на дизайн фрейма, ругается :(
"Error creating form: Ancestor for TTestFrame not found".

Как быть то?
PM MAIL   Вверх
Bose
Дата 30.9.2008, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



надо в исходник второй библиотеки в секцию requires добавить название первой библиотеки.
а файл содержащий TTestFrame, НЕ ВКЛЮЧАТЬ во вторую библиотеку, а прописать в секции uses нужного юнита.
PM MAIL WWW Skype   Вверх
JSinx
Дата 30.9.2008, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 12.12.2006

Репутация: нет
Всего: 1



Цитата(Bose @ 30.9.2008,  14:46)
надо в исходник второй библиотеки в секцию requires добавить название первой библиотеки.
а файл содержащий TTestFrame, НЕ ВКЛЮЧАТЬ во вторую библиотеку, а прописать в секции uses нужного юнита.

Цитата(JSinx)

Вторая библиотека использует первую (всякие общие файлы и т.п.)



Естественно в секцию uses прописано, тогда бы была другая ошибка.
PM MAIL   Вверх
Bose
Дата 30.9.2008, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



Цитата(JSinx @  29.9.2008,  22:14 Найти цитируемый пост)
Чтобы создать во второй библиотеке фрейм на основе TTestFrame, приходиться включать файл с компонентом в библиотеку и создавать фрейм.  После этого он перестает компилироваться, т.к. говорит, что этот файл уже есть в другой библиотеке. 


вот пример того как должно быть:

Первая библиотека.dpk:
Код

package PACKAGE1;

requires
  ...
  ;

contains
  CommonUnit1 in 'CommonUnit1.pas',
  CommonUnit2 in 'CommonUnit2.pas',
  Package1Unit1 in 'Package1Unit1.pas',
  Package1Unit2 in 'Package1Unit2.pas',
  ...;
end.


Вторая библиотека.dpk:
Код

package PACKAGE2;

requires
  PACKAGE1,
  ;

contains
  Package2Unit1 in 'Package2Unit1.pas',
  Package2Unit2 in 'Package2Unit2.pas',
  ...;
end.


а CommonUnit1 и CommonUnit2 должны быть прописаны только в секции uses нужных юнитов.


Но я не проверял как в этом случае работает визуальное наследование(создание фрейма на основе другого). 

PM MAIL WWW Skype   Вверх
JSinx
Дата 30.9.2008, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 12.12.2006

Репутация: нет
Всего: 1



У меня так:
файл первого проекта (где находиться базовая форма) general.bpl
Код

contains
  FrameBase in 'FrameBase.pas' {BaseFrame: TFrame};


Файл FrameBase.pas

Код

  TBaseFrame = class(TFrame)
  private
    { Private declarations }
    function funct1(): integer;
    procedure proc1 ( index : integer);

  public
    { Public declarations }
    constructor Create( AOwner : TComponent ); override;
  end;


Вторая библиотека:
Код

requires
  general;

contains
  frameSecond in 'frameSecond.pas' {SecondFrame: TFrame};


Файл  frameSecond.pas
Код

uses
  FrameBase ;

type
  TSecondFrame = class(TBaseFrame)
  private
    { Private declarations }
  public
    { Public declarations }
  end;


Добавлено через 14 минут и 55 секунд
Если запихнуть первую и вторую библиотеку в одну группу проектов, то работает :(. Мне же нужно, чтобы работало без добавления исходников первой библиотеки.
PM MAIL   Вверх
Bose
Дата 30.9.2008, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51



Цитата(JSinx @  30.9.2008,  17:32 Найти цитируемый пост)
Если запихнуть первую и вторую библиотеку в одну группу проектов, то работает :(. Мне же нужно, чтобы работало без добавления исходников первой библиотеки. 


Не работает это -
Цитата(JSinx @  29.9.2008,  22:14 Найти цитируемый пост)
при переходе на дизайн фрейма, ругается :(
"Error creating form: Ancestor for TTestFrame not found".

?????

Второй фрейм, использует визуальное наследование? 

А что вообще значит работает, не работает? 


Попробуй убрать исходники(.pas), но оставить dfm-файл. 


PM MAIL WWW Skype   Вверх
JSinx
Дата 30.9.2008, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 12.12.2006

Репутация: нет
Всего: 1



Цитата(Bose @ 30.9.2008,  18:16)
Не работает это -
Цитата(JSinx @  29.9.2008,  22:14 Найти цитируемый пост)
при переходе на дизайн фрейма, ругается :(
"Error creating form: Ancestor for TTestFrame not found".

?????
А что вообще значит работает, не работает? 


Выводит ошибку на экран и дизайнить форму нельзя.

Цитата(Bose @ 30.9.2008,  18:16)

Второй фрейм, использует визуальное наследование? 

Да, второй фрейм использует визуальное наследование. Его можно создать двумя путями:
  • создать в первой библиотеке и затем скопировать во вторую;
  • либо к второй библиотеке подключить файл и базовым фреймом, создать фрейм-наследник, затем убрать из библиотеки файл с базовым фреймом.


Это сообщение отредактировал(а) JSinx - 30.9.2008, 18:54
PM MAIL   Вверх
Bose
Дата 30.9.2008, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1458
Регистрация: 5.3.2005
Где: Riga, Latvia

Репутация: 23
Всего: 51




Цитата(JSinx @  30.9.2008,  18:52 Найти цитируемый пост)
Да, второй фрейм использует визуальное наследование. Его можно создать двумя путями:

    * создать в первой библиотеке и затем скопировать во вторую;
    * либо к второй библиотеке подключить файл и базовым фреймом, создать фрейм-наследник, затем убрать из библиотеки файл с базовым фреймом.

Мне кажется, что проблемы из-за визуального наследования. Лучше всего было бы совсем отказаться от него, оставив упоминания о TTestFrame только в .pas файле. 

Попробуй ещё такой вариант:
Цитата(Bose @  30.9.2008,  18:16 Найти цитируемый пост)
Попробуй убрать исходники(.pas), но оставить dfm-файл от TTestFrame. 


PM MAIL WWW Skype   Вверх
JSinx
Дата 30.9.2008, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 12.12.2006

Репутация: нет
Всего: 1



Решил изменить структуру, чето гемороиться не охота.

Лучше сделаю класс, который будет содержать нужные мне методы + простой фрейм, чем так мучаться.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0544 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.