Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.30;
Скачать: CL | DM;

Вниз

Создание Компонена на основе TCustomControl   Найти похожие ветки 

 
NewMan   (2006-07-10 13:52) [0]

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

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

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

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


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

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


 
StriderMan ©   (2006-07-10 14:07) [2]


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

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


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

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


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


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

Руководство

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


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


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


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

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


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


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

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

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


 
icWasya ©   (2006-07-10 14:51) [7]

в поставке билдера есть папка  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;
}

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


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


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


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


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


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


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

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


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

А зачем ?

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

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


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

Переопределяю метод 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...

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


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

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

SetWindowText(ParentWindow, "Paint()");

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

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


 
icWasya ©   (2006-07-10 17:07) [13]

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


 
NewMan   (2006-07-11 11:51) [14]

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


 
NewMan   (2006-07-11 11:52) [15]

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



Страницы: 1 вся ветка

Текущий архив: 2006.07.30;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.039 c
2-1152549870
Belorus
2006-07-10 20:44
2006.07.30
Доступ к MS SQL


2-1152181187
Quattro
2006-07-06 14:19
2006.07.30
Ширина символа


2-1152184295
Тимофей Юрьевич
2006-07-06 15:11
2006.07.30
не стандартная форма


5-1136303968
FunkyByte
2006-01-03 18:59
2006.07.30
Создание потомка TComponent с нестандартным владельцем


15-1151664124
Некто
2006-06-30 14:42
2006.07.30
СанПиН