С Новым годом! Форум программистов, компьютерный форум, киберфорум
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. Показов 6951. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Изучаю 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. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru