8 / 8 / 0
Регистрация: 19.04.2011
Сообщений: 102

Разработка визуальных компонентов - компонент потомок TGraphicControl

12.11.2011, 16:07. Показов 8685. Ответов 34
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно разработать визуальный компонент потомок TGraphicControl, представляющий собой любую статическую картинку на форме.
Помогите пожалуйста найти хорошую книжку, самоучитель или готовый пример.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.11.2011, 16:07
Ответы с готовыми решениями:

Потомок TGraphicControl
Требуется сделать потомок TGraphicControl который представляет собой меняющуюся по времени картинку (2штуки) сделать 3 св-ва Image1, image2...

Дизайн визуальных компонентов
Возможно ли изменить внешний вид визуальных компонентов, сохранив их прежнюю функциональность, не прибегая к созданию класса-наследника...

Создание визуальных компонентов
Всем здравствуйте. Подскажите где можно почитать о создании своих визуальных компонентов. Например, Edit с произвольной рамкой...

34
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
16.11.2011, 20:07
Студворк — интернет-сервис помощи студентам
как сделал? с ресурса считываешь картинку?
а то теперь и у меня проблема появилась.
когда кидаю TMyGraphicControl на форму - все нормально.
когда запускаю на выполнение - появляется исключение EResNotFound with message 'Resource BITMAP_0'. до этого проверял - такого вроде не было.
0
8 / 8 / 0
Регистрация: 19.04.2011
Сообщений: 102
16.11.2011, 22:03  [ТС]
.dcr файл с картинкой сделал. назвал и файл и картинку как компонент.
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
17.11.2011, 07:25
а считывал картинку таким образом?
LoadFromResourceName((int)HInstance, название_битмапа);
0
8 / 8 / 0
Регистрация: 19.04.2011
Сообщений: 102
17.11.2011, 08:05  [ТС]
Нет, я такого даже не писал ни где.
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
17.11.2011, 08:12
а как тогда картинку на форме отображаешь?
0
8 / 8 / 0
Регистрация: 19.04.2011
Сообщений: 102
17.11.2011, 12:21  [ТС]
DCR это файл ресурсов для компонента, его нужно назвать так же как и класс, а в нём уже находится картинка с таким же названием. При создании компонента присоединяешь к нему этот файл и всё(у меня он автоматически был прописан, хотя и не создан).

Добавлено через 3 минуты
Файл dcr можно создать так :
Tools/Image Editor; File/New/Component Resource File. Внутри создаёшь картинку(Bitmap) 24х24.
0
8 / 8 / 0
Регистрация: 19.04.2011
Сообщений: 102
17.11.2011, 12:25  [ТС]
Вот проверь.
Вложения
Тип файла: zip Компонент.zip (547.0 Кб, 24 просмотров)
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
17.11.2011, 12:27
но эта не картинка, а пиктограмма
я про неё написал на 2-й странице этой темы

Цитата Сообщение от dryn-da Посмотреть сообщение
Нужно разработать визуальный компонент потомок TGraphicControl, представляющий собой любую статическую картинку на форме.
в этом задании имеется ввиду то, что когда кидаешь компонент с палитры компонентов на форму, то на ней (на форме) должна отобразиться картинка.
0
8 / 8 / 0
Регистрация: 19.04.2011
Сообщений: 102
17.11.2011, 16:19  [ТС]
Ну дак у меня нарисована картинка

Добавлено через 1 минуту
Здесь изображение не нужно

Добавлено через 1 минуту
А если хочешь изображение то просто создать свойство в классе компонента типа TImage.
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
17.11.2011, 16:22
если бы посмотрели на мой компонент, то там уже это свойство есть.
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
17.11.2011, 21:26
Провозившись с компонентом, решил залить свой вариант TMyGraphicControl для C++ Builder 6, представляющий собой статическую картинку на форме. При кидании компонента на форму появится картинка, которая уже вшита в компонент, но при этом есть возможность её поменять на свою через свойство Picture.

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

Последовательность шагов, необходимых для нормальной установки компонента:
1) Открыть MyComponents.bpk
2) Зайти в Tools->Environment Options->Library и добавить путь до папки, в которую был распакован архив. Этот шаг нужно выполнить в случае, когда архив распаковывается в папку, о которой не знает билдер. Если этот шаг пропустить, то может возникнуть такая ситуация, когда билдер будет требовать MyGraphicControl.
3) Если в билдере уже установлен компонент с названием класса TMyGraphicControl, то зайдите
в Component->Install Packages и удалите Package (кнопка Remove), в котором находится этот компонент.
4) Нажать Project->Build All Projects
5) В окошке Package нажать Compile и затем Install.
6) Установка компонента закончена, перезапускаем билдер.

В самом проекте на форму кидаем компонент TMyGraphicControl из вкладки Samples. На форме появится картинка. Пробуем запустить программу. Если во время запуска появится ошибка: "отсутствует файл TMyGraphicControl1.bpl", то идём в Project->Options->Packages и убираем галочку с "Build with runtime packages" либо в самом конце "поля с пакетами" стираем слово "TMyGraphicControl". Было очень хорошо, если б кто-нибудь рассказал, как избавиться от этой проблемы.

Примечание: при динамическом создании экземпляров TMyGraphicControl, картинка не будет автоматом появляться, тут придется уже загружать свою картинку, используя Picture->LoadFromFile.
Потравив много времени, тестируя разными способами компонент, я понял, что не возможно автоматом при динамическом создании экземпляра TMyGraphicControl отобразить картинку на форме в случае, когда проект скомпилирован с выключенной галочкой "build with runtime packages", и сама программа размещена на компьютере, на котором не установлен билдер.
Вшитая картинка прописана в .rc-файле
Вложения
Тип файла: rar TMyGraphicControl.rar (149.5 Кб, 31 просмотров)
0
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
17.11.2011, 22:38
Цитата Сообщение от kzru_hunter Посмотреть сообщение
Потравив много времени, тестируя разными способами компонент, я понял, что не возможно автоматом при динамическом создании экземпляра TMyGraphicControl отобразить картинку на форме в случае, когда проект скомпилирован с выключенной галочкой "build with runtime packages", и сама программа размещена на компьютере, на котором не установлен билдер.
Скорее всего просто не приложен DLL с вашим компонентом, вот и читает, что может. Пока точнее сказать не могу, архив не сохраняется.

Добавлено через 22 минуты
C++
1
2
3
4
5
HINSTANCE HInst = LoadLibrary("MyComponents.bpl");
if (HInst != NULL)
{
  FPicture->Bitmap->LoadFromResourceName((int)HInst, "BITMAP_0");
}
Не очень хорошо, ибо библиотека хотя бы в деструкторе должна выгружаться и она уже может быть открыта программой, так что лучше ссылаться на ресурсы программы, а дополнительные графические ресурсы перед компиляцией:
C++
1
#pragma resource "MyPicture.res"
Прорисовку тоже лучше чуток подправить. Рисовать изображение только если не в дизайне (использовать else). Смысл try & catch немного не понятен, но на случай внезапного исчезновения Picture оставить можно.
Если оставлять процедуру PictureChanged, то желательно использовать его с bool AutoSize.
И объявление
C++
1
Graphics::TPicture* FPicture;
Лучше все-таки перенести в private.
1
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
18.11.2011, 20:02
DefineTrueFalse Спасибо за замечания, особенно за
C++
1
#pragma resource "MyPicture.res"
Добавил эту строку в MyGraphicControl.cpp (если же её добавить в MyComponents.cpp, то картинка в bpl добавится, но не будет прикрепляться к проекту). После выполнения этого действия картинка теперь стала автоматически добавляться в ресурсы приложения.
Добавил ещё AutoSize.
Цитата Сообщение от DefineTrueFalse
Смысл try & catch немного не понятен, но на случай внезапного исчезновения Picture оставить можно.
try catch было использовано в исходнике TImage, поэтому так и оставил
Цитата Сообщение от DefineTrueFalse
FPicture Лучше все-таки перенести в private.
по невнимательности не туда вставил

Цитата Сообщение от DefineTrueFalse
Прорисовку тоже лучше чуток подправить. Рисовать изображение только если не в дизайне (использовать else)
не понял предложение

Проблемы и решения, которые у меня возникли при разработке компонента:
1) Ситуация: удалил bpl-файл компоненты. При следующем запуске Билдер спросил: "Не найден bpl файл. Попробовать загрузить его при следующем запуске?", и вы ответили: "Нет". После этого Билдер перестал загружать Package с компонентом при создании нового приложения (т.е. компонент перестал быть отображаться на палитре компонентов).
Решение:
Закройте все открытые проекты в Билдере. Щелкните на Compononet->Install Packages. Должно появится окно с названием "Project options for Default.exe". Активируйте Package. Click Ok.
Затем, не закрывая билдер, создайте новое приложение (File->New->Application). Закройте билдер и снова запустите. Вуаля, компонент на месте.
2) Регистрирую компонент так, чтобы он появлялся, например, на вкладке "MyControls", а он все равно находится на другой вкладке:
C++
1
RegisterComponents("MyControls", classes, 0);
Решение: такая ситуация произошла из-за того, что компонент с таким классом уже был до этого зарегистрирован в билдере и был размещен на другой вкладке, отличной от той, что вам нужна. Программный способ исправления этой ситуации мне не известен, но зато можно вручную перетащить этот компонент на нужную вкладку и проблема отпадет.
Вложения
Тип файла: rar TMyGraphicControl.rar (149.0 Кб, 33 просмотров)
0
 Аватар для kzru_hunter
1124 / 795 / 101
Регистрация: 01.02.2011
Сообщений: 1,887
Записей в блоге: 1
18.11.2011, 20:13
DefineTrueFalse Случаем, не возникало у Вас такое исключение?.
Оно возникает, когда в параметрах запуска компоненты (Run->Parameters) указываю в Host Application путь до bcb.exe. И когда пытаюсь отладить компоненту, при запуске оно вылазит.
0
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
18.11.2011, 22:37
Не думаю, что стоит использовать билдер, как хост приложение. Тогда уже создайте программу с использованием большинства функций компонента и указывайте его. А так хз что может с памятью происходить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.11.2011, 22:37

Анимация визуальных компонентов
Добрый день. Хочется увидеть кнопку с необычной анимацией Active/Hot в delphi. Например, как у гугл кнопки, когда наводишь на неё курсор...

Траблы с размещением визуальных компонентов
Прошу сильно не бить. В Visual Studio новичок, только что перешел из Delphi. Кидаю на форму MenuStrip и TabControl. Как сделать, чтобы...

Создание собственных визуальных компонентов
Добрый день! Мне необходимо создать свои собственные компоненты для отображения информации (виртуальные приборы). Посоветуйте, где...

Подключение визуальных компонентов к проекту
Здравствуйте, уважаемые форумчане.Подскажите пожадуйство в одном очень простом вопросе, но который у меня не получается решить. Мне нужно...

Удаление визуальных компонентов Runtime
Доброе время суток всем!:) Задачка нехитрая: нужно чтобы Панели с двумя SynEdit Появлялись на форме в заданном количестве. Есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
35
Ответ Создать тему
Опции темы

Новые блоги и статьи
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru