Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1151518964
Rial
2006-06-28 22:22
2006.07.30
Пересечение треугольников.


6-1142829213
Roman81
2006-03-20 07:33
2006.07.30
Кодировка тела почтового сообщения


1-1150488885
guard_gg
2006-06-17 00:14
2006.07.30
Как реализовать динамический буффер в BlockRead?


6-1142504280
Dust
2006-03-16 13:18
2006.07.30
Help, электронная почта, копоненты Indi


15-1151593052
cyborg
2006-06-29 18:57
2006.07.30
Сайтом delphigfx кто нибудь может заняться?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский