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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.08.2013, 09:57   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию Открыть несколько экземпляров формы

Пытаюсь открыть несколько экземпляров Form2.
1. Form2 в опциях проекта перенёс в Available forms
2. Использую код и получаю ошибку
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    ListView1: TListView;
    procedure ListView1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
  TFormArray = array of TForm2; // [Error] Unit1.pas(20): Undeclared identifier: 'TForm2'

var
  Form1: TForm1;
  Forms: TFormArray;
  i: Integer;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.ListView1Click(Sender: TObject);
begin
  i := Length(Forms);
  SetLength(Forms, i + 1);
  Forms[i] := TForm2.Create(Application);
  Forms[i].Caption := 'User ' + IntToStr(i);
  Forms[i].Show;
end;

end.
Что не так? Где долно быть размещено?
Код:
type
  TFormArray = array of TForm2;
Shouldercannon вне форума Ответить с цитированием
Старый 26.08.2013, 11:15   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ссыль на Unit2 вынести в interface. Возможны проблемы, если в Unit2 упоминается Unit1. Проблем не будет, если в Unit2 ссылка на Unit1 будет в implementation. По хорошему в отдельном юните описание типа TFormArray и на этот юнит ссылки из Unit1 и Unit2
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.08.2013, 11:18   #3
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Код:
type TFormArray = array of TForm;
Зачем еще и 2?
puporev вне форума Ответить с цитированием
Старый 26.08.2013, 11:45   #4
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Ссыль на Unit2 вынести в interface.
Тоесть сюда?
Код:
unit Unit1;

interface
// <-- сюда
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;
Цитата:
Сообщение от Аватар Посмотреть сообщение
Возможны проблемы, если в Unit2 упоминается Unit1
Не упоминается
Цитата:
Сообщение от puporev Посмотреть сообщение
Код:
type TFormArray = array of TForm;
Зачем еще и 2?
+
Заработало, теперь связь с публичной процедурой Form2 потеряна.
Явно не пройдет
Код:
Form2.Test;
и тоже
Код:
Form[i].Test;

Последний раз редактировалось Shouldercannon; 26.08.2013 в 11:49.
Shouldercannon вне форума Ответить с цитированием
Старый 26.08.2013, 11:49   #5
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
связь с публичной процедурой Form2 потеряна
Может создать Form2 обычно, без массива? А 3 и более в массиве.
puporev вне форума Ответить с цитированием
Старый 26.08.2013, 11:51   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Тоесть сюда?
Ага, туда её родимую
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.08.2013, 12:31   #7
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Код:
TForm2(Form[i]).Test;
northener вне форума Ответить с цитированием
Старый 27.08.2013, 09:55   #8
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Не учёл, что в Unit2 есть поток и в потоке есть обращение к компонентам формы
Код:
Form2.Что-то
Как в данном случае обратиться к
Код:
что-то
Shouldercannon вне форума Ответить с цитированием
Старый 27.08.2013, 10:14   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну а то что northener написал не прокатывает?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.08.2013, 10:22   #10
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Не учёл, что в Unit2 есть поток и в потоке есть обращение к компонентам формы
А что поток общается со всеми сколько есть форм?

Нет он общается с одной.
В таком случаем объявите поле
Код:
TMyThred =class(TThread)
private
myform: TForm2;
...
end;
при инициализации потока (после создания) присвойте ему одну из вашего списка
Код:
thredX.mayform:=forms[???];
И внутри потока пользуйтесь этой переменной.
Код:
myform.что-то
А теперь вопрос вам ВСЕ ЕЩЕ НУЖЕН этот масссив Forms.
Есть ли где обращение к нему кроме:
Код:
Setlength
Forms[j]:=TForm2.Create;
myform:=Forms[j];
Forms[j].Free;
в таком случае достаточно.
Код:
myForm:=TForm2.Create;
myform.Free;
Цитата:
Заработало, теперь связь с публичной процедурой Form2 потеряна.
http://www.gunsmoker.ru/2011/04/blog-post.html
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 27.08.2013 в 10:31.
evg_m вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[WinForms] много экземпляров дочерней формы Glen Windows Forms 1 23.07.2012 20:33
Открыть несколько файлов из проводника Anfall Общие вопросы Delphi 22 01.03.2012 20:50
Открыть несколько файлов royun Общие вопросы Delphi 2 14.11.2011 08:02
1) как перетащить несколько модулей с одной книги на другую одним скопом? 2)можно ли открыть несколько книг сразу? БАХТИ Microsoft Office Excel 17 26.09.2011 18:11
Печатать репорт в несколько экземпляров chugo Microsoft Office Access 1 27.09.2010 06:27