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

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

24.08.2014, 10:37. Просмотров 449. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Реализация события без использования VCL (C++):

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

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

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

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

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

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

8
Alexandr_1982
179 / 79 / 30
Регистрация: 04.11.2013
Сообщений: 409
Записей в блоге: 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
179 / 79 / 30
Регистрация: 04.11.2013
Сообщений: 409
Записей в блоге: 4
24.08.2014, 12:43 #4
Событие это и есть сообщение. Если случилось событие, то генерируется сообщение, что случилось событие и помещается в очередь сообщений о событии. Очередь может быть приоритетной и не приоритетной. Постановка сообщений о событиях может быть по приоритетам.
0
Avazart
Эксперт С++
7685 / 5594 / 543
Регистрация: 10.12.2010
Сообщений: 25,077
Записей в блоге: 17
24.08.2014, 13:38 #5
Цитата Сообщение от Igor-84 Посмотреть сообщение
Вопрос: как всё это реализовать без использования VCL на С++?
В С++ нет не свойств не событий, это примочки, так что если реализовывать подобное будет выглядеть через методы и колбеки.

http://www.cyberforum.ru/cpp-beginners/thread1213238.html#post6346234
0
Igor-84
23 / 23 / 10
Регистрация: 04.03.2010
Сообщений: 110
24.08.2014, 14:47  [ТС] #6
Alexandr_1982, Avazart, покажите, пожалуйста, пример реализации моей задачи.
0
Avazart
Эксперт С++
7685 / 5594 / 543
Регистрация: 10.12.2010
Сообщений: 25,077
Записей в блоге: 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
Каратель
Эксперт С++
6568 / 3989 / 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
Эксперт С++
7685 / 5594 / 543
Регистрация: 10.12.2010
Сообщений: 25,077
Записей в блоге: 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
Всем привет! Пожалуйста, подскажите как можно полностью определить новое, пользовательское событие для какого-нибудь компонента. Например,...

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

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

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


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

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

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