![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Создание объекта и его переменные [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 они были свои.
Ну так сделай их полями класса формы.