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

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

17.02.2012, 14:03. Показов 4013. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор элементов справочника 1С
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru