Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 20.09.2018
Сообщений: 4

Использование одной функции для многих одинаковых элементов на форме

27.02.2019, 02:32. Показов 2025. Ответов 5

Студворк — интернет-сервис помощи студентам
У меня есть форма с большим количеством TImage, есть функция переворота изображения на 90° . Вопрос как мне использовать эту функцию для всех TImage на форме?Я понимаю что надо использовать Sender но не понимаю как использовать чтоб передавалось сразу вся функция.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.02.2019, 02:32
Ответы с готовыми решениями:

Использование переменных, объявленных в одной форме, в другой форме
Возможно ли где-нибудь или как-нибудь объявить переменные, которые можно использовать на всех формах? Или как переменные объявленные на...

Заменить знаки всех элементов массива на противоположные, если нету ни одной пары одинаковых элементов
Помогите пожалуйста с программой. Можно как в паскале так и в делфи. Дано массив X розмерностью n Нужно заменить знаки всех элементов...

Одно событие для многих элементов
Есть форма, на ней много элементов numericUpDown. Т.к изначально очистить numericUpDown нельзя, мне нужно, чтобы когда элемент становился...

5
51 / 39 / 15
Регистрация: 20.09.2018
Сообщений: 163
27.02.2019, 04:27
что конкретно надо сделать? код покажешь?

я обычно делаю так (если это конечно твой случай), занимает много ручной работы в начале, но потом очень удобно использовать в остальной программе:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//---------------------------------------------------------------------------
#define IMAGES_COUNT    5
TImage* Images[IMAGES_COUNT];
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner):TForm(Owner)
{
     Images[0]=Image1;
     Images[1]=Image2;
     Images[2]=Image3;
     Images[3]=Image4;
     Images[4]=Image5;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BRotateAllClick(TObject *Sender)
{
     int i;
 
     for(i=0;i<IMAGES_COUNT;i++)
          Rotate90(Images[i]);
}
//---------------------------------------------------------------------------
1
Модератор
 Аватар для D1973
9915 / 6452 / 2455
Регистрация: 21.01.2014
Сообщений: 27,386
Записей в блоге: 3
27.02.2019, 06:29
Лучший ответ Сообщение было отмечено Andrey007380 как решение

Решение

Цитата Сообщение от Andrey007380 Посмотреть сообщение
как мне использовать эту функцию для всех TImage на форме?
Чтобы поворачивать все одновременно? Для этого можно и без доп. массива обойтись...
C++
1
2
for(int i = 0; i < ControlCount; i++)
 if(Controls[i]->ClassNameIs("TImage")) Rotate90(dynamic_cast<TImage*>(Controls[i]));
Чтобы поворачивать каждую картинку индивидуально, например, по клику ЛКМ:
1. Опишите свою функцию так, чтобы на входе она принимала картинку, над которой будет проводиться преобразование
C++
1
2
3
4
void __fastcall Rotate90(TImage *Img)
{
...
}
2. Создайте обработчик события OnClick для одной из своих картинок, в нем вызывайте свою функцию:
C++
1
2
3
4
void __fastcall TForm1::Image1Click(TObject *Sender)
{
   Rotate90(dynamic_cast<TImage*>(Sender));
}
3. Назначьте этот обработчик для события OnClick всем необходимым картинкам (это в ObjectInspector делается)
2
0 / 0 / 0
Регистрация: 20.09.2018
Сообщений: 4
27.02.2019, 09:38  [ТС]
D1973, Да я переворачивают каждую индивидуально...Код для переворота тут уже названия Image заменил и поставил Sender
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 int xo = ((TImage*)Sender)->Width,
xn =((TImage*)Sender)-> Height;
 
TColor **mat = new TColor *[xn];
for (int i = 0; i < xo; i++) {
  mat[i]=new TColor [xo];
}
for (int i = 0; i < xn; i++) {
for (int j = 0; j < xo; j++){
  mat[i][j]=((TImage*)Sender)->Canvas->Pixels[i][j];
}
}
for (int i = 0; i < xn; i++) {
for (int j = 0; j < xo; j++) {
((TImage*)Sender)->Canvas->Pixels[i][j]=mat[j][xo-i];
}
}
Добавлено через 34 минуты
D1973, 1. Опишите свою функцию так, чтобы на входе она принимала картинку, над которой будет проводиться преобразование. Вот с этим проблемы, я не могу дойти как делать такую проверку...Ведь мне нужно при нажатии на один из TImage передавать название в функцию?

Добавлено через 12 минут
RomanSedyshev, Да код приложил выше
0
Модератор
 Аватар для D1973
9915 / 6452 / 2455
Регистрация: 21.01.2014
Сообщений: 27,386
Записей в блоге: 3
27.02.2019, 10:42
Andrey007380, что непонятного-то, у Вас все уже написано:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void __fastcall Rotate90(TImage *Img)
{
   int xo = Img->Width,
   xn = Img->Height;
   TColor **mat = new TColor *[xn];
   for (int i = 0; i < xo; i++) {
    mat[i]=new TColor [xo];
   }
   for (int i = 0; i < xn; i++) {
    for (int j = 0; j < xo; j++) {
      mat[i][j]=Img->Canvas->Pixels[i][j];
    }
   }
   for (int i = 0; i < xn; i++) {
    for (int j = 0; j < xo; j++) {
     Img->Canvas->Pixels[i][j] = mat[j][xo-i];
    }
   }
}
Вызов я уже показал и объяснил, что дополнительно надо сделать...

Не по теме:

Вот только нифига она не поворачивает...



Добавлено через 14 минут
А, нет, поворачивает... Это у меня для Image был Stretch в true выставлен - вот чушь и делало...
1
0 / 0 / 0
Регистрация: 20.09.2018
Сообщений: 4
27.02.2019, 17:52  [ТС]
D1973, Спаибо за помощь, сам затупил немного, думаю многим поможет
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.02.2019, 17:52
Помогаю со студенческими работами здесь

Скрипт для многих элементов Dialog()
Доброго времени суток всем ;) Занялся изучением JQuery. При попытке добавить диалоговое окно столкнулся с проблемой. Вот код...

Как описать много одинаковых элементов на форме?
Приветствую, товарищи :coffee: В WPF я самоучка, поэтому не всё могу найти самостоятельно. Хотел бы узнать, как эффективнее реализовать...

Использование хэштэйбл при поиске одинаковых элементов
Задание вроде бы сделал через список, но не понял следующий момент. В задании предлагается найти количество одинаковых элементов -...

Использование функции Iif в форме
Дорогие форумчане! Прошу помощи) буду очень признательна и благодарна если поможете решить мою проблему) в базе данных у меня есть таблица...

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru