Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Создание объекта и его переменные [D7, XP]


worldmen ©   (2009-06-07 00:11:00) 

Есть MDI форма в которой я создаю два окна (из одной и той же формы - TGoIc)
 
TForms = object
   Ic_1    : TGoIc;  
   Ic_2    : TGoIc;  
 end;
.....
Var
 BeginIce : TForms;
 ...
       BeginIce.Ic_1:= TGoIc.Create(Application);
       BeginIce.Ic_1.Show;

       BeginIce.Ic_2:= TGoIc.Create(Application);
       BeginIce.Ic_2.Show;

В каждой форме я загружаю свои параметры в переменные (которые расположены после implementation). Из-за этого переменные получаются общими и значения переменных получаются те, которые были загружены последними, а мне нужно чтоб для каждого обьекта  BeginIce.Ic_1 и  BeginIce.Ic_2 они были свои.


Юрий Зотов   (2009-06-07 15:30:00) [1]

> worldmen   (07.06.09 15:27) [9]

FParam1 - это не свойство, а поле. Оно доступно для чтения и записи, но только внутри модуля с классом TGoIc.

Param1 - это свойство. Оно доступно только для чтения, но зато везде.

Соответственно и используйте.


worldmen   (2009-06-07 15:27:00) [2]

Все работает. Только не пойму какие свойства правильно использовать FParam1 или Param1 ? Значения есть в обоих.


Плохиш   (2009-06-07 14:48:00) [3]


> worldmen   (07.06.09 12:34) [5]

goto [2]


Юрий Зотов   (2009-06-07 12:40:00) [4]

Или переменная GoIc не получила значение.


Юрий Зотов   (2009-06-07 12:39:00) [5]

Переменная Form1 не получила значение.


worldmen   (2009-06-07 12:34:00) [6]

После выполнения этого кода (нажатие кнопки Button1)  выводится ошибка "Access violation..."

 TGoIc = class(TForm)
 private
  FParam1: integer;
  FParam2: integer;
  FParamN: integer;
 public
  procedure LoadParams; //  код загрузки параметров
  property Param1: integer read FParam1;
  property Param2: integer read FParam2;
  property ParamN: integer read FParamN;
 end;

var
 Form1: TForm1;
 GoIc : TGoIc;

implementation

{$R *.dfm}

procedure TGoIc.LoadParams;
Begin
 FParam1:= StrToInT(Form1.Edit1.Text);
End;

procedure TForm1.Button1Click(Sender: TObject);
begin
 GoIc.LoadParams;
end;


Юрий Зотов   (2009-06-07 09:44:00) [7]

Добавление - если к параметрам формы нужен доступ извне, то объявите еще и свойства:

TGoIc = class(TForm)
private
 FParam1: ...;
 FParam2: ...;
 FParamN: ...;
 ...
public
 procedure LoadParams; // Написать код загрузки параметров
 property Param1: ... read FParam1;
 property Param2: ... read FParam2;
 ...
 property ParamN: ... read FParamN;
end;


Юрий Зотов   (2009-06-07 08:51:00) [8]

> worldmen   (07.06.09 00:11)  

Перевожу на русский:

type
 TGoIc = class(TForm)
 private
   FParam1: ...;
   FParam2: ...;
   FParamN: ...;
 ...
 public
   procedure LoadParams; // Написать код загрузки параметров
 ...
 end;


Теперь после создания формы вызываем ее метод LoadParams, который и грузит параметры FParam1..FParamN. У каждого экземпляра формы они будут своими.

Для MDI-Child форм вызывать Show не нужно.


Германн   (2009-06-07 00:37:00) [9]


> В каждой форме я загружаю свои параметры в переменные (которые
> расположены после implementation ).

Учебник читай!
Форма и implementation - это термины из разных областей программирования. Не имеющие друг к другу никакого отношения.


DVM   (2009-06-07 00:18:00) [10]


> worldmen


> а мне нужно чтоб для каждого обьекта  BeginIce.Ic_1 и  BeginIce.
> Ic_2 они были свои.

Ну так сделай их полями класса формы.


Наверх

Титульная страница Поиск, карта сайта Написать письмо