Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.09.2012, 18:11   #1
biohazard120
Пользователь
 
Регистрация: 14.09.2012
Сообщений: 12
По умолчанию Создание экземпляра класса

Здравствуйте уважаемые форумчане. Столкнулся с проблемой в delphi.
Задача такая: необходимо создать экземпляр класса, который наследует класс TImage.
Вот пример моего кода с использованием constructor, но объект не создается. Прошу прощения заранее если вопрос глупый, так как с классами я знакомлюсь буквально второй день

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
type
  TNewYearObject = class(TImage)
  public
    constructor Create(Owner: Tcomponent);override;
  end;
var
  Form1: TForm1;
  Object1: TNewYearObject;

implementation

{$R *.dfm}
constructor TNewYearObject.Create(Owner: Tcomponent);
begin
inherited Create(Owner);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Object1:=TNewYearObject.Create(Form1);
end;

end.
Надеюсь на Вашу помощь.
biohazard120 вне форума Ответить с цитированием
Старый 14.09.2012, 18:17   #2
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

По какому принципу определяешь, что он не создаётся?
Somebody вне форума Ответить с цитированием
Старый 14.09.2012, 18:19   #3
biohazard120
Пользователь
 
Регистрация: 14.09.2012
Сообщений: 12
По умолчанию

Попытался присвоить ему значение: эффект - пустая форма

Только что попытался снова - EAccessViolation

Код программы:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, jpeg;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
type
  TNewYearObject = class(TImage)
  public
    constructor Create(Owner: Tcomponent);override;
  end;
var
  Form1: TForm1;
  Object1: TNewYearObject;

implementation

{$R *.dfm}
constructor TNewYearObject.Create(Owner: Tcomponent);
begin
inherited Create(Owner);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  img1:TPicture;
begin
Object1:=TNewYearObject.Create(Form1);
img1.LoadFromFile('1.jpg');
Object1.Picture:=img1;
end;

end.

Последний раз редактировалось biohazard120; 14.09.2012 в 18:28.
biohazard120 вне форума Ответить с цитированием
Старый 14.09.2012, 18:35   #4
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Цитата:
Только что попытался снова - EAccessViolation
Variable 'img1' might not have been initialized как бы должно на что-то намекать...
Somebody вне форума Ответить с цитированием
Старый 14.09.2012, 18:38   #5
biohazard120
Пользователь
 
Регистрация: 14.09.2012
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Somebody Посмотреть сообщение
Variable 'img1' might not have been initialized как бы должно на что-то намекать...
И как же я инициализирую переменную типа TPicture?

В случае
Код:
img1.Create;
Происходит переполнение стека

Последний раз редактировалось biohazard120; 14.09.2012 в 18:44.
biohazard120 вне форума Ответить с цитированием
Старый 14.09.2012, 18:52   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
И как же я инициализирую переменную типа TPicture?
Создав объект класса TPicture, не?

Цитата:
В случае
Код:

img1.Create;

Происходит переполнение стека
Нет. Вы бредите. происходит обращение к неинициализированному указателю. Откройте учебник и узнайте, как создаются объекты классов.
p51x вне форума Ответить с цитированием
Старый 14.09.2012, 19:00   #7
biohazard120
Пользователь
 
Регистрация: 14.09.2012
Сообщений: 12
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Создав объект класса TPicture, не?


Нет. Вы бредите. происходит обращение к неинициализированному указателю. Откройте учебник и узнайте, как создаются объекты классов.
Уже разобрался с переполнением стека. Все было гораздо проще:
Код:
Object1.Picture.LoadFromFile();
Но теперь возникла старая проблема: объект по-прежнему не создается.
Пробовал
Код:
Object1.Left:=1; Object1.Top:=1;
Не помогает
biohazard120 вне форума Ответить с цитированием
Старый 14.09.2012, 19:04   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

покажите как вы его создаете.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.09.2012, 19:11   #9
biohazard120
Пользователь
 
Регистрация: 14.09.2012
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
покажите как вы его создаете.
Вот код конструктора(напоминаю что класс TNewYearObject наследует класс TImage):
Код:
constructor TNewYearObject.Create(Owner: Tcomponent);
begin
inherited Create(Owner);
end;
Вот собственно кусок кода где я создаю объект:
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
Object1:=TNewYearObject.Create(Form1);
Object1.Picture.LoadFromFile('1.jpg');
Object1.Left:=1;
Object1.Top:=1;
end;
Ну и сам объект, объявленный в разделе var
Код:
  Object1: TNewYearObject;
biohazard120 вне форума Ответить с цитированием
Старый 14.09.2012, 19:13   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Parent не мешало бы задать. Без него фиг его знает где ему отображаться
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C#(перехват нового экземпляра класса StackOverflowException) Anett// Помощь студентам 0 12.05.2011 22:26
Освобождение памяти от экземпляра класса Mixim Общие вопросы .NET 8 05.01.2011 17:27
удаление экземпляра класса Juffin Общие вопросы Delphi 5 02.11.2010 11:57
ListBox, привязка экземпляра класса к Item. Возможно ли? Casper-SC Общие вопросы .NET 1 24.05.2010 10:40
Создание экземпляра компонента mar4elo Общие вопросы C/C++ 2 14.05.2010 05:40