Проблема с освобождением ресурсов Notebook
Falk0ner, вс, 06/07/2008 - 15:34.
Не волнуйтесь, если вы видите, что невидимая страница показывается снова. VCL - довольно умная штука, поскольку захватывает данные от дескриптора окна и сохраняет это непосредственно в объекте. Затем, всякий раз, когда дескриптор требуется снова, то есть тогда, когда вы делаете страницу видимой, дескриптор окна пересоздается, туда снова копируются данные, и оп-ля, как будто ничего и не произошло - магия!
Проблема с освобождением ресурсов Notebook Автор: Mike Scott Проблема с использованием ресурсов в компоненте Notebook? Вы можете обойти это, освобождая дескрипторы окон невидимых страниц компонента. Следующий код поясняет как это можно сделать - я создал обработчик события компонента OnClick, освобождающий дескрипторы невидимых страниц при каждом изменении видимой страницы:
procedure TForm1.TabSet1Click(Sender: TObject);
var
i: integer;
begin
Notebook1.PageIndex := TabSet1.TabIndex ;
with Notebook1, Pages do
for i := 0 to Count - 1 do
if (i <> PageIndex) then
TForm1(Objects[i]).DestroyHandle;
end;
Как вы могли заметить, я привел тип страницы notebook (Objects[ i ]) к объектам TForm1, что на самом деле не так. Тем не менее, эта небольшая хитрость позволяет иметь доступ к защищенным членам извне метода класса, где они определены, в данном случае DestroyHandle - защищенный метод TWinControl.
Это работает, поскольку TForm1 является наследником TWinControl, и позволяет иметь доступ к защищенным членам TForm1 и ее наследникам. Быстро и грязно, но это работает! var
i: integer;
begin
Notebook1.PageIndex := TabSet1.TabIndex ;
with Notebook1, Pages do
for i := 0 to Count - 1 do
if (i <> PageIndex) then
TForm1(Objects[i]).DestroyHandle;
end;
http://delphiworld.narod.ru/ DelphiWorld 6.0
Отправить комментарий