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

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

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

Сообщение prgchip » 01.03.2011 01:03:04

Если я правильно понял то ... до вывода формы на экран происходит последовательное выполнение OnCreate, OnShow, OnActivate и OnPaint именно в такой последовательности. На каком этапе происходит инициализация формы?
Я имею ввиду выполнение операторов после строки
Код: Выделить всё
initialization
    {$I unit1.lrs}
    Вот это место!!!
end.
Последний раз редактировалось prgchip 17.03.2011 23:36:56, всего редактировалось 1 раз.
Аватара пользователя
prgchip
незнакомец
 
Сообщения: 8
Зарегистрирован: 20.02.2011 15:51:36
Откуда: г.Люберцы

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

Сообщение VirtUX » 01.03.2011 01:45:16

OnCreate
Хотя он происходит после самого (т.е. внутри) AnyForm.Create. Т.ч. лучше перекрыть Create в потомке и самому решать, что за чем будет идти.
Код: Выделить всё
TAnyForm = class(TForm)
...
public
  constructor Create(AOwner: TComponent); override;
end;
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

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

Сообщение prgchip » 01.03.2011 02:46:31

Простите но я не так давно начал писать на Pascal`е. Для меня все это пока темный лес.
Можно пример поподробнее. Как раздел Implementation будет выглядеть если перекрыть OnCreate самой формы?
Аватара пользователя
prgchip
незнакомец
 
Сообщения: 8
Зарегистрирован: 20.02.2011 15:51:36
Откуда: г.Люберцы

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

Сообщение VirtUX » 01.03.2011 03:42:23

prgchip писал(а):Как раздел Implementation будет выглядеть

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

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


На самом начальном. Можно вставить действия перед инициализацией форм.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

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

Сообщение Maxizar » 01.03.2011 09:52:47

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 формы. (смотрим: Инспектор объектов->События)… Если же реально нужна работа на уровне класса, читаем книжку: Раздел Классы, и Раздел Формы. И не забываем что Форма – это тоже класс. Удачи.
Maxizar
постоялец
 
Сообщения: 385
Зарегистрирован: 20.03.2010 19:48:14

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

Сообщение prgchip » 16.03.2011 16:35:40

Спасибо за книги ... полезные. Пока только бегло пролистал, но увидел много полезного. На досуге почитаю внимательнее.
Пока писал подробности того что мне надо от инициализации формы сам въехал как мне все это организовать.
Аватара пользователя
prgchip
незнакомец
 
Сообщения: 8
Зарегистрирован: 20.02.2011 15:51:36
Откуда: г.Люберцы


Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 25

Рейтинг@Mail.ru