Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Проблема с переменными.


Автор: IamDreamer 29.3.2008, 20:21
Как присвоить переменной из одной формы значение переменной из другой формы? Есть массив, объявленный в Form1 глобально. Как его значения присвоить массиву из формы Form2?

Автор: THandle 29.3.2008, 20:41
Так объявлено?

Код

var
  Form1: TForm1;
  a1 : array [1..4] of integer;




Тогда в юните второй формы:

Код

implementation

uses Unit1;


И работаешь так же как с переменной из второго юнита.

Небольшой примерчик в аттаче.

Автор: IamDreamer 29.3.2008, 20:42
Спасибо. Попробую.

Добавлено через 2 минуты и 12 секунд
А локально объявленные в Unit1 переменные будут работать в Unit2?

Автор: VICTAR 29.3.2008, 20:46
Если ты имеешь ввиду переменные объявленные после implementation, то нет

Автор: IamDreamer 29.3.2008, 20:54
Т.е. надо для видимости переменной объявить её в implementation?

Автор: THandle 29.3.2008, 21:00
IamDreamer, нет, в разделе interface, до implementation.

Автор: VICTAR 29.3.2008, 21:01
Так, как показал THandle. 

Автор: IamDreamer 29.3.2008, 21:02
Аа. Ну я там и объявил. Ещё раз спасибо.

Автор: IamDreamer 6.4.2008, 11:38
В каком разделе и каким образом описать процедуру, которая должна быть видима для других модулей?
Код

type
  TForm2 = class(TForm)
    Label1: TLabel;
    StringGrid1: TStringGrid;
    Button1: TButton;
    StringGrid2: TStringGrid;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
const N=10;
type
  TArray = array [1..N] of integer;

var
  Form2: TForm2;
  c: TArray;

Процедура, которую нужно описать, содержит параметр типа TArray. Если процедуру описать в разделе public или ещё выше, то компилятор выдаёт ошибку про неизвестный тип TArray. 

Автор: Rrader 6.4.2008, 11:55
Опиши тип до формы:
Код

const N = 10;

type
  TArray = array [1..N] of Integer;

  TForm2 = class(TForm)
    Label1: TLabel;
    StringGrid1: TStringGrid;
    Button1: TButton;
    StringGrid2: TStringGrid;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { А здесь процедуру }
  end;

var
  Form2: TForm2;
  c: TArray;

Автор: IamDreamer 6.4.2008, 12:00
Написал так:
Код

const N=10;
type
  TArray = array [1..N] of integer;
type
  TForm2 = class(TForm)
    Label1: TLabel;
    StringGrid1: TStringGrid;
    Button1: TButton;
    StringGrid2: TStringGrid;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure Swap(var Arr : TArray; pos1, pos2 : integer);
end;

Цитата
[Error] Unit2.pas(24): Unsatisfied forward or external declaration: 'TForm2.Swap'

Автор: Rrader 6.4.2008, 12:15
Поставь курсор на процедуру Swap и нажми Shift+Ctrl+C. Ты её объвил, но не реализовал.

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