Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > array в другом формуляре??


Автор: B0M3R 24.1.2004, 02:08
как можно array которыж я создал в Form1 использовать/вычитовать в Form2?

Автор: dm9 24.1.2004, 02:41
1. array нельзя создать в Form1, его можно создать в модуле, содержащем Form1.
2. Использовать твой массив можно в любом другом модуле, поставив после строки
Код
implementation

этого модуля строку
Код
Uses Unit1;

Если Form1 - в другом модуле, пишешь вместо Unit1 имя этого самого модуля.

Автор: Pakshin A. S. 24.1.2004, 16:39
Более культурно создавать массив в Form2 и работать с ним в Form1 и Form2!!!

Т. К. может получиться ситуация, что Unit1 обращается к Unti2, а Unti2 - к Unit1, типа зацыкливания... Программеры говорят, что это плохо! biggrin.gif

Автор: December 24.1.2004, 17:09
Pakshin A. S. Это нормально. У меня почти все проекты по этой схеме работают. Ничего страшного нет.

Автор: Pakshin A. S. 24.1.2004, 17:50
А я помню, что мне строго настрого запрещали такую дребедень...

Автор: Pakshin A. S. 24.1.2004, 21:56
Ради прикола написал
в разделе interface Unit'а 1 - uses unit2
в разделе interface Unit'а 2 - uses unit1

Компилятор:
Цитата

[Fatal Error] Unit1.pas(6): Circular unit reference to 'Unit1'


А вот если один из модулей писать в разделе implementation, то всё в полном порядке! От сюда следует, что всё-таки не при всех случаях уместно ссылаться друг на друга...

Автор: December 24.1.2004, 22:01
Цитата
А я помню, что мне строго настрого запрещали такую дребедень...
Мне тоже запещали мороженое кусать.
Цитата
А вот если один из модулей писать в разделе implementation, то всё в полном порядке! От сюда следует, что всё-таки не при всех случаях уместно ссылаться друг на друга...

Отсюда следует, что надо правильно указывать кто кого и как использует. От этого зависит порядок компиляции.

Автор: B0M3R 25.1.2004, 16:27
Цитата(dm9 @ 24.1.2004, 00:41)
Использовать твой массив можно в любом другом модуле, поставив после строки
Код
implementation

этого модуля строку
Код
Uses Unit1;

Если Form1 - в другом модуле, пишешь вместо Unit1 имя этого самого модуля.

Я написал так как описал dm9, но как можно использовать потом масивы?

Автор: December 25.1.2004, 17:15
Просто берёшь и используешь.
Ечли всё правильно указал, то проблем не будет, если нет - выкладывай свои заголовки.

Автор: dm9 26.1.2004, 02:29
PS Массив должен быть описан в секции interface твоего Unit1

Пример.

Код
unit Unit1;

interface

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

type
 TForm1 = class(TForm)
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 T : array [0..9] of Integer; {Описывать здесь - в секции interface!!!}

implementation

{$R *.dfm}

end.


Использовать так:
Код
unit Unit2;

interface

uses
 ..., Unit1;

type
 ...

var
 ...

implementation

procedure MyProc;
begin
  T[1] := 2;
  {Или если у тебя в описании Unit2 или в переменных процедуры
   MyProc есть уже переменная T, тогда ТЕМ массивом пользоваться так:}
  Unit1.T[1] := 2;
end;

end.


Вариант 2:
Код
unit Unit2;

interface

uses
 ...

type
 ...

var
 ...

implementation

Uses Unit1; //Подключение модуля переносим сюда.

procedure MyProc;
begin
  T[1] := 2;
  {Или если у тебя в описании Unit2 или в переменных процедуры
   MyProc есть уже переменная T, тогда ТЕМ массивом пользоваться так:}
  Unit1.T[1] := 2;
end;

end.

Автор: x77 26.1.2004, 21:53
dm9, одного не пойму, почему ты решил, что массив нельзя объявить в форме? по-моему, без проблем. "на форме" - да, формально - нельзя, и то это уже вопрос визуализации, при желании - [censored34! Пожалуйста, соблюдайте элементарные правила приличия при общении на форуме] вопрос, нарисуем - будет жить. а в качестве свойства или просто в секцмм прайвэт - да ради бога.

Автор: Medved 27.1.2004, 00:52
Цитата(December @ 24.1.2004, 20:09)
Pakshin A. S. Это нормально. У меня почти все проекты по этой схеме работают. Ничего страшного нет.

Это называется перекрестные ссылки - это не есть good. Считается полохим стилем. Возможно возникновение трудно находимых ошибок и путаница.

Во почитайте, здесь все сказано: http://forum.vingrad.ru/index.php?act=ST&f=2&t=11486&view=findpost&p=73388

Автор: B0M3R 27.1.2004, 01:09
так, писать в масив получяется.

неполучается с него в form3 вычитовать!?

Автор: December 27.1.2004, 03:53
B0M3R повторяюсь, приведи код.
Pegas
Цитата
Во почитайте, здесь все сказано: Хороший стиль программирования в Borland Delphi
стиль-стилем, но в хорошо продуманном приложении путаницы не возникнет. Кстати, какие альтернативы есть у данного метода?

Автор: Medved 27.1.2004, 04:01
Цитата(December @ 27.1.2004, 06:53)
Кстати, какие альтернативы есть у данного метода?

Использовать промежуточный модуль, обычно (TDataModule) как для хранения глобальных переменных, так и для хранения различных невизуальных компонентов (TQuery, ImageList и т.д.).

Цитата(December @ 27.1.2004, 06:53)

стиль-стилем, но в хорошо продуманном приложении путаницы не возникнет.


Если хорошо продумать приложение, то как раз-то к такому выводу и придешь.

Автор: dm9 28.1.2004, 06:10
>dm9, одного не пойму, почему ты решил, что массив нельзя объявить в форме?

Да пусть объявляет, мне не жалко smile.gif
Я привёл простейший пример, не подумал как-то, что имеется в виду объявление массива внутри класса.
Ну а вообще, если бы уважаемый B0M3R соизволил почитать книжечку, то было бы всё зашибись, а все основы программирования здесь не опишешь...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)