Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
 Аватар для Igor-84
28 / 27 / 11
Регистрация: 04.03.2010
Сообщений: 199

Реализация события без использования VCL

24.08.2014, 10:37. Показов 1209. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! В C++ Builder, используя средства VCL, я реализовывал события так:
- в h-файле перед объявлением класса пишем:
C++
1
typedef void __fastcall (__closure *TProgrEvent)(int);
- в объявлении класса в разделе public пишем:
C++
1
__property TProgrEvent OnProgr = {read=FOnProgr, write=FOnProgr};
- в объявлении класса в разделе private пишем:
C++
1
TProgrEvent FOnProgr;
- в основном модуле при создании экземпляра класса пишем:
C++
1
2
MyClass *my_class = new MyClass();
my_class->OnProgr = onProgress;
где:
C++
1
2
3
4
void __fastcall Main::onProgress(int cnt)
{
ShowMessage(cnt);
}
- а непосредственно событие генерируется так:
C++
1
if (FOnProgr){FOnProgr(total_cnt);}
В общем-то, ничего сложного и всё понятно - это работает.
Вопрос: как всё это реализовать без использования VCL на С++?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.08.2014, 10:37
Ответы с готовыми решениями:

Собственные события для VCL
Всем привет! Пожалуйста, подскажите как можно полностью определить новое, пользовательское событие для какого-нибудь компонента. Например,...

События у унаследованного VCL класса
Здравствуйте. Есть проблемка: Есть класс, унаследованный от TImage. Нужно чтобы, при возникновении какого-либо события, например,...

Реализация вычисления факториала без использования функции
Как реализовать факториал без функций??? Например через циклы( если конечно возможно ). Помогите пожалуйста, весь мозг сломал:)

8
 Аватар для Alexandr_1982
191 / 90 / 33
Регистрация: 04.11.2013
Сообщений: 473
Записей в блоге: 4
24.08.2014, 12:17
Вам нужно самому написать обработчик сообщений клиент и сервер. Передача сообщений может осуществляться с использованием сокетов. Приложение многопоточное. Класс "сообщение". Сервер управляет очередью сообщений и раздает сообщения клиентам. Сообщение помещается в очередь, проект может быть высоко нагруженным в случае большого количества сообщений. Очередь сообщений можно реализовать как двусвязный список.
0
 Аватар для Igor-84
28 / 27 / 11
Регистрация: 04.03.2010
Сообщений: 199
24.08.2014, 12:31  [ТС]
Alexandr_1982, мне нужно не сообщения обрабатывать, а события. Поэтому здесь нужно что-то другое.
0
 Аватар для Alexandr_1982
191 / 90 / 33
Регистрация: 04.11.2013
Сообщений: 473
Записей в блоге: 4
24.08.2014, 12:43
Событие это и есть сообщение. Если случилось событие, то генерируется сообщение, что случилось событие и помещается в очередь сообщений о событии. Очередь может быть приоритетной и не приоритетной. Постановка сообщений о событиях может быть по приоритетам.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
24.08.2014, 13:38
Цитата Сообщение от Igor-84 Посмотреть сообщение
Вопрос: как всё это реализовать без использования VCL на С++?
В С++ нет не свойств не событий, это примочки, так что если реализовывать подобное будет выглядеть через методы и колбеки.

Запрещение переинициализации public-поля как члена класса
0
 Аватар для Igor-84
28 / 27 / 11
Регистрация: 04.03.2010
Сообщений: 199
24.08.2014, 14:47  [ТС]
Alexandr_1982, Avazart, покажите, пожалуйста, пример реализации моей задачи.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
24.08.2014, 15:40
Я привел ссылку на пример.

Добавлено через 37 минут
Цитата Сообщение от Igor-84 Посмотреть сообщение
пример реализации моей задачи.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
class MyClass
{
     public:
         MyClass():progress_function_(NULL),value_(0)
         {
 
         }
 
                 // Тип указателя на метод обработчик
         typedef void (MyClass::*Progress_function) (int& value);
 
                 // мето вызываюший "прогресс"
         void progress()
         {
             if(progress_function_)
                 (this->*progress_function_)(value_);
         }
 
                // Назначение обработчика
         void setOnProgress(Progress_function  progress_function)
         {
             progress_function_= progress_function;
         }
 
                 // два обработчика
         void myClassProgressNext(int& value);
         void myClassProgressBack(int& value);
 
     private:
         Progress_function  progress_function_; // Указатель на метод обработчик
         int value_;
};
 
// Обработчики
void MyClass::myClassProgressNext(int& value)
{
    value++;
    std::cout<< value << std::endl;
}
 
void MyClass::myClassProgressBack(int& value)
{
    value--;
    std::cout<< value << std::endl;
}
 
int main()
{
         MyClass obj;
 
         std::cout<<"Next"<< std::endl;
         obj.setOnProgress(MyClass::myClassProgressNext);
         obj.progress();
         obj.progress();
         obj.progress();
 
         std::cout<<"Back"<< std::endl;
         obj.setOnProgress(MyClass::myClassProgressBack);
 
         obj.progress();
         obj.progress();
 
        getchar();
        return 0;
}
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
24.08.2014, 18:04
Цитата Сообщение от Igor-84 Посмотреть сообщение
покажите, пожалуйста, пример реализации моей задачи.
https://ru.wikipedia.org/wiki/... F)#C.2B.2B
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
24.08.2014, 19:47
Цитата Сообщение от Igor-84 Посмотреть сообщение
Alexandr_1982, мне нужно не сообщения обрабатывать, а события. Поэтому здесь нужно что-то другое.
Все зависит от конкретной задачи, ибо приведенные решения в полной мере не могут заменить VCL- ную примочку __closure, по крайней мере я не знаю как это реализовать в полной мере.

Т.е. через указатель на метод/ф-цию или через визитер или через функциональный объект можно реализовать настраиваемое поведения, но к примеру я не знаю как реализовать следующее:
Если мы кидаем на форму кнопку и кликаем на ней, дизайнер автоматически создает метод формы и привязывает его к событию кнопки, т.е. связывается метод одного класса с событием другого класса, собствено в этом проблема.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.08.2014, 19:47
Помогаю со студенческими работами здесь

RSA - реализация без использования System.Security.Cryptography
Задача следующая: Реализовать алгоритм RSA. Я впринципе сделал, но шифрование происходит кривовато - про дешифрования я вообще молчу....

Реализация двоичного дерева без использования готовых методов
Есть ли примеры кода, как реализовать двоичное дерево без использования готовых методов.

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

Exe-файл, выводящий на экран строчку: «Хочу зачет!!!». Реализация функции запуска (EXEC) без использования библиотечных
Задание: Создайте exe-файл, выводящий на экран одну строчку: «Хочу зачет!!!». Реализуйте программу расшифровывающую заголовок данного...

Бегущая строка без VCL
Помогите пожалуйста сделать на форме &quot;бегущую строку&quot;, не отправляйте пожалуйста в гугль, я там был, нашел кучу вариантов как это сделать...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Подключение 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 - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru