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

Создание своего компонента, первые шаги

28.02.2021, 21:16. Показов 2061. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пробую создать свой невизуальный компонент, наследник от TComponent. Задачи компонент решает очень простые, посредством метода, в котором передается два параметра, он их складывает и вызывает событие (ну типа сложение выполнено). Есть у компонента открытый метод
C++
1
void __fastcall Sum(int A, int B)
и свойство
C++
1
 __published:   __property TMyEvent OnAfterSum
, где пользовательское событие определено как
C++
1
typedef void __fastcall (__closure *TMyEvent)(System::TObject *Sender, int Result).
Компонент компилируется, инсталлируется, создаю тестовую форму и кидаю на на неё свой компонент. Всё хорошо, у компонента видно свойство OnAfterSum. Но вот когда я два раза щелкаю по этому событию в редакторе кода получаю такое:
C++
1
2
3
4
void __fastcall TForm1::MyComp1AfterSum(TObject *param_0, int param_1)
{
   ;
}
Вместо Sender - param_0, вместо Result - param_1.
Что нужно сделать чтобы было как я задумал?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.02.2021, 21:16
Ответы с готовыми решениями:

Первые шаги...
Скачал себе Borland C++ builder В учебники первая задача создать файл first.cpp Записать в нем следующее: #include...

Mortal Kombat - первые шаги
Здравствуйте. вот решил попробовать написать игру типа Mortal Kombat и заодно выяснить, можно ли с помощью стандартной библиотеки...

C++ первые шаги (абсолютно первые)
Привет, пользователи CyberForum. Я относительно давний юзер этого форума, и вот, наконец-то решил воплощать мечту в реальность, а именно...

3
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33402 / 21512 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 12
01.03.2021, 00:39
Не воспроизводится, выдает нормальные имена:
Миниатюры
Создание своего компонента, первые шаги  
0
11 / 10 / 1
Регистрация: 16.09.2016
Сообщений: 87
01.03.2021, 08:49  [ТС]
Попробовал на рабочем компе, тоже самое. Вот текст:
MyComp.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#ifndef MyCompH
#define MyCompH
//---------------------------------------------------------------------------
#include <System.SysUtils.hpp>
#include <System.Classes.hpp>
//---------------------------------------------------------------------------
typedef void __fastcall (__closure *TOnAfterSum)(System::TObject *Sender, int Result);
 
class PACKAGE TMyComp : public TComponent
{
private:
   TOnAfterSum FOnAfterSum;
protected:
public:
   __fastcall TMyComp(TComponent* Owner);
   void __fastcall Sum(int A, int B);
__published:
   __property TOnAfterSum OnAfterSum = {read = FOnAfterSum, write = FOnAfterSum};
};
//---------------------------------------------------------------------------
#endif
MyComp.cpp
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
#include <vcl.h>
#pragma hdrstop
#include "MyComp.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
// ValidCtrCheck is used to assure that the components created do not have
// any pure virtual functions.
//
static inline void ValidCtrCheck(TMyComp *)
{
   new TMyComp(NULL);
}
//---------------------------------------------------------------------------
__fastcall TMyComp::TMyComp(TComponent* Owner)
   : TComponent(Owner)
{
}
//---------------------------------------------------------------------------
namespace Mycomp
{
   void __fastcall PACKAGE Register()
   {
       TComponentClass classes[1] = {__classid(TMyComp)};
       RegisterComponents(L"Samples", classes, 0);
   }
}
//---------------------------------------------------------------------------
//
void __fastcall TMyComp::Sum(int A, int B)
{
   if (OnAfterSum) {
      int Result = A + B;
      OnAfterSum(this, Result);
   }
}
Может я делаю что-то не так? Пишу в Embarcadero® C++Builder 10.3.

Добавлено через 2 минуты
А вот что получается:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
   : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MyComp1AfterSum(TObject *param_0, int param_1)
{
 
}
//---------------------------------------------------------------------------
0
11 / 10 / 1
Регистрация: 16.09.2016
Сообщений: 87
01.03.2021, 21:34  [ТС]
Нашёл, если кому интересно.
Проект компонента компилировался при Use 'classic' Borland compiler = false. После того как сменил на true и заново скомпилировал всё стало как надо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.03.2021, 21:34
Помогаю со студенческими работами здесь

Первые шаги.
Здравствуйте. Извините, может, за тупые вопросы. Но с языком С впервые сталкиваюсь. Использую среду прогр-я C-Free Standard 4.0. Открыл...

Первые шаги в WinAPI
int WINAPI winMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR IpszCmdLine,int nCmdShow) Зачем писать весь этот список...

Первые шаги в освоении С++
Добрый день! Решил начать изучение С++. Для этого, как полагается, скачал соответствующую литературу и софт. После нескольких попыток...

ООП, первые шаги
Доброго времени суток! Собственно, начал изучать С++. Решил наваять небольшую програмку, которая выводит что-то типа текстового меню. ...

Первые шаги в программированнии!
Добрые товарищи помогите чайнику в программировании с одной проблемой. Я решил изучить язык програмирования Си++, скачал полную коллекцию...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru