Страница 1 из 1

Инициализация формы.[Решено]

СообщениеДобавлено: 01.03.2011 01:03:04
prgchip
Если я правильно понял то ... до вывода формы на экран происходит последовательное выполнение OnCreate, OnShow, OnActivate и OnPaint именно в такой последовательности. На каком этапе происходит инициализация формы?
Я имею ввиду выполнение операторов после строки
Код: Выделить всё
initialization
    {$I unit1.lrs}
    Вот это место!!!
end.

Re: Инициализация формы.

СообщениеДобавлено: 01.03.2011 01:45:16
VirtUX
OnCreate
Хотя он происходит после самого (т.е. внутри) AnyForm.Create. Т.ч. лучше перекрыть Create в потомке и самому решать, что за чем будет идти.
Код: Выделить всё
TAnyForm = class(TForm)
...
public
  constructor Create(AOwner: TComponent); override;
end;

Re: Инициализация формы.

СообщениеДобавлено: 01.03.2011 02:46:31
prgchip
Простите но я не так давно начал писать на Pascal`е. Для меня все это пока темный лес.
Можно пример поподробнее. Как раздел Implementation будет выглядеть если перекрыть OnCreate самой формы?

Re: Инициализация формы.

СообщениеДобавлено: 01.03.2011 03:42:23
VirtUX
prgchip писал(а):Как раздел Implementation будет выглядеть

По прежнему. А что там должно поменяться? Наверно я не совсем правильно вопрос понял... :?

Добавлено спустя 4 минуты 40 секунд:
prgchip писал(а):На каком этапе происходит инициализация формы?


На самом начальном. Можно вставить действия перед инициализацией форм.

Re: Инициализация формы.

СообщениеДобавлено: 01.03.2011 09:52:47
Maxizar
prgchip писал(а):На каком этапе происходит инициализация формы?
Я имею ввиду выполнение операторов после строки.

Вопрос понятен, но Вы в нем два раза ошиблись(ИМХО), а именно:
На каком этапе происходит инициализация формы? – Так как форма это класс, а инициализация экземпляра класса происходит при его создании (инициализации).
Создание класса – это вызов конструктора для переменной этого класса…
Когда вы видите этот код:
Код: Выделить всё
Application.CreateForm(TForm1, Form1);

На самом деле вы делаете вот это (вырезал только нужный кусок):
Код: Выделить всё
procedure TApplication.CreateForm(InstanceClass: TComponentClass;
  out Reference);
var
  Instance: TComponent;
  ok: boolean;
  AForm: TForm;
begin
  // Allocate the instance, without calling the constructor
  Instance := TComponent(InstanceClass.NewInstance);
  // set the Reference before the constructor is called, so that
  // events and constructors can refer to it
  TComponent(Reference) := Instance;

  ok:=false;
  try
    if (FCreatingForm=nil) and (Instance is TForm) then
      FCreatingForm:=TForm(Instance); 


Последняя строчка равносильна, вот этому:
Код: Выделить всё
MyForm:TForm; //У нас есть переменная типа форма

//Нужно создать переменную (инициализировать, разместить в памяти, присвоить полям значения по умолчанию)
MyForm:=TForm.Create;


prgchip писал(а):Я имею ввиду выполнение операторов после строки.
А именно для строки типа:
Код: Выделить всё
Initialization



Так initialization – это вообще то ни как не связано, с формой или классом – это часть (область) МОДУЛЯ. И данный код выполняется до передачи управления программе. Финилизирующая часть, выполняется после того как программа отработала, но до ее полного уничтожения.
Выполнение инициализаций модулей происходить по порядку, тому как они записаны, в главном модуле (program Project1; )
И используется в основном, для открытия файлов, соединений с Интернетом и всякого токого… что нужно для работы МОДУЛЯ… и уж потом для классов этого модуля. Но сейчас, без острой необходимости, данного подхода нужно избегать, должно хватать ООП…

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

Теперь, к тому вопросу, который более реально нужен Вам, и просто более подробно, о том, что Вам ответил VirtUX:
Для, того чтобы понять, что значит перекрыть, Нужно прочитать основы об ООП. Я в соседней теме давал ссылки на книги, наборы статей (DRKB), которые должны быть под рукой. Советую скачать.

Так же судя по уровню подготовки, я не думаю что вам нужно что либо перекрывать и переопределять класс формы, вам достаточно создать событие OnCreate формы. (смотрим: Инспектор объектов->События)… Если же реально нужна работа на уровне класса, читаем книжку: Раздел Классы, и Раздел Формы. И не забываем что Форма – это тоже класс. Удачи.

Re: Инициализация формы.

СообщениеДобавлено: 16.03.2011 16:35:40
prgchip
Спасибо за книги ... полезные. Пока только бегло пролистал, но увидел много полезного. На досуге почитаю внимательнее.
Пока писал подробности того что мне надо от инициализации формы сам въехал как мне все это организовать.