C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Компонент на основе нескольких других  (Прочитано 5669 раз)
d7d1cd
Участник


Сказали спасибо: +59/-24
Offline

Сообщений: 1005


Компонент на основе нескольких других
« : 25 Июнь 2014, 21:29:48 »

Привет всем. Подскажите, как создать визуальный компонент на основе других компонентов. Чтобы созданный компонент был на палитре, добавлялся на форму как стандартный и настраивался в инспекторе объектов. Например, необходим компонент, который состоит из панели (TPanel), на которой слева расположен компонент TImage, а справа TLabel.
Подскажите как или отправьте куда надо...
Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 786


Re: Компонент на основе нескольких других
« Ответ #1 : 25 Июнь 2014, 21:43:00 »

Конкретно ваш вопрос, а также подробное создание компонентов рассмотрено в книге:
Borland C++ Builder. Энциклопедия программиста. Platinum Edition
Авторы: Чарли Калверт, Кент Рейсдорф
Книга есть в сети в электронном виде. Например, здесь можно скачать старый вариант книги: http://biblioteka.cc/index.php?newsid=42774
Однако теория разложена по полочкам и в этом издании.
Записан
POV
Участник


Сказали спасибо: +107/-7
Offline

Сообщений: 640


Re: Компонент на основе нескольких других
« Ответ #2 : 25 Июнь 2014, 22:33:38 »

Массово программил только под билдером 6 и 2007. Использую исходник пустого компонента автоматически сгенеренный 6м билдером... 2007 как-то давно обидел меня создав ересь. Сейчас на базе того компонента пишу под все билдеры... это к слову как создать.

А по поводу "на базе других компонентов" - так компонент это просто объект какого-то класса. Тебе лишь надо его динамически создать. Какие сложности?

В подарок к "совету" мой компонент.
Записан
d7d1cd
Участник


Сказали спасибо: +59/-24
Offline

Сообщений: 1005


Re: Компонент на основе нескольких других
« Ответ #3 : 28 Июнь 2014, 14:31:28 »

Спасибо за пример компонента. Однако, не компилируется. Не находит файл vektor.h...
Записан
POV
Участник


Сказали спасибо: +107/-7
Offline

Сообщений: 640


Re: Компонент на основе нескольких других
« Ответ #4 : 28 Июнь 2014, 14:46:30 »

У тебя какая версия билдера?
попробуй что-то типа
#include
и т.п... поищи в хелпе как в данной бибилиотеке С++ инклудится это файло. Это стандартная вещь.
Записан
d7d1cd
Участник


Сказали спасибо: +59/-24
Offline

Сообщений: 1005


Re: Компонент на основе нескольких других
« Ответ #5 : 30 Июнь 2014, 17:51:03 »

В XE все получилось, а вот в XE4 ошибки. Думаю это уже не важно. Буду на Вашем примере создавать свой компонент. Спасибо за помощь!
« Последнее редактирование: 30 Июнь 2014, 17:59:18 от d7d1cd » Записан
d7d1cd
Участник


Сказали спасибо: +59/-24
Offline

Сообщений: 1005


Re: Компонент на основе нескольких других
« Ответ #6 : 02 Июль 2014, 18:18:31 »

Как говорится, поковырялся, поковырялся в системе и... не получилось. Делаю так:
1. Component - New Component...
2. Выбираю предка для моего нового компонента (TPanel), жму Next;
3. Задаю имя класса для моего нового компонента (TMyPanel);
4. Palette page оставляю без изменений (Samples);
5. В Unit name задаю путь (D:\Документы\RAD Studio\TMyPanel\TMyPanel.cpp);
6. Search path оставляю пустым, жму Next;
7. Выбираю Create Unit, жму Finish.
8. Нажимаю кнопку сохранения и сохраняю файл TMyPanel.cpp по выше указанному пути. Это как то странно, ведь система меня спрашивала в 5 пункте куда сохранять, однако не сохранила ничего в эту папку.

В итоге я вижу в файле TMyPanel.h заготовку моего нового компонента. Далее я хочу этот пустой компонент инсталлировать в систему. Замечу, что я ничего не писал в коде. Инсталлирую так:
1. Component - Install Component...
2. В поле Unit file name(s) выбираю файл TMyPanel.cpp;
3. Выбираю Install into a new package, жму Next;
4. Package name задаю D:\Документы\RAD Studio\TMyPanel\TMyPanel;
5. Выбираю С++Builder package, жму Finish.

Система делает компиляцию и пишет, что компонент успешно установлен, однако я не нахожу компонент TMyPanel на вкладке Samples. Этого компонента вообще нет на палитре. Подскажите, что я не так делаю?
Записан
POV
Участник


Сказали спасибо: +107/-7
Offline

Сообщений: 640


Re: Компонент на основе нескольких других
« Ответ #7 : 02 Июль 2014, 19:19:24 »

Когда-то когда я только начинал экспериментировать со своими компонентами (под 6м билдером), случалось так, что косячно установленный компонент устанавливается после сноса. "Стоял" он хорошо, в Component->InstallPackege был виден, в палитре якобы должен был присутствовать, но по факту его было видно. Т.е. проекты с таким компоннетом исправно работали, копоненты на форме есть, динамически создать можно. Но на палитре не были видны.
С 2007 билдера такого не наблюдал.
« Последнее редактирование: 06 Июль 2014, 18:30:15 от POV » Записан
POV
Участник


Сказали спасибо: +107/-7
Offline

Сообщений: 640


Re: Компонент на основе нескольких других
« Ответ #8 : 02 Июль 2014, 19:25:38 »

В наличие билдера нет, а на 2010 Delphi всё вышло.
Создал компонент (только сам *.pas файл компонента), создал паккадж, куда файл компонента добавил. Откомпилял, проинсталил - и вот он на палитре виден. Да.. пути я никакие не менял при создании компонента. Куда надо я его сохранил уже после создания.
« Последнее редактирование: 06 Июль 2014, 18:30:33 от POV » Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 786


Re: Компонент на основе нескольких других
« Ответ #9 : 02 Июль 2014, 22:19:13 »

Цитировать
Как говорится, поковырялся, поковырялся в системе и... не получилось.

Еще раз. Ваш вопрос по полочкам разложен в вышеуказанной книге.
Глава 2 стр.53
Записан
POV
Участник


Сказали спасибо: +107/-7
Offline

Сообщений: 640


Re: Компонент на основе нескольких других
« Ответ #10 : 03 Июль 2014, 08:31:12 »

Вот в несколько кликов сделал компонент типа TPanel1 в 2007 билдере. Всё видно на палитре.
Записан
d7d1cd
Участник


Сказали спасибо: +59/-24
Offline

Сообщений: 1005


Re: Компонент на основе нескольких других
« Ответ #11 : 03 Июль 2014, 17:38:28 »

Спасибо за помощь. Буду читать, изучать.
Записан
d7d1cd
Участник


Сказали спасибо: +59/-24
Offline

Сообщений: 1005


Re: Компонент на основе нескольких других
« Ответ #12 : 04 Июль 2014, 19:19:29 »

Ребят, ну какая то ж... прям! 
У меня С++Builder XE4. Пытаюсь создать "пустой" компонент на основе TPanel. Все делаю в точности как в Builder XE. Однако, если в XE все получается, то в XE4 я получаю ошибку:
[ilink32 Error] Fatal: Unable to open file 'C:\Documents and Settings\All Users\Документы\RAD Studio\11.0\BPL\MyPanel.pdi'

Этот файл (MyPanel.pdi) при компиляции не создается вообще нигде. Вопрос: почему линкер его требует и как все это исправить?

P.S. Пробовал установить компонент TExpand от господина POV. В XE все получается, в XE4 выше обозначенная ошибка. Пробовал создать Package (File - New - Package) и тут же скомпилировать - и опять выше указанная ошибка.
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Компонент на основе нескольких других
« Ответ #13 : 07 Июль 2014, 07:58:43 »

А надо указывать в опциях проекта пути к создаваемым файлам - см. Project -> Options -> -> BPI/LIB Output, ... -> Final output directory, ... -> Intermediate output. Везде можно поставить одну папку, например ".\BPL" (папка BPL будет создана в корне папки проекта).
Записан
d7d1cd
Участник


Сказали спасибо: +59/-24
Offline

Сообщений: 1005


Re: Компонент на основе нескольких других
« Ответ #14 : 07 Июль 2014, 17:39:37 »

Цитата: S0mbre от 07 Июль 2014, 07:58:43
А надо указывать в опциях проекта пути к создаваемым файлам - см. Project -> Options -> -> BPI/LIB Output, ... -> Final output directory, ... -> Intermediate output. Везде можно поставить одну папку, например ".\BPL" (папка BPL будет создана в корне папки проекта).
Спасибо за помощь! 
Пока все получилось ))
Записан
d7d1cd
Участник


Сказали спасибо: +59/-24
Offline

Сообщений: 1005


Re: Компонент на основе нескольких других
« Ответ #15 : 09 Июль 2014, 18:28:27 »

Назрел вопрос: после создания своего компонента (написания кода и компиляции), для переноса на другой компьютер и установки этого компонента в систему программирования, мне необходимы будут файлы *.bpl, *.bpi и *.h. Верно?
Записан
S0mbre
Глобальный модератор


Сказали спасибо: +1113/-22
Offline

Сообщений: 2132

S0mbre


Re: Компонент на основе нескольких других
« Ответ #16 : 10 Июль 2014, 07:02:39 »

Цитата: d7d1cd от 09 Июль 2014, 18:28:27
Назрел вопрос: после создания своего компонента (написания кода и компиляции), для переноса на другой компьютер и установки этого компонента в систему программирования, мне необходимы будут файлы *.bpl, *.bpi и *.h. Верно?

Да. И возможно *.res, если есть.
Записан
d7d1cd
Участник


Сказали спасибо: +59/-24
Offline

Сообщений: 1005


Re: Компонент на основе нескольких других
« Ответ #17 : 29 Август 2014, 12:48:18 »

Подскажите, где в настройках системы указать путь к моим файлам нового компонента (bpl, bpi и h). И еще: если мне понятно назначение файла h, то файлы bpl и bpi для меня загадка. Расскажите, зачем их 2 штуки? Разве нельзя было все "запихнуть" в 1 файл?
Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 786


« Ответ #18 : 25 Февраль 2015, 10:45:51 »

Кто успел скачать вышеописанную книгу Borland C++ Builder. Энциклопедия программиста. Platinum Edition по этой ссылке: http://biblioteka.cc/index.php?newsid=42774 выложите пожалуйста для доступа, а то по этой ссылке книга стала недоступна.
Спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.114 секунд. Запросов: 21.