Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2012, 17:56   #1
NapalmRain
Пользователь
 
Регистрация: 18.05.2010
Сообщений: 53
Вопрос Создание собственного компонента. Несколько вопросов!

Приветствую.

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

Прочитал некоторое количество литературы по этому поводу, сложностей вроде никаких, но нюансы остались.

Необходима помощь.

Вот написал по аналогии с примером из интернета такого рода код.

содержание файла *.h
Код:
//---------------------------------------------------------------------------

#ifndef ClientSocket1H
#define ClientSocket1H
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Classes.hpp>
#include <ScktComp.hpp>
//---------------------------------------------------------------------------
class PACKAGE TClientSocket1 : public TClientSocket
{
private:

AnsiString log;
AnsiString pass;

void __fastcall LogonOn(AnsiString LogData);
void __fastcall LogonOff();
void __fastcall SendData(AnsiString Senddat);

bool __fastcall SetLog(AnsiString login);
bool __fastcall SetPass(AnsiString password) ;

protected:
public:
        __fastcall TClientSocket1(TComponent* Owner);
__published:

__property AnsiString Login = {read = log,
write = SetLog };
__property AnsiString PassWord = {read = pass,
write = SetPass }; };

};
//---------------------------------------------------------------------------
#endif
Содержимое файла *.cpp
Код:
//---------------------------------------------------------------------------

#include <basepch.h>

#pragma hdrstop

#include "ClientSocket1.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(TClientSocket1 *)
{
        new TClientSocket1(NULL);
}
//---------------------------------------------------------------------------
__fastcall TClientSocket1::TClientSocket1(TComponent* Owner)
        : TClientSocket(Owner)
{

}
//---------------------------------------------------------------------------
namespace Clientsocket1
{
        void __fastcall PACKAGE Register()
        {
                 TComponentClass classes[1] = {__classid(TClientSocket1)};
                 RegisterComponents("Internet", classes, 0);
        }

        bool __fastcall TNkEdit::SetLog(AnsiString login)
        {
                if (login != '') {
                log = login;
                return true;
                } else {
                return false;
                }
        }

        bool __fastcall TNkEdit::SetPass(AnsiString password)
        {
                if (password != '') {
                pass = password;
                return true;
                } else {
                return false;
                }
        }

        void __fastcall SendData(AnsiString Senddat)
        {
                //Здесь какие-то операции с текстом
                //возможно запихивание результата в буфер и оправка буфера вместо текста, но это не принципиально.
                //Socket->SendBuff(blabla);
                Socket->SendText("blabla");
        }

}
//-------------------------------------------------------------------------
Этот код, естественно не работает.

Но, подскажите пожалуйста, на сколько я далёк от истины? Где допустил ошибки?

И каким образом мне прописать собственные функции так, что бы они появились в результате во всплывающем списке нового компонента и как в этих функциях мне обращаться к свойству изначального класса Socket?

Так как в моём варианте билдер мне на эту строчку (Socket->Send...) ругается.

Заранее благодарю!
NapalmRain вне форума Ответить с цитированием
Старый 30.03.2012, 19:32   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
что бы они появились в результате во всплывающем списке нового компонента
Описываешь их в разделе Publiс:
Код:
__publiс:
 __property AnsiString Login = {read = log,write = SetLog };
 __property AnsiString PassWord = {read = pass,write = SetPass }; };

void sendMe();
int ReceiveЧётоТам();
Тогда они появятся в списке достуных методов.
Цитата:
как в этих функциях мне обращаться к свойству изначального класса Socket?
Не помню точно как в Бильдере, но предположу по аналогии с Делфи inherit->функция

P.S. в Сях кажись для такого есть ключевое слово base, которое указывает на предка
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.04.2012, 12:35   #3
NapalmRain
Пользователь
 
Регистрация: 18.05.2010
Сообщений: 53
По умолчанию

Цитата:
ReceiveЧётоТам();
Повеселила функция)

В любом случае спасибо, теперь хоть знаю, в какую сторону копать.
NapalmRain вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Посоветуйте хороший мануал по созданию собственного компонента shumsheec Обсуждение статей 3 29.08.2011 14:40
Создание тестера с бд Акссес(несколько вопросов) Dennis777 БД в Delphi 3 24.08.2011 00:28
создание собственного компонента МаксимШ Компоненты Delphi 5 08.06.2010 14:11
Как в файле собственного типа (с возможностью шифрования) сохранять несколько других файлов? Кронос Помощь студентам 1 20.01.2010 21:27
Создание собственного компонента Леха207 Помощь студентам 1 03.07.2007 12:45