Форум: "Начинающим";
Текущий архив: 2006.07.30;
Скачать: [xml.tar.bz2];
Вниз
Создание Компонена на основе 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.012 c