0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 16
1

Создание класса-наследника TImage

03.01.2014, 15:25. Показов 1604. Ответов 9
Метки нет (Все метки)

Здравствуйте. Необходимо создать класс, который будет наследовать методы TImage, например, Canvas с дальнейшей прорисовкой фигур.

Были попытки: .h
C++
1
2
3
4
5
6
7
8
9
class TDraw : public TImage
{
__published:    // IDE-managed Components
void __fastcall DrawTree();
public:     // User declarations
  __fastcall TDraw();
};
//---------------------------------------------------------------------------
extern PACKAGE TDraw *obj;

.cpp
C++
1
2
3
4
5
6
7
8
9
10
TDraw *obj;
//---------------------------------------------------------------------------
__fastcall TDraw::TDraw()
        : TImage(Owner)
{
}
void __fastcall TDraw::DrawTree()
{Picture->Bitmap=NULL;
Canvas->Ellipse(47,12,58,67) ;
}
и вызов
C++
1
2
3
void __fastcall TForm1::FormCreate(TObject *Sender)
{
     obj->DrawTree();}}

Выводится ошибка при компиляции на строки
Picture->Bitmap=NULL;
Canvas->Ellipse(47,12,58,67) ;
Подскажите плиз,что не так
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.01.2014, 15:25
Ответы с готовыми решениями:

Создание наследника класса TImage
Добрый день. С билдером знаком не так давно и его синтаксис понимаю не так хорошо, как хотел бы. ...

Создание своего класса наследника TOpenDialog
Здраствуйте!!! Ребят подскажите что творю не так : создаю класс-наследник объекта TOpenDialog без...

Создание класса на основе TImage
Просмотрел аналогичные темы, слишком сложно или не совсем то что нужно. Нужно создать поле из...

Ошибка при вызове метода класса-наследника
помогите не знаю что не правильно сделать выходит что в мемо выводит с класса родителя все...

9
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32487 / 20973 / 8115
Регистрация: 22.10.2011
Сообщений: 36,242
Записей в блоге: 7
03.01.2014, 16:47 2
Что за ошибка? У меня нет никакой ошибки, нормально компилируется.
1
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 16
03.01.2014, 16:51  [ТС] 3
"Access violation at address 400D5748 in module vcl60.bpl.Read of address 00000168"

Прорисовывает эллипс?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32487 / 20973 / 8115
Регистрация: 22.10.2011
Сообщений: 36,242
Записей в блоге: 7
03.01.2014, 16:56 4
Это не при компиляции, а при выполнении. obj надо перед использованием создать:

C++
1
2
3
4
5
void __fastcall TForm1::FormCreate(TObject *Sender)
{
     obj = new TDraw(this); // <---
     obj->DrawTree();
}
1
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 16
03.01.2014, 17:09  [ТС] 5
Спасибо.Создан.
Однако не происходит прорисовки.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32487 / 20973 / 8115
Регистрация: 22.10.2011
Сообщений: 36,242
Записей в блоге: 7
03.01.2014, 17:15 6
C++
1
2
3
4
5
6
7
class TDraw : public TImage
{
__published:    // IDE-managed Components
void __fastcall DrawTree();
public:     // User declarations
  __fastcall TDraw(TComponent* Owner);
};
+
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
__fastcall TDraw::TDraw(TComponent* Owner) : TImage(Owner)
{
    Parent = (TWinControl*)Owner;
}
 
void __fastcall TDraw::DrawTree()
{
    Picture->Bitmap = NULL;
    Canvas->Ellipse(47, 12, 58, 67);
}
 
void __fastcall TForm1::FormCreate(TObject *Sender)
{
     obj = new TDraw(this); // <---
     obj->DrawTree();
}
Будет прорисовка
1
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 16
03.01.2014, 17:43  [ТС] 7
огромное спасибо за помощь.. буду разбираться

Добавлено через 16 минут
Скажите пожалуйста, для того,чтобы получить все свойства компонента Image1, это надо прописать, например
Left->Left(this) ;

в каком месте кода?

Добавлено через 4 минуты
или не так?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32487 / 20973 / 8115
Регистрация: 22.10.2011
Сообщений: 36,242
Записей в блоге: 7
03.01.2014, 17:54 8
Чтобы получить доступ ко всем public/published свойствам предка, достаточно к ним обратиться:

C++
1
2
3
4
5
6
void __fastcall TForm1::FormCreate(TObject *Sender)
{
     obj = new TDraw(this);
     obj->Left = 100; // <--- будет изменено Left из TImage
     obj->DrawTree();
}
0
0 / 0 / 0
Регистрация: 18.04.2013
Сообщений: 16
03.01.2014, 17:58  [ТС] 9
это-то да.. но просто.. при наследовании прорисовывается квадрат, а исходный компонент имеет больший размер и прямоугольную форму...по идее эти значения свойств не наследуются
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32487 / 20973 / 8115
Регистрация: 22.10.2011
Сообщений: 36,242
Записей в блоге: 7
03.01.2014, 18:03 10
Какой "исходный компонент"? Где ему задавалась "форма"?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.01.2014, 18:03
Помогаю со студенческими работами здесь

Создание наследника TForm
Всем привет. При попытке создать наследника TForm получаю ошибку &quot;Resource MyClass not found.&quot; ...

Создание наследника от TWebBrowser
Здравствуйте, пришлось столкнуться с Builder C++. Помогите пожалуйста. Нужно создать наследника от...

Создание наследника TButton
Доброго времени суток, у меня такой вопрос: где можно найти исходный код компонента TButton? Я хочу...

Как изменить Name у созданного объекта класса TImage?
TImage *Im = new TImage(Form1); Im&gt;Parent=Form1; Im-&gt;Name=&quot;Pole1&quot;; Как изменить имя? Когда я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru