С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.64/25: Рейтинг темы: голосов - 25, средняя оценка - 4.64
Evg
Эксперт CАвтор FAQ
19360 / 7209 / 538
Регистрация: 30.03.2009
Сообщений: 20,160
Записей в блоге: 30
1

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

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

В качестве кнопочки с рисунком я использую TSpeedButton. Через дизайнер форм вроде бы как разобрался как прицеплять к кнопке картинку. Теперь вопрос, а как это делать в процессе работы программы? Условно говоря есть копка старт-стоп. Пока ничего в программе не запущено, на кнопке горит зелёная стрелочка. Как мы её нажимаем, процесс пошёл, надо чтобы на кнопке отображался красный кружочек. При нажатии на кнопку процесс останавливается и опять загоряется зелёная стрелочка и т.п. При этом чтобы работало БЕЗ обращения к внешним файлам
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2009, 16:37
Ответы с готовыми решениями:

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

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

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

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

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

21
Sasha
4924 / 2388 / 530
Регистрация: 05.06.2008
Сообщений: 7,482
Записей в блоге: 3
02.11.2009, 17:27 2
используй if и else if и проверяй условия и подгружай необходимые файлы с изображениями
0
Evg
Эксперт CАвтор FAQ
19360 / 7209 / 538
Регистрация: 30.03.2009
Сообщений: 20,160
Записей в блоге: 30
02.11.2009, 17:38  [ТС] 3
Я же написал "При этом чтобы работало БЕЗ обращения к внешним файлам"
0
Sasha
4924 / 2388 / 530
Регистрация: 05.06.2008
Сообщений: 7,482
Записей в блоге: 3
02.11.2009, 17:48 4
А ты на кнопке не пробовал сам нарисовать?
0
Evg
Эксперт CАвтор FAQ
19360 / 7209 / 538
Регистрация: 30.03.2009
Сообщений: 20,160
Записей в блоге: 30
02.11.2009, 18:19  [ТС] 5
Цитата Сообщение от Sasha Посмотреть сообщение
А ты на кнопке не пробовал сам нарисовать?
Не сочти за хамство, но в таких случаях вспоминаю анекдот: "мужик, кончай умничать, показывай в какую сторону плыть". Что делать? Куда нажимать?
0
mustss
15 / 12 / 6
Регистрация: 21.04.2009
Сообщений: 61
Завершенные тесты: 3
02.11.2009, 19:28 6
Цитата Сообщение от Evg Посмотреть сообщение
Не сочти за хамство, но в таких случаях вспоминаю анекдот: "мужик, кончай умничать, показывай в какую сторону плыть". Что делать? Куда нажимать?
Есть такая книга "Изучить С++ Builder за 21 день", там на 276 странице описывается это для BitBtn, книга у меня есть в де жа вю формате. Если надо, могу бросить.
Свойство glyph у них работают аналогично с SpeedButton. Правда изначально надо в глиф файл забросить, но во время работы вроде ничего не нужно.
0
Evg
Эксперт CАвтор FAQ
19360 / 7209 / 538
Регистрация: 30.03.2009
Сообщений: 20,160
Записей в блоге: 30
02.11.2009, 19:41  [ТС] 7
Это не то. Там просто объясняется, как натянуть картинку на кнопку. Случаи с двумя картинками - это картинка для нажатой и отжатой кнопки. Мне нужно другое. Как поменять весь набор картинок
0
mustss
15 / 12 / 6
Регистрация: 21.04.2009
Сообщений: 61
Завершенные тесты: 3
02.11.2009, 19:44 8
Цитата Сообщение от Evg Посмотреть сообщение
Это не то. Там просто объясняется, как натянуть картинку на кнопку. Случаи с двумя картинками - это картинка для нажатой и отжатой кнопки. Мне нужно другое. Как поменять весь набор картинок
А если две кнопки одна над другой с разными наборами картинок? При этом одна видимая, другая невидимая? Нажал на кнопку у неё visible=false, а у другой - true? Не сколько через ж.... вариант, но...
зато быстро можно сделать...
0
Evg
Эксперт CАвтор FAQ
19360 / 7209 / 538
Регистрация: 30.03.2009
Сообщений: 20,160
Записей в блоге: 30
02.11.2009, 19:54  [ТС] 9
Да не... через ж...у я и сам могу вариантов напридумать. Меня интересует "нормально" решение.
0
Otaka
1829 / 687 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
02.11.2009, 20:23 10
Как один из вариантов:
Есть 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
19360 / 7209 / 538
Регистрация: 30.03.2009
Сообщений: 20,160
Записей в блоге: 30
02.11.2009, 20:49  [ТС] 11
Что такое ImageList и откуда он берётся?
И при таком подходе надо ещё и ручками отрисовывать картинки для нажатой и отжатой кнопки?
Да и поскольку здесь присуствует Draw, то это по большому счёту тоже черезж...ый вариант

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

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

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

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

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

Добавлено через 1 минуту
Аха... кажись понял. В ImageList картинки загоняются посредством дизайнера форм?
0
mustss
15 / 12 / 6
Регистрация: 21.04.2009
Сообщений: 61
Завершенные тесты: 3
02.11.2009, 22:28 20
по моему у меня более поздняя версия билдера.
что именно и где не понятно?

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

Добавлено через 42 секунды
сделай на нем двойной щелчок
1
02.11.2009, 22:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2009, 22:28

Время и дата. Время жизни программы
Сделал вывод даты в Edit, но столкнулся с проблемой, время не "идёт". ...

Время работы потока
Есть идеи как подсчитать время работы потока (имеется в виду нити)? желательно...

Ограничить время работы функции
Здравствуйте, подскажите, как можно ограничить время работы функции? Т.е. если...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru