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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2012, 13:14   #1
sentenso
 
Регистрация: 19.11.2009
Сообщений: 8
Восклицание Вывод массива TImage на форму в другом модуле.

Здравствуйте, коллеги. В общем, появилась у меня при написании игры одна проблемка. При попытке вывода массива изображений на панель, расположенную на форме в другом UNIT-е, выскакивает Access Violation на строчке Parent:=Form2.pnlImgLvl;
Вот, собственно, код:
Код:
procedure lvlcreate (N:Integer);
begin
imglt:=0;      //Начальные
imgtp:=0;     //параметры
indexpic:=1;
SetLength(lvlmas, N);
for i:=0 to N-1 do begin
lvlmas[i]:=TImage.Create(Form2);
with lvlmas[i] do begin
Parent:=Form2.pnlImgLvl;
Ну дальше нет ничего интересного, там только выстраивание, заполнение изображениями и наложение меток с номерами.
Я не могу понять, что я не так делаю? Access Violation возникает, я так понимаю, при проблемах в обращении к памяти, но в данном случае память выделяется... В чём может быть проблема?

И ещё одно но, когда процедура запускалась во втором модуле, всё было великолепно.

Последний раз редактировалось sentenso; 19.04.2012 в 13:32. Причина: Дополнение
sentenso вне форума Ответить с цитированием
Старый 19.04.2012, 13:19   #2
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Form2 надо полагать в этот момент уже существует?
Баламут вне форума Ответить с цитированием
Старый 19.04.2012, 13:29   #3
sentenso
 
Регистрация: 19.11.2009
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Баламут Посмотреть сообщение
Form2 надо полагать в этот момент уже существует?
Насильно я не вызываю процедуру создания 2 формы, но она создаётся автоматически при запуске проекта, так что я думаю, дело не в этом. Но всё равно, спасибо за ответ. Я постараюсь это проверить.
sentenso вне форума Ответить с цитированием
Старый 19.04.2012, 17:19   #4
Vadja-Son
Пользователь
 
Регистрация: 02.02.2011
Сообщений: 40
По умолчанию

Формы соеденены? Иногда программа хочет запускать вспомогательную форму с главной. Я просто тоже игру пишу, у меня такое было. Соеденил формы, код прописывал в другом UNIT-е, но при этом приписывал, чтобы считывал с основной формы а не с вспомогательной. Много возни, но работает!
Vadja-Son вне форума Ответить с цитированием
Старый 19.04.2012, 17:24   #5
sentenso
 
Регистрация: 19.11.2009
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Vadja-Son Посмотреть сообщение
Формы соеденены? Иногда программа хочет запускать вспомогательную форму с главной. Я просто тоже игру пишу, у меня такое было. Соеденил формы, код прописывал в другом UNIT-е, но при этом приписывал, чтобы считывал с основной формы а не с вспомогательной. Много возни, но работает!
А можно поподробнее?
sentenso вне форума Ответить с цитированием
Старый 19.04.2012, 17:28   #6
kashirin.p
Подтвердите свой е-майл
 
Регистрация: 04.04.2012
Сообщений: 37
По умолчанию

Цитата:
Сообщение от sentenso Посмотреть сообщение
Насильно я не вызываю процедуру создания 2 формы, но она создаётся автоматически при запуске проекта, так что я думаю, дело не в этом. Но всё равно, спасибо за ответ. Я постараюсь это проверить.
Что значит автоматически. Приведите код где создается форма.
kashirin.p вне форума Ответить с цитированием
Старый 19.04.2012, 17:35   #7
sentenso
 
Регистрация: 19.11.2009
Сообщений: 8
По умолчанию

Цитата:
Сообщение от kashirin.p Посмотреть сообщение
Что значит автоматически. Приведите код где создается форма.
Форма находится в другом юните, на ней есть 1 компонент - панель. вот весь код 2 юнита:
Код:
unit Unit2;

interface

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

type
  TForm2 = class(TForm)
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    pnlImgLvl: TPanel;
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

uses Unit1;

{$R *.dfm}


procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caHide;
end;

end.

Последний раз редактировалось sentenso; 19.04.2012 в 17:36. Причина: исправление
sentenso вне форума Ответить с цитированием
Старый 19.04.2012, 17:57   #8
kashirin.p
Подтвердите свой е-майл
 
Регистрация: 04.04.2012
Сообщений: 37
По умолчанию

Цитата:
Сообщение от sentenso Посмотреть сообщение
Форма находится в другом юните, на ней есть 1 компонент - панель. вот весь код 2 юнита:
Код:
unit Unit2;

interface

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

type
  TForm2 = class(TForm)
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    pnlImgLvl: TPanel;
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

uses Unit1;

{$R *.dfm}


procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caHide;
end;

end.
Не понятно, где создается форма? По твоему коду ниче непонятно.

Последний раз редактировалось kashirin.p; 19.04.2012 в 17:59.
kashirin.p вне форума Ответить с цитированием
Старый 19.04.2012, 18:09   #9
sentenso
 
Регистрация: 19.11.2009
Сообщений: 8
По умолчанию

Цитата:
Сообщение от kashirin.p Посмотреть сообщение
Не понятно, где создается форма? По твоему коду ниче непонятно.
Ну что тут непонятного? ФОорма создана заранее в среде delphi. Её, на сколько я понимаю, не требуется активировать в коде. Она должна активироваться при старте программы. Или я не прав?
sentenso вне форума Ответить с цитированием
Старый 20.04.2012, 01:22   #10
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Ну хорошо, создана. Но ведь это еще не значит, что доступна. Напиши в Unit1 следующее:

Код:
implementation

uses Unit2;
Баламут вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод массива изображений TBitMap на форму для дальнейшей работы yachsmit Общие вопросы Delphi 6 28.01.2011 11:56
Размещение процедур в другом модуле Teor Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 12.12.2010 14:57
Как обратиться к переменой в другом модуле. nusik Общие вопросы C/C++ 5 02.07.2009 14:56
вызвать метод класса, находящегося в другом модуле zalum Общие вопросы Delphi 4 06.05.2009 08:47