Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.58/19: Рейтинг темы: голосов - 19, средняя оценка - 4.58
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234

Зная имя нажатой кнопки SpeedButton сменить ей картинку

17.02.2012, 14:03. Показов 4019. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
использую StringGrid на котором есть несколько колонок.
сверху над StringGrid поставил SpeedButton-ы
в Events по нажатию спидбутонов создал Sortirovka и там сама програмка сортировки в зависимости на нажатую кнопку происходит соответствующая сортировка

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//==============================================================================
//                     Sortirovka
//                  программа Сортировка
//
//##############################################################################
void __fastcall TForm2::Sortirovka(TObject *Sender)
//##############################################################################
// Сортировка по номеру строки по адресу по телефону по описанию
////////////////////////////////////////////////////////////////////////////////
{
    
 
        // находим имя нажимаемой кнопки     ButtonName;
  AnsiString  ButtonName = ((TBitBtn*) Sender)->Name;
//SpeedButton1->Glyph = Image_sortirovka->Picture->Bitmap;//если нажата 1 кнопка то поставь картинку
 //ButtonName->Glyph = Image_sortirovka->Picture->Bitmap;//а такой вариант больше сэкономит место
        // удаляем из полученного имени "SpeedButton" и остается сам номер кнопки
        ButtonName.Delete(1, 11);// удаляю с 1 по 11 символ в имени "SpeedButton"
        int p = ButtonName.ToInt();
}
вот и хочу соответственно и менять картинку на нажатой кнопке.
можно для каждой кнопки сделать

C++
1
2
3
4
5
6
//##############################################################################
void __fastcall TForm2::SpeedButton0(TObject *Sender)
//##############################################################################
{
SpeedButton0->Glyph = Image_sortirovka->Picture->Bitmap;//
}
и т.д
но зачем если уже есть
C++
1
void __fastcall TForm2::Sortirovka(TObject *Sender)
как зная имя нажатой кнопки сделать действие (сменить картинку)?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.02.2012, 14:03
Ответы с готовыми решениями:

Как картинку в SpeedButton растянуть по размеру кнопки
Ребят, подскажите кто знает, как картинку в SpeedButton растянуть по размеру кнопки?

SpeedButton, сменить картинку при нажатии и вернуть при отжатии
Ребят, есть на форме SpeedButton и в него загружена картинка. как сделать так чтобы при событии MouseDown картинка менялась на другую, а...

получить имя нажатой кнопки
как можно программно получить имя той кнопки которое было нажата. например нажимаем button1 и в переменная 1 записывается имя кнопки...

12
117 / 74 / 6
Регистрация: 23.01.2012
Сообщений: 186
17.02.2012, 14:10
Примерно так:
C++
1
2
3
TBitBtn *tmp_button = ((TBitBtn*) Sender);
AnsiString  ButtonName = tmp_button->Name;
tmp_button->Glyph = Image_sortirovka->Picture->Bitmap;
1
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
17.02.2012, 14:16  [ТС]
_engineer_,
сейчас попробую!

выдает ошибку
Миниатюры
Зная имя нажатой кнопки SpeedButton сменить ей картинку  
0
117 / 74 / 6
Регистрация: 23.01.2012
Сообщений: 186
17.02.2012, 14:28
>>void __fastcall TForm2::Sortirovka(TObject *Sender)
Это обработчик от какого компонента?
А лучше целиком проект приложить
0
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
18.02.2012, 12:45  [ТС]
не работает вот это
C++
1
tmp_button->Glyph = Image_sortirovka->Picture->Bitmap;
весь проэкт очень большой

Добавлено через 2 минуты
бегу на работу.
позже соеденюсь.

Добавлено через 22 часа 6 минут
не получил дельного совета - оставил как есть.
C++
1
2
3
4
if (p==0){SpeedButton0->Glyph = Image_sortirovka->Picture->Bitmap;}
if (p==1){SpeedButton1->Glyph = Image_sortirovka->Picture->Bitmap;}
if (p==2){SpeedButton2->Glyph = Image_sortirovka->Picture->Bitmap;}
if (p==3){SpeedButton3->Glyph = Image_sortirovka->Picture->Bitmap;}
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
18.02.2012, 13:29
C++
1
2
3
TBitBtn *tmp_button = ((TBitBtn*) Sender);
AnsiString  ButtonName = tmp_button->Name;
tmp_button->Glyph = Image_sortirovka->Picture->Bitmap;
У вас SpeedButton, а указатели на BitBtn, вот и все.

Лучше всего так - обработчик должен сам узнавать, с кем он работает:
C++
1
2
3
4
5
6
7
8
9
10
// ##############################################################################
void __fastcall TForm2::Sortirovka( TObject *Sender )
// ##############################################################################
// Сортировка по номеру строки по адресу по телефону по описанию
////////////////////////////////////////////////////////////////////////////////
{
    if ( Sender->ClassNameIs( "TSpeedButton" ) ) {
        dynamic_cast <TSpeedButton *> ( Sender )->Glyph = Image_sortirovka->Picture->Bitmap;
    }
}
1
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
18.02.2012, 20:09  [ТС]
BRcr,
спасибо! прямо в точку!
все прекрасно работает но есть другое "но"
теперь нажав на кнопку появляется картинка на кнопке (это гуд) а потом когда нажмешь на другую кнопку картинка должна исчезнуть с предыдущей и появиться на новой нажатой кнопке.
а получается что картинка появляется и остается и на следующей тоже остается т.е. она размножается.
мне нужна только одна картинка на нажатой кнопке.
Миниатюры
Зная имя нажатой кнопки SpeedButton сменить ей картинку  
0
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
18.02.2012, 20:26  [ТС]
C++
1
2
3
4
SpeedButton0->Glyph->Empty;
SpeedButton1->Glyph->Empty;
SpeedButton2->Glyph->Empty;
SpeedButton3->Glyph->Empty;

и тоже не помогает

там bool
а как освободить кнопку от картинки?
0
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
18.02.2012, 20:54
А ты сунь туда прозрачную картинку.
Или пересоздай кнопку уже без картинки.
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
18.02.2012, 21:08
Как-то так, примерно...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// ##############################################################################
void __fastcall TForm2::Sortirovka( TObject *Sender )
// ##############################################################################
// Сортировка по номеру строки по адресу по телефону по описанию
////////////////////////////////////////////////////////////////////////////////
{
        static TSpeedButton *prev = NULL;
        static TSpeedButton *curr = NULL;
 
        if ( Sender->ClassNameIs( "TSpeedButton" ) ) {
                curr = dynamic_cast <TSpeedButton *> ( Sender );
                curr->Glyph = Image_sortirovka->Picture->Bitmap;
                if (prev) {
                      prev->Glyph->Canvas->Brush->Color = prev->Color;
                      prev->Glyph->Canvas->FillRect( prev->Glyph->Canvas->ClipRect );
                }
                prev = curr;
        }
}
1
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
18.02.2012, 21:36  [ТС]
Samrisbe,
я так и делал.
но это не совсем мне нравится как решение.

BRcr,
сейчас пробую но выдает ошибку
[BCC32 Error] MSMam.cpp(564): E2247 'TControl::Color' is not accessible
немного по тренируюсь мож и найду где собака зарыта

а вот без этой строки все работает!

C++
1
// prev->Glyph->Canvas->Brush->Color = prev->Color;
Миниатюры
Зная имя нажатой кнопки SpeedButton сменить ей картинку  
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
18.02.2012, 21:57
Цитата Сообщение от lifeforce Посмотреть сообщение
сейчас пробую но выдает ошибку
[BCC32 Error] MSMam.cpp(564): E2247 'TControl::Color' is not accessible
нда... ну, не помню я как со SpeedButton'a выдрать цвет, так что по аналогии написал.
0
 Аватар для lifeforce
266 / 211 / 89
Регистрация: 27.09.2010
Сообщений: 1,234
18.02.2012, 22:00  [ТС]
Всем кто принимал участие - Огромное спасибо!!!
все работает без замечаний
C++
1
2
3
4
5
6
7
8
9
10
static TSpeedButton *prev = NULL;
static TSpeedButton *curr = NULL;
if (Sender->ClassNameIs("TSpeedButton"))  {
  curr = dynamic_cast <TSpeedButton *> ( Sender );
  curr->Glyph = Image_sortirovka->Picture->Bitmap;
  if (prev) {
    prev->Glyph->Canvas->FillRect( prev->Glyph->Canvas->ClipRect );
  }
prev = curr;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.02.2012, 22:00
Помогаю со студенческими работами здесь

Как получить имя нажатой кнопки?
Есть куча кнопок типа: static List&lt;string&gt; Opredelenia = new List&lt;string&gt;(); // тут код private void button3_Click(object...

Как отобразить картинку, зная ее имя
У меня есть картинка которая находится в папке с приложение,и есть имя этой картинки в переменной &quot;pic&quot; к примеру(im1.png).Как...

Как считать имя только что нажатой кнопки?
Добрый день, форумчане! Возник довольно странный вопрос. У меня на форме есть 3 кнопки (отмечены маркером во вложении). Я...

Передача файлов на FTP не зная полного пути, но зная имя и расширение файла
Всем привет знатокам Delphi, нужен ваш совет, суть в том, что надо передать файл на фтп находящийся в учетной записе пользователя, к...

Как сменить сменить картинку в слайдшоу?
// Slideshow for the Microsoft Desktop Sidebar // Copyright 2005, 2006 Microsoft Corporation // All Rights Reserved //...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru