Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Создание Компонена на основе TCustomControl


NewMan ©   (2006-07-10 13:52:00) 

Срочно надо написать компоненту Типа TStringGrid на основе TCustomControl... В C++ Builder...

А я не то, что на основе TCustomControl, я вообще компонентов не писал... А тут ещё C++ Builder...

В общем, дела мои обстоят не лучшим образом... Но пути обратно нет. Очень прошу оказать информативную помощь в поиске соотвествующего мануала, форумы хорошие по Билдеру, как с TCustomControl работать, как всё это тестить.

Заранее спасибо!


NewMan   (2006-07-11 11:52:00) [1]

Может всё-таки кто-нить знает?


NewMan   (2006-07-11 11:51:00) [2]

нее, не помогает


icWasya   (2006-07-10 17:07:00) [3]

а может так
virtualvoid __fastcall Paint();


NewMan   (2006-07-10 15:56:00) [4]

Решил ещё потестить:
в Paint() добавил:

SetWindowText(ParentWindow, "Paint()");

Так вот при работе приложения, Caption так и не изменился

Решил "насильно" вызвать метод TInfoTable::Paint() по нажатию кнопки на форме... Нажал... И сразу получил:
Invalid Operation with message "Control has no parent window"


NewMan   (2006-07-10 15:30:00) [5]

Переопределяю метод TCustomControl->Paint():
class PACKAGE TInfoTable : public TCustomControl
{
private:
protected:
public:
       __fastcall TInfoTable(TComponent* Owner);
       void __fastcall Paint();
__published:
};


В *.cpp пишу:
void __fastcall TInfoTable::Paint()
{
 Canvas->Brush->Color = clBlack;
 Canvas->Pen->Color = clRed;

 Canvas->Ellipse(0, 0, 100, 100);
}


ТЕСТИРОВАНИЕ:

Сам компонент у меня на палитру уже установлен.

1) просто перетаскиваю компонент на форму, запускаю приложение. Ничего не рисуется...
Я заметил: внесённые в *.cpp компонента изменения, никак не влияют на результат. Банально: ShowMessage() в конструкторе

2) поэтому я удалил компонент, заинклюдил его *.cpp, завёл глобальную переменную (мой компонент). Инициализирую по TFrom::OnCreate, удаляю по OnDestroy...

Но всё равно ничего не рисуется


Сергей М.   (2006-07-10 15:07:00) [6]

А зачем ?

TCustomControl имеет свое собственное окно, очевидно на нем и рисовать следует ..

В справке к св-ву TCustomControl.Canvas даже пример есть ... и как раз на ВСВ ..


NewMan   (2006-07-10 15:03:00) [7]

Как что-либо нарисовать на форме-предке?


Сергей М.   (2006-07-10 14:52:00) [8]


> Ну так помощь предвидится?


Ну так форум-то по делфи, а не по ВСВ ...


> в ответ - отказ


Ну хоть чем-то он мотивирован был ?


icWasya   (2006-07-10 14:51:00) [9]

в поставке билдера есть папка  Examples\Controls

как пример

//MyComponent.h
#ifndef MyComponentH
#define MyComponentH
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Controls.hpp>
#include <Classes.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------

class PACKAGE TMyControl : public TCustomControl
{
private:
 int FMyField;
 void __fastcall SetMyField(int newValue);

public:
 __fastcall TMyContro(TComponent* Owner);
 virtual __fastcall ~TMyContro();

__published:
  __property int MyProperty = {read=FMyField, write=SetMyField};
};
#endif

//MyComponent.cpp
#include "MyComponent.h"

__fastcall TMyComponent::TMyComponent(TComponent* Owner)
: TCustomControl(Owner)
{
 // ваш код
}
__fastcall TMyComponent::~TMyComponent()
{

}

void __fastcall TMyComponent::SetMyField(int newValue)
{
 FMyField = newValue;
}

//---------------------------------------------------------------------------


NewMan   (2006-07-10 14:28:00) [10]


>Ты пишешь свой компонент в Делфи - и он легко встраивается в любой ВСВ-проект ...

Прекрасно известно

Уговаривал, в ответ - отказ. Ну так помощь предвидится?


Сергей М.   (2006-07-10 14:12:00) [11]


> Вся контора из-за меня одного перестраиваться не будет


А ей и не надо перестраиваться ...

Ты пишешь свой компонент в Делфи - и он легко встраивается в любой ВСВ-проект ...


Сергей М.   (2006-07-10 14:08:00) [12]

Какой препод ?) Лето на дворе, каникулы ...


NewMan   (2006-07-10 14:08:00) [13]


> Сергей М. ©   (10.07.06 13:56) [1]

Руководство

Я выполняю только часть проекта. Вся контора работает под Билдер. В перспективе мой компонент будет изменяться мной или др. сотрудниками компании. Вся контора из-за меня одного перестраиваться не будет... Жаль...


StriderMan   (2006-07-10 14:07:00) [14]


> Кто ж тебя заставляет писать компонент именно в ВСВ

злой препод наверное....


Сергей М.   (2006-07-10 13:56:00) [15]

Кто ж тебя заставляет писать компонент именно в ВСВ ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо