Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > C++ Builder
Перезагрузить страницу Не работают компоненты TImage в собственном классе
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Geky Geky вне форума
Новичок
 
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 06.10.2005
По умолчанию Не работают компоненты TImage в собственном классе - 06.10.2005, 07:05


Написал собственный класс Gauge, в нем все внутренности общедоступные <public>. Добавил его в проект. К моему классу должен быть привязан рисунок, который я поместил в TImage (D1off.ico). У меня задача, объявляя объект класса Gauge W1, на форме должна появиться в определенных координатах иконка. Я пытался в конструктор класса вставить следующий код;
Код:
Gauge::Gauge()
{
ImageGauge = new TImage(Form1->GroupBox1);
ImageGauge->Parent = Form1->GroupBox1;
ImageGauge->AutoSize = true;
Image->Picture->LoadFromFile(S);
Image->Left = iLeft;
Image->Top  = iTop;
Image->Visible = true;
}
но он не работает, возникает в первой строке ошибка обращения к адресу.
А если так то работает;
Код:
void __fastcall TForm1::FormCreate(TObject *Sender)
{
ImageGauge = new TImage(Form1->GroupBox1);
ImageGauge->Parent = Form1->GroupBox1;
ImageGauge->AutoSize = true;
W1.Bmp(ImageGauge,"D1off.ico",408,109);
}
а Bmp это следующие;
Код:
void Gauge::Bmp(TImage *Image,AnsiString S,int iLeft,int iTop)
{
Image->Picture->LoadFromFile(S);
Image->Left = iLeft;
Image->Top  = iTop;
Image->Visible = true;
}
Мне надо, чтобы работало через конструктор Gauge. В чем у меня ошибка.
Место нахождение TImage
Код:
class TForm1 : public TForm
{
__published:    // IDE-managed Components
…
…
private:    // User declarations
public:  // User declarations
        TImage *ImageGauge; //Здесь у меня TImage
Буду благодарен за ответ.
Ответить с цитированием
  (#2 (permalink)) Старый
ssh ssh вне форума
Member
 
Сообщений: 245
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 26.12.2004
По умолчанию 06.10.2005, 11:20

А в первом варианте "S" вовремя определяется?
Ответить с цитированием
  (#3 (permalink)) Старый
Geky Geky вне форума
Новичок
 
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 06.10.2005
По умолчанию 06.10.2005, 11:33

Ну да, я пробывал и по другому указывать
Image->Picture->LoadFromFile("D1off.ico");
Я думаю проблема связана с объявлением компонента TImage внутри классов TForm1 или Gauge. Вызов из TForm1 работает, а из Gauge нет.
Ответить с цитированием
  (#4 (permalink)) Старый
wind wind вне форума
Member
 
Сообщений: 322
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 14.03.2005
По умолчанию 06.10.2005, 11:51

Уважаемый(ая) Geky а можно в трех словах что (и зачем? задавать координаты? см. бритва Оккама :!: ) выше упомянытый класс должен по вашему делать? Чем вызваны такие особенности дизайна как привязка к конкретному экземпляру формы и деталям ее реализации? Об инкапсуляции как всегда должен думать дядя Страуструп ? И еще покажите как (статически/динамически) и когда Вы создаете экземпляр класса?
Без этого понять что делать с Вашим "кодом" не возможно...
Ответить с цитированием
  (#5 (permalink)) Старый
Geky Geky вне форума
Новичок
 
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 06.10.2005
По умолчанию 06.10.2005, 14:49

На форме уменьшенная схема небольшого дома. Там схематически нанесены датчики на окнах и дверях (это D1off.ico), которые отображают состояние открыто или закрыто. Для реализации этой задачи, я хочу написать класс Gauge т.е. датчик который имеет свои методы, свойства и др. (состояние – покой или сработка, визуальное изображение на форме в зависимости от состояния, реакцию на нажатие мыши на датчик, звук и многое другое). Экземпляр класса я создаю вот так;

Код:
#include <vcl.h>
…
…
TForm1 *Form1;
Gauge W1;
void __fastcall TForm1::FormCreate(TObject *Sender) 
{
…
…
}
Может не работает, потому что TImage не находится вот здесь
__published: // IDE-managed Components
Или при создании экземпляра Gauge запускается конструктор в котором стоит
ImageGauge = new TImage(Form1->GroupBox1);, а другие компоненты Form1 еще не готовы, к примеру GroupBox1.
А если уйти от моего примера, и поставить вопрос так, как из конструктора своего класса, высветить картинку на форме в компоненте TImage?
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Shadow_Replicant Shadow_Replicant вне форума
Member
 
Сообщений: 322
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 10.08.2005
По умолчанию 06.10.2005, 19:24

Цитата:
ImageGauge = new TImage(Form1->GroupBox1);, а другие компоненты Form1 еще не готовы, к примеру GroupBox1.
Именно, ибо конструктор для статистических переменных вызываеться первея, чем для самой формы(ибо она динамическая, и её конструктор вызываеться в ручную(кодом)). Это из-за того, что они видны на одном уровне. То есть Form1 не определена к этому моменту
Ответить с цитированием
  (#7 (permalink)) Старый
Geky Geky вне форума
Новичок
 
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 06.10.2005
По умолчанию 10.10.2005, 07:07

Спасибо, разобрался, в этом и была проблема.
Делаю вот так
Gauge *W1;
потом
W1 = new Gauge;
и все работает.
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массив в классе. nvb С/С++ 3 02.03.2012 00:23
Хранение графических переменных в классе #Max C++ Builder 5 28.05.2007 15:46
Delete и структуры в классе Diver С/С++ 6 15.12.2005 00:44
Двухмерный динамический массив в классе Dlav С/С++ 5 26.09.2005 22:21
Работа с указателем в классе TLabel etc C++ Builder 2 27.01.2005 10:36
Две одинаковые функции в одном классе Jordan С/С++ 8 18.05.2004 19:42
Как работают компоненты WebSnap Nick_ C++ Builder 2 14.04.2004 14:53
Стандартный визуальный компонент в собственном невизуальном imported_Альтаир Delphi 1 01.03.2004 16:58
Dialog в моем классе как реализовать Anonymous WinAPI 1 10.01.2004 05:54
Scroll в оконном классе как работать Aist++ WinAPI 1 20.11.2003 06:31
Можно ли пользоваться функциями 21-го в собственном обработчике Anonymous Assembler 1 10.04.2003 20:20
Создание и прописание чата на собственном сайте, не RTFM Stanislav Вопросы начинающих программистов 3 13.02.2003 00:51



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов