Проблема с освобождением ресурсов 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 и ее наследникам. Быстро и грязно, но
это работает! <g>
Не волнуйтесь, если вы видите, что невидимая страница показывается снова. VCL
- довольно умная штука, поскольку захватывает данные от дескриптора окна и
сохраняет это непосредственно в объекте. Затем, всякий раз, когда дескриптор
требуется снова, то есть тогда, когда вы делаете страницу видимой, дескриптор
окна пересоздается, туда снова копируются данные, и оп-ля, как будто ничего и не
произошло - магия!
Я надеюсь это поможет.
|