50 / 50 / 6
Регистрация: 16.05.2012
Сообщений: 232
1

Ошибка при создании дочернего компонента

08.06.2012, 01:31. Показов 1309. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пытаюсь отрисовать прямоугольник на канве унаследованной от TImage.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// ---------------------------------------------------------------------------
 
#ifndef MyImageH
#define MyImageH
// ---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Classes.hpp>
#include <Controls.hpp>
#include <ExtCtrls.hpp>
 
// ---------------------------------------------------------------------------
class PACKAGE TMyImage : public TImage {
private:
protected:
public:
    __fastcall TMyImage(TComponent* Owner);
 
    void __fastcall virtual Paint(void) {
        Canvas->Brush->Color = 0x00FF0000;
        Canvas->FillRect(Rect(Left, Top, Width, Height));
    }
 
__published:
};
// ---------------------------------------------------------------------------
#endif
Устанавливаю package, кидаю на форму компонент и при компиляции форма просто зависает. Кто знает, что здесь не так?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.06.2012, 01:31
Ответы с готовыми решениями:

Ошибка при создании дочернего окна
я хочу создать дочернее окно ,но пишет ошибку TForm это не класс.Вот код #include &quot;unit2.h&quot; void...

Мерцание при перерисовке дочернего компонента
Есть компонент в котором создаётся скроллбар (компонент в принципе не важен). При изменение позиции...

Заполнение ComboBox при создании компонента
Первый раз пишу компонент, не могу разобраться. Основа TChart, в него вклеиваю TComboBox. Создаю...

Переопределение обработчиков событий при создании компонента
Делаю свой компонент на основе TLabeledEdit. Хочу добавить свойство, запрещающее вводить любые...

15
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.06.2012, 01:47 2
А где остальной код ?
0
50 / 50 / 6
Регистрация: 16.05.2012
Сообщений: 232
08.06.2012, 03:27  [ТС] 3
Цитата Сообщение от Avazart Посмотреть сообщение
А где остальной код ?
Содержание CPP-файла.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//---------------------------------------------------------------------------
 
#include <vcl.h>
 
#pragma hdrstop
 
#include "MyImage.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
// ValidCtrCheck is used to assure that the components created do not have
// any pure virtual functions.
//
 
static inline void ValidCtrCheck(TMyImage *)
{
    new TMyImage(NULL);
}
//---------------------------------------------------------------------------
__fastcall TMyImage::TMyImage(TComponent* Owner)
    : TImage(Owner)
{
}
//---------------------------------------------------------------------------
namespace Myimage
{
    void __fastcall PACKAGE Register()
    {
        TComponentClass classes[1] = {__classid(TMyImage)};
        RegisterComponents(L"MyPalette", classes, 0);
    }
}
//---------------------------------------------------------------------------
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.06.2012, 04:30 4
Пробуй так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//---------------------------------------------------------------------------
class PACKAGE TMyImage : public TImage
{
private:
protected:
public:
 
   void __fastcall virtual Paint(void)
     {
      TImage::Paint();
 
      Canvas->Brush->Color = clBlue;
      Canvas->FillRect(ClientRect);
     }
 
    __fastcall TMyImage(TComponent* Owner);
__published:
};
//---------------------------------------------------------------------------
А вообще может другой метод лучше подходит для этого.
0
50 / 50 / 6
Регистрация: 16.05.2012
Сообщений: 232
08.06.2012, 16:17  [ТС] 5
Цитата Сообщение от Avazart Посмотреть сообщение
Пробуй так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//---------------------------------------------------------------------------
class PACKAGE TMyImage : public TImage
{
private:
protected:
public:
 
   void __fastcall virtual Paint(void)
     {
      TImage::Paint();
 
      Canvas->Brush->Color = clBlue;
      Canvas->FillRect(ClientRect);
     }
 
    __fastcall TMyImage(TComponent* Owner);
__published:
};
//---------------------------------------------------------------------------
А вообще может другой метод лучше подходит для этого.
Увы, не помогло.
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.06.2012, 20:12 6
Главное если создавать компонент динамически- работает нормально...
Устанавливаю package, кидаю на форму компонент и при компиляции форма просто зависает. Кто знает, что здесь не так?
У меня при компиляции зависает сам Builder
Но не всегда виснит иногда - нормально работает.

Добавлено через 5 минут
Например если кинуть компонент на форму и написать например такое
C++
1
2
3
4
5
6
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
this->MyImage1->Top= 10;
}
//---------------------------------------------------------------------------
То нормально компилится. И после чего даже если убрать эту строчку, то все равно компилится без проблем.
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.06.2012, 20:14 7
После компиляции можно заметить изменения - возможно в этом проблема( т.е линковщик парится)
Миниатюры
Ошибка при создании дочернего компонента  
0
50 / 50 / 6
Регистрация: 16.05.2012
Сообщений: 232
08.06.2012, 21:15  [ТС] 8
Цитата Сообщение от Avazart Посмотреть сообщение
Главное если создавать компонент динамически- работает нормально...

У меня при компиляции зависает сам Builder
Но не всегда виснит иногда - нормально работает.

Добавлено через 5 минут
Например если кинуть компонент на форму и написать например такое
C++
1
2
3
4
5
6
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
this->MyImage1->Top= 10;
}
//---------------------------------------------------------------------------
То нормально компилится. И после чего даже если убрать эту строчку, то все равно компилится без проблем.
Да, сам Builder зависает, загружая цп.

Добавлено через 5 минут
Цитата Сообщение от Avazart Посмотреть сообщение
После компиляции можно заметить изменения - возможно в этом проблема( т.е линковщик парится)
Таких строк нет, но спасибо за идею. Ваше сообщение натолкнуло меня на кое-какие мысли и я выключил связывание с динамической библиотекой и рантайм пэкейджами. Благодарю за помощь, проблема решена.
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.06.2012, 21:54 9
выключил связывание с динамической библиотекой и рантайм пэкейджами
И что это помогло? По тому как у меня так по умолчанию стоит...
Это в самом проекте?
0
50 / 50 / 6
Регистрация: 16.05.2012
Сообщений: 232
08.06.2012, 21:59  [ТС] 10
Цитата Сообщение от Avazart Посмотреть сообщение
И что это помогло? По тому как у меня так по умолчанию стоит...
Это в самом проекте?
Да, в проекте, но заодно исправил и в проекте пэкейджа.
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.06.2012, 22:09 11
Ну в пакете вроде нельзя убрать галочку build run time....?
0
50 / 50 / 6
Регистрация: 16.05.2012
Сообщений: 232
08.06.2012, 22:26  [ТС] 12
Цитата Сообщение от Avazart Посмотреть сообщение
Ну в пакете вроде нельзя убрать галочку build run time....?
Да, я убрал Link with Dynamic RTL
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.06.2012, 22:28 13
Странно но у меня не такое не канает...
0
50 / 50 / 6
Регистрация: 16.05.2012
Сообщений: 232
09.06.2012, 02:20  [ТС] 14
Понял в чём проблема была. Parent не был назначен.
C++
1
    Parent = dynamic_cast<TWinControl*>(Owner);
0
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
09.06.2012, 02:47 15
Т.е ?
Проблема в самом коде компонента?
0
50 / 50 / 6
Регистрация: 16.05.2012
Сообщений: 232
09.06.2012, 04:56  [ТС] 16
Цитата Сообщение от Avazart Посмотреть сообщение
Т.е ?
Проблема в самом коде компонента?
Видимо да.
0
09.06.2012, 04:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.06.2012, 04:56
Помогаю со студенческими работами здесь

Компилятор ругается при создании дочернего окна
господа создаю дочернее окно но компилятор ругается - #include &lt;windows.h&gt; /* Declare Windows...

При создании виджета, дочернего к QGLWidget, дочерний виджет не отображается
#include &quot;class.h&quot; #include &lt;QApplication&gt; #include &lt;windows.h&gt; #include &lt;GL/glut.h&gt; int...

ООП в C++: Вызов родительского конструктора с параметром при создании объекта дочернего класса
Здравствуйте! Столкнулся с такой проблемой: если есть родительский класс с конструктором, то при...

Как при создании дочернего окна передать ему указатель на static-переменную в оконной процедуре родительского?
Есть оконная процедура родительского окна, в ней есть static-переменная, например, static...

Ошибка при создании компонента TIBTransaction
Сегодя весь день сражаюсь с ibx, lazarus, ibexpert. После того, как наконец удалось установить ibx,...

Передача имени файла при создании дочернего процесса
Только начинаю программировать под Linux и не совсем понимаю, как это работает Задача такая:...


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

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

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