Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.76/42: Рейтинг темы: голосов - 42, средняя оценка - 4.76
8 / 8 / 0
Регистрация: 19.04.2011
Сообщений: 102

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

12.11.2011, 16:07. Показов 8515. Ответов 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru