Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/34: Рейтинг темы: голосов - 34, средняя оценка - 4.53
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30

Изменение glyph'а во время работы программы

02.11.2009, 16:37. Показов 6995. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В качестве кнопочки с рисунком я использую TSpeedButton. Через дизайнер форм вроде бы как разобрался как прицеплять к кнопке картинку. Теперь вопрос, а как это делать в процессе работы программы? Условно говоря есть копка старт-стоп. Пока ничего в программе не запущено, на кнопке горит зелёная стрелочка. Как мы её нажимаем, процесс пошёл, надо чтобы на кнопке отображался красный кружочек. При нажатии на кнопку процесс останавливается и опять загоряется зелёная стрелочка и т.п. При этом чтобы работало БЕЗ обращения к внешним файлам
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.11.2009, 16:37
Ответы с готовыми решениями:

Буксировка и изменение размеров компонентов во время работы программы
Мне надо создать программу во время которой можно будет перетаскивать компоненты и менять их размеры например: Есть программа на ней...

Изменение размеров компонентов во время выполнения программы
Недавно мне понадобилось написать код, чтобы во время выполнения программы можно было изменять размеры кнопки, как в настоящей среде...

TTimer время работы программы
Нужно сделать так, чтобы таймер показывал время работы программы(после нажатия BitBtn1) ...

21
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
02.11.2009, 17:27
используй if и else if и проверяй условия и подгружай необходимые файлы с изображениями
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
02.11.2009, 17:38  [ТС]
Я же написал "При этом чтобы работало БЕЗ обращения к внешним файлам"
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
02.11.2009, 17:48
А ты на кнопке не пробовал сам нарисовать?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
02.11.2009, 18:19  [ТС]
Цитата Сообщение от Sasha Посмотреть сообщение
А ты на кнопке не пробовал сам нарисовать?
Не сочти за хамство, но в таких случаях вспоминаю анекдот: "мужик, кончай умничать, показывай в какую сторону плыть". Что делать? Куда нажимать?
0
17 / 14 / 6
Регистрация: 21.04.2009
Сообщений: 65
02.11.2009, 19:28
Цитата Сообщение от Evg Посмотреть сообщение
Не сочти за хамство, но в таких случаях вспоминаю анекдот: "мужик, кончай умничать, показывай в какую сторону плыть". Что делать? Куда нажимать?
Есть такая книга "Изучить С++ Builder за 21 день", там на 276 странице описывается это для BitBtn, книга у меня есть в де жа вю формате. Если надо, могу бросить.
Свойство glyph у них работают аналогично с SpeedButton. Правда изначально надо в глиф файл забросить, но во время работы вроде ничего не нужно.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
02.11.2009, 19:41  [ТС]
Это не то. Там просто объясняется, как натянуть картинку на кнопку. Случаи с двумя картинками - это картинка для нажатой и отжатой кнопки. Мне нужно другое. Как поменять весь набор картинок
0
17 / 14 / 6
Регистрация: 21.04.2009
Сообщений: 65
02.11.2009, 19:44
Цитата Сообщение от Evg Посмотреть сообщение
Это не то. Там просто объясняется, как натянуть картинку на кнопку. Случаи с двумя картинками - это картинка для нажатой и отжатой кнопки. Мне нужно другое. Как поменять весь набор картинок
А если две кнопки одна над другой с разными наборами картинок? При этом одна видимая, другая невидимая? Нажал на кнопку у неё visible=false, а у другой - true? Не сколько через ж.... вариант, но...
зато быстро можно сделать...
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
02.11.2009, 19:54  [ТС]
Да не... через ж...у я и сам могу вариантов напридумать. Меня интересует "нормально" решение.
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
02.11.2009, 20:23
Как один из вариантов:
Есть ImageList куда вставлены картинки. А вот код на кнопке:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
if(BitBtn1->Tag==0)
        {
        BitBtn1->Glyph->Width=0;
        BitBtn1->Glyph->Width=ImageList1->Width;
        BitBtn1->Glyph->Height=ImageList1->Height;
        ImageList1->Draw(BitBtn1->Glyph->Canvas,0,0,1);
        BitBtn1->Tag=1;
        }else
        {
        BitBtn1->Glyph->Width=0;
        BitBtn1->Glyph->Width=ImageList1->Width;
        BitBtn1->Glyph->Height=ImageList1->Height;
        ImageList1->Draw(BitBtn1->Glyph->Canvas,0,0,0);
        BitBtn1->Tag=0;
        }
}
Странным образом Глиф не обновляется, пока не изменится какой-нибудь параметр Битмапа(например размер).

Добавлено через 26 минут
Или лучше так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
if(BitBtn1->Tag==0)
        {
        BitBtn1->Glyph->Width=0;
        ImageList1->GetBitmap(0,BitBtn1->Glyph);
        BitBtn1->Tag=1;
        }else
        {
        BitBtn1->Glyph->Width=0;
        ImageList1->GetBitmap(1,BitBtn1->Glyph);
        BitBtn1->Tag=0;
        }
}
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
02.11.2009, 20:49  [ТС]
Что такое ImageList и откуда он берётся?
И при таком подходе надо ещё и ручками отрисовывать картинки для нажатой и отжатой кнопки?
Да и поскольку здесь присуствует Draw, то это по большому счёту тоже черезж...ый вариант

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

Добавлено через 2 минуты
Сейчас у меня сделан вариант с левыми невидимыми кнопками, на которых натянуты глифы, а потом я их попросту оттуда копирую (такой же вариант предлагал mustss). По количеству черезж...сти и дополнительных телодвижений этот вариант выглядит проще по сравнению с ImageList
0
17 / 14 / 6
Регистрация: 21.04.2009
Сообщений: 65
02.11.2009, 21:17
Цитата Сообщение от Evg Посмотреть сообщение
Что такое ImageList и откуда он берётся?
И при таком подходе надо ещё и ручками отрисовывать картинки для нажатой и отжатой кнопки?
Да и поскольку здесь присуствует Draw, то это по большому счёту тоже черезж...ый вариант
ImageList расположен в библиотеке "Win32" (у меня BDS2006), а чем плох второй вариант кода, предложенный otaka?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
02.11.2009, 21:20  [ТС]
Цитата Сообщение от mustss Посмотреть сообщение
ImageList расположен в библиотеке "Win32" (у меня BDS2006), а чем плох второй вариант кода, предложенный otaka?
Например, тем, что я мало что понял. При этом, насколько я понимаю, помимо приведённого кода нужно что-то делать ручками с этим ImageList
0
17 / 14 / 6
Регистрация: 21.04.2009
Сообщений: 65
02.11.2009, 21:29
Когда в ImageList кладёшь битмап, с несколькими картинками то он предлагает его разбить на несколько рисунков (по числу картинок в исходном файле). Если сделать это, он внедрит в проект эти картинки. Далее методами этого самого ImageList можно их при необходимости выдергивать и отрисовывать по необходимости. Прочитал это пару дней назад в Архангельском (опять же в де жа вю, могу сбросить даже с указанием страниц)
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
02.11.2009, 21:35  [ТС]
Грубо говоря, вот черезж...ый вариант с двумя дополнительными кнопками. Из "ненужных" телодвижений - только создание двух дополнительных невидимых кнопок и натягивание на них глифа. Файлы с картинками при работе программы не нужны

Если не сложно - напиши конкретную программу для случая с ImageList, потому что в таких общих словах типа "Когда в ImageList кладёшь битмап" я как-то не особенно понимаю
Вложения
Тип файла: rar Shaman.rar (10.3 Кб, 35 просмотров)
0
17 / 14 / 6
Регистрация: 21.04.2009
Сообщений: 65
02.11.2009, 21:52
Сейчас попытаюсь что-нибудь изобразить, сам первый раз с ним работаю.
Я так понимаю, по нажатию кнопки её цвет должен меняться с зелёного на красный?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
02.11.2009, 21:58  [ТС]
Ну... картинка должна меняться. Красный и зелёный - это у меня такие картинки. И пофигу, по нажатию или не по нажатию, просто я сделал по нажатию
0
17 / 14 / 6
Регистрация: 21.04.2009
Сообщений: 65
02.11.2009, 22:18
Цитата Сообщение от Evg Посмотреть сообщение
Грубо говоря, вот черезж...ый вариант с двумя дополнительными кнопками. Из "ненужных" телодвижений - только создание двух дополнительных невидимых кнопок и натягивание на них глифа. Файлы с картинками при работе программы не нужны

Если не сложно - напиши конкретную программу для случая с ImageList, потому что в таких общих словах типа "Когда в ImageList кладёшь битмап" я как-то не особенно понимаю
Вот то что у меня получилось.
Вложения
Тип файла: rar imagelist.rar (168.0 Кб, 45 просмотров)
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
02.11.2009, 22:26  [ТС]
Unable to find package import Rave65VCL.bpi

Добавлено через 1 минуту
Хотя запустилось. И работает. ТОлько пока не втыкаю как

Добавлено через 1 минуту
Аха... кажись понял. В ImageList картинки загоняются посредством дизайнера форм?
0
17 / 14 / 6
Регистрация: 21.04.2009
Сообщений: 65
02.11.2009, 22:28
по моему у меня более поздняя версия билдера.
что именно и где не понятно?

Добавлено через 12 секунд
да

Добавлено через 42 секунды
сделай на нем двойной щелчок
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.11.2009, 22:28
Помогаю со студенческими работами здесь

Запись кода во время работы программы
Возможно ли записать код из, Memo, например, на другую форму? Т.е. запустить программу, написать код в окне и при нажатии на кнопку...

Фоторедактор: загрузка изображения во время работы программы
Доброго времени суток.Я пишу фоторедактор для курсовой,в котором изображение в Timage подвергается всяким фильтрам.Но изображение я...

Изменение параметров TSQLConnection во время работы программы
Я не могу понять, в чем проблема. Если ввести параметры в редакторе - все работает и подключается. А если те же самые параметры считываются...

Изменение размера Image во время работы программы
Как сделать вокруг Image такую рамку, и чтобы потянув за неё можно было легко изменять размер Image?

SQLConnection - изменение HostName во время работы программы
Здравствуйте! Как изменить в компоненте SQLConnection значение HostName во время работы программы (т.е. не при её разработке)?


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru