Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++
Войти
Регистрация
Восстановить пароль
 
Igor-84
23 / 23 / 10
Регистрация: 04.03.2010
Сообщений: 110
1

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

24.08.2014, 10:37. Просмотров 463. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.08.2014, 10:37
Ответы с готовыми решениями:

Конвертировать из BMP в PNG без VCL
Приветствую, Задача: Конвертировать из BMP в PNG без VCL (но работаю на C++...

UDP чат без использования стандартных компонентов
Здраствуйте! Срочно нужен UDP чат но БЕЗ ИСПОЛЬЗОВАНИЯ стандартных...

Как составить программу учета без использования базы данных?
Пожалуйста помогите новичку. Надо составить программу без использование базы...

Как в Visual Studio писать на чистом C++ без использования фреймворка?
Вообщем читал я Зиборова программирование под Визуал студио 2010 в среде .NET...

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

8
Alexandr_1982
180 / 81 / 30
Регистрация: 04.11.2013
Сообщений: 413
Записей в блоге: 4
24.08.2014, 12:17 2
Вам нужно самому написать обработчик сообщений клиент и сервер. Передача сообщений может осуществляться с использованием сокетов. Приложение многопоточное. Класс "сообщение". Сервер управляет очередью сообщений и раздает сообщения клиентам. Сообщение помещается в очередь, проект может быть высоко нагруженным в случае большого количества сообщений. Очередь сообщений можно реализовать как двусвязный список.
0
Igor-84
23 / 23 / 10
Регистрация: 04.03.2010
Сообщений: 110
24.08.2014, 12:31  [ТС] 3
Alexandr_1982, мне нужно не сообщения обрабатывать, а события. Поэтому здесь нужно что-то другое.
0
Alexandr_1982
180 / 81 / 30
Регистрация: 04.11.2013
Сообщений: 413
Записей в блоге: 4
24.08.2014, 12:43 4
Событие это и есть сообщение. Если случилось событие, то генерируется сообщение, что случилось событие и помещается в очередь сообщений о событии. Очередь может быть приоритетной и не приоритетной. Постановка сообщений о событиях может быть по приоритетам.
0
Avazart
Эксперт С++
7735 / 5645 / 550
Регистрация: 10.12.2010
Сообщений: 25,479
Записей в блоге: 17
24.08.2014, 13:38 5
Цитата Сообщение от Igor-84 Посмотреть сообщение
Вопрос: как всё это реализовать без использования VCL на С++?
В С++ нет не свойств не событий, это примочки, так что если реализовывать подобное будет выглядеть через методы и колбеки.

Запрещение переинициализации public-поля как члена класса
0
Igor-84
23 / 23 / 10
Регистрация: 04.03.2010
Сообщений: 110
24.08.2014, 14:47  [ТС] 6
Alexandr_1982, Avazart, покажите, пожалуйста, пример реализации моей задачи.
0
Avazart
Эксперт С++
7735 / 5645 / 550
Регистрация: 10.12.2010
Сообщений: 25,479
Записей в блоге: 17
24.08.2014, 15:40 7
Я привел ссылку на пример.

Добавлено через 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
Jupiter
Каратель
Эксперт С++
6570 / 3991 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
24.08.2014, 18:04 8
Цитата Сообщение от Igor-84 Посмотреть сообщение
покажите, пожалуйста, пример реализации моей задачи.
https://ru.wikipedia.org/wiki/%D0%9D...D1%8F)#C.2B.2B
0
Avazart
Эксперт С++
7735 / 5645 / 550
Регистрация: 10.12.2010
Сообщений: 25,479
Записей в блоге: 17
24.08.2014, 19:47 9
Цитата Сообщение от Igor-84 Посмотреть сообщение
Alexandr_1982, мне нужно не сообщения обрабатывать, а события. Поэтому здесь нужно что-то другое.
Все зависит от конкретной задачи, ибо приведенные решения в полной мере не могут заменить VCL- ную примочку __closure, по крайней мере я не знаю как это реализовать в полной мере.

Т.е. через указатель на метод/ф-цию или через визитер или через функциональный объект можно реализовать настраиваемое поведения, но к примеру я не знаю как реализовать следующее:
Если мы кидаем на форму кнопку и кликаем на ней, дизайнер автоматически создает метод формы и привязывает его к событию кнопки, т.е. связывается метод одного класса с событием другого класса, собствено в этом проблема.
1
24.08.2014, 19:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.08.2014, 19:47

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

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

Снимок с веб камеры без использования буфера
Всем привет. Такой вопрос: можно ли копировать снимок не в буфер, а например,...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru