Содержание материала

Автор: Neil

 

...у меня происходит утечка памяти при изменениях страниц в закладках NoteBook.

 

Вы не "теряете" ресурсы, вы их используете. Вы ИСПОЛЬЗУЕТЕ ресурсы на каждой страницы начиная с первой, которая доступна для вашего созерцания. Я упомянаю это потому, потому что проблема ПОТЕРИ ресурсов относится к другому типу проблемы.

 

Недавно я работал над проблемой показа других *ФОРМ* в главной форме, как если бы они были страницами NoteBook. Форма создается при перелистывании на эту "страницу", и разрушается при ее покидании. Это требует хранения неизменяемой информации, естественно, в главной форме, но это чрезвычайно нетребовательно к ресурсам. Главное, что вы храните поля индивидуальных данных в главной форме с именем "Child", а инициализируете в обработчике события экземпляра TForm2 (или имеющего другое имя, в зависимости от имени вашей первой дочерней формы) OnCreate. Поместите закладки в нижней части формы, и при изменении закладки освобождайте текущего "ребенка", а затем создавайте и делайте ребенком другой соответствующий экземпляр формы.

 

Как заставить работать эту технологию: у каждой дочерней формы имеется метод CreateParams, позволяющий сделать ее "ребенком" главной формы:

 

Code:

procedure TPageForm.CreateParams(var Params: TCreateParams);

begin

inherited CreateParams(Params);

with Params do

begin

   WndParent := Application.MainForm.Handle;

   Parent := Application.MainForm;

   Style := WS_CHILD or WS_CLIPSIBLINGS or WS_CLIPCHILDREN;

   Align := alClient;

end;

end;

 

Код главной формы должен выглядеть примерно так:

 

Code:

procedure TForm1.TabSet1Change(Sender: TObject; NewTab: Integer;

var AllowChange: Boolean);

begin

LockWindowUpdate(Handle);

Child.Free;

case NewTab of

   0: Child := TForm2.Create(Application);

   1: Child := TForm3.Create(Application);

   2: Child := TForm4.Create(Application);

end;

Child.Show;

LockWindowUpdate(0);

end;

 

Автор: Neil

 


...у меня происходит утечка памяти при изменениях страниц в закладках NoteBook.

 

Вы не "теряете" ресурсы, вы их используете. Вы ИСПОЛЬЗУЕТЕ ресурсы на каждой страницы начиная с первой, которая доступна для вашего созерцания. Я упомянаю это потому, потому что проблема ПОТЕРИ ресурсов относится к другому типу проблемы.

 

Недавно я работал над проблемой показа других *ФОРМ* в главной форме, как если бы они были страницами NoteBook. Форма создается при перелистывании на эту "страницу", и разрушается при ее покидании. Это требует хранения неизменяемой информации, естественно, в главной форме, но это чрезвычайно нетребовательно к ресурсам. Главное, что вы храните поля индивидуальных данных в главной форме с именем "Child", а инициализируете в обработчике события экземпляра TForm2 (или имеющего другое имя, в зависимости от имени вашей первой дочерней формы) OnCreate. Поместите закладки в нижней части формы, и при изменении закладки освобождайте текущего "ребенка", а затем создавайте и делайте ребенком другой соответствующий экземпляр формы.

 

Как заставить работать эту технологию: у каждой дочерней формы имеется метод CreateParams, позволяющий сделать ее "ребенком" главной формы:

 

Code:

procedure TPageForm.CreateParams(var Params: TCreateParams);

begin

inherited CreateParams(Params);

with Params do

begin

   WndParent := Application.MainForm.Handle;

   Parent := Application.MainForm;

   Style := WS_CHILD or WS_CLIPSIBLINGS or WS_CLIPCHILDREN;

   Align := alClient;

end;

end;

 

Код главной формы должен выглядеть примерно так:

 

Code:

procedure TForm1.TabSet1Change(Sender: TObject; NewTab: Integer;

var AllowChange: Boolean);

begin

LockWindowUpdate(Handle);

Child.Free;

case NewTab of

   0: Child := TForm2.Create(Application);

   1: Child := TForm3.Create(Application);

   2: Child := TForm4.Create(Application);

end;

Child.Show;

LockWindowUpdate(0);

end;

 

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить