Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++ Builder

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 35, средняя оценка - 4.91
Evg
Эксперт CАвтор FAQ
18913 / 6872 / 503
Регистрация: 30.03.2009
Сообщений: 19,348
Записей в блоге: 30
#1

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

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

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

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

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

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

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

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

Время и дата. Время жизни программы - C++ Builder
Сделал вывод даты в Edit, но столкнулся с проблемой, время не "идёт". AnsiString Days = {"Понедельник", "Вторник", "Среда", ...

21
Sasha
4918 / 2383 / 249
Регистрация: 05.06.2008
Сообщений: 7,465
Записей в блоге: 3
02.11.2009, 17:27 #2
используй if и else if и проверяй условия и подгружай необходимые файлы с изображениями
0
Evg
Эксперт CАвтор FAQ
18913 / 6872 / 503
Регистрация: 30.03.2009
Сообщений: 19,348
Записей в блоге: 30
02.11.2009, 17:38  [ТС] #3
Я же написал "При этом чтобы работало БЕЗ обращения к внешним файлам"
0
Sasha
4918 / 2383 / 249
Регистрация: 05.06.2008
Сообщений: 7,465
Записей в блоге: 3
02.11.2009, 17:48 #4
А ты на кнопке не пробовал сам нарисовать?
0
Evg
Эксперт CАвтор FAQ
18913 / 6872 / 503
Регистрация: 30.03.2009
Сообщений: 19,348
Записей в блоге: 30
02.11.2009, 18:19  [ТС] #5
Цитата Сообщение от Sasha Посмотреть сообщение
А ты на кнопке не пробовал сам нарисовать?
Не сочти за хамство, но в таких случаях вспоминаю анекдот: "мужик, кончай умничать, показывай в какую сторону плыть". Что делать? Куда нажимать?
0
mustss
11 / 10 / 2
Регистрация: 21.04.2009
Сообщений: 59
Завершенные тесты: 1
02.11.2009, 19:28 #6
Цитата Сообщение от Evg Посмотреть сообщение
Не сочти за хамство, но в таких случаях вспоминаю анекдот: "мужик, кончай умничать, показывай в какую сторону плыть". Что делать? Куда нажимать?
Есть такая книга "Изучить С++ Builder за 21 день", там на 276 странице описывается это для BitBtn, книга у меня есть в де жа вю формате. Если надо, могу бросить.
Свойство glyph у них работают аналогично с SpeedButton. Правда изначально надо в глиф файл забросить, но во время работы вроде ничего не нужно.
0
Evg
Эксперт CАвтор FAQ
18913 / 6872 / 503
Регистрация: 30.03.2009
Сообщений: 19,348
Записей в блоге: 30
02.11.2009, 19:41  [ТС] #7
Это не то. Там просто объясняется, как натянуть картинку на кнопку. Случаи с двумя картинками - это картинка для нажатой и отжатой кнопки. Мне нужно другое. Как поменять весь набор картинок
0
mustss
11 / 10 / 2
Регистрация: 21.04.2009
Сообщений: 59
Завершенные тесты: 1
02.11.2009, 19:44 #8
Цитата Сообщение от Evg Посмотреть сообщение
Это не то. Там просто объясняется, как натянуть картинку на кнопку. Случаи с двумя картинками - это картинка для нажатой и отжатой кнопки. Мне нужно другое. Как поменять весь набор картинок
А если две кнопки одна над другой с разными наборами картинок? При этом одна видимая, другая невидимая? Нажал на кнопку у неё visible=false, а у другой - true? Не сколько через ж.... вариант, но...
зато быстро можно сделать...
0
Evg
Эксперт CАвтор FAQ
18913 / 6872 / 503
Регистрация: 30.03.2009
Сообщений: 19,348
Записей в блоге: 30
02.11.2009, 19:54  [ТС] #9
Да не... через ж...у я и сам могу вариантов напридумать. Меня интересует "нормально" решение.
0
Otaka
1827 / 685 / 18
Регистрация: 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
18913 / 6872 / 503
Регистрация: 30.03.2009
Сообщений: 19,348
Записей в блоге: 30
02.11.2009, 20:49  [ТС] #11
Что такое ImageList и откуда он берётся?
И при таком подходе надо ещё и ручками отрисовывать картинки для нажатой и отжатой кнопки?
Да и поскольку здесь присуствует Draw, то это по большому счёту тоже черезж...ый вариант

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

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

Если не сложно - напиши конкретную программу для случая с ImageList, потому что в таких общих словах типа "Когда в ImageList кладёшь битмап" я как-то не особенно понимаю
0
Вложения
Тип файла: rar Shaman.rar (10.3 Кб, 27 просмотров)
02.11.2009, 21:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2009, 21:35
Привет! Вот еще темы с ответами:

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

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

Изменение скорости работы COM порта - C++ Builder
Приветствую всех. Занялся я, значит, созданием программы для работы с физическим устройством. Сие устройство "общается" по ГОСТ IEC...

Нельзя использовать компоненты во время работы - C++ Builder
Есть какое-то свойство формы, отвечающее за возможность перемещения формы и работы со всеми компонентами во время выполнения какой-то...


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

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

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