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

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

17.02.2012, 14:03. Показов 3911. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru