Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Теряется ссылка на TabSheet   Найти похожие ветки 

 
Gedimen ©   (2012-04-08 16:30) [0]

Добрый день. Пишу из под RAD XE2. Застрял с такой проблемой.
Есть главная форма, на которой в подвале расположен PageControl. TabSheet"ы создаю автоматически, уничтожаю также. (должно получиться что-то типа заголовков открытых форм внизу главной формы. Приложение не MDI). Но тут есть проблема: "дочерних" форм у меня некоторое количество. У каждой формы в паблике объявлена переменная CurTabSheet: TTabSheet. Сделал для того, чтобы форма знала о своей вкладке и уничтожила (либо активировала ее когда необходимо). Используя такой код в обработчике создания формы:

procedure TFMain.N13Click(Sender: TObject);
var
 TabSheet: TTabSheet;
begin
 if (not Assigned(FStreet)) then // Форма списка
 begin
   FStreet := TFStreet.Create(Self);
   TabSheet := TTabSheet.Create(PControl);
   TabSheet.Caption := N13.Caption;
   TabSheet.PageControl := PControl;
   PControl.ActivePage := TabSheet;
   FStreet.CurTabSheet := TabSheet;
   FStreet.Show;
 end
 else
 begin
   SetForegroundWindow(FStreet.Handle);
   PControl.ActivePage := FStreet.CurTabSheet;
 end;
end;


все работает нормально. TabSheet создается и при закрытии формы FStreet уничтожается так:

procedure TFStreet.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
 CurTabSheet.Destroy;
 Release;
 FFStreet := nil;
end;


Но так как у меня форм много, то код получается раздутый если в обработчик создания каждой формы прописывать инструкцию для создания вкладок. Решил их вынести в отдельную функцию (процедуру, пробовал по разному).


function TFMain.G_CreateTabSheet(tabCaption: string):TTabSheet;
var
 TabSheet: TTabSheet;
begin
   TabSheet := TTabSheet.Create(Fmain.PControl);
   TabSheet.Caption := tabCaption;
   TabSheet.PageControl := Fmain.PControl;
   Fmain.PControl.ActivePage := TabSheet;

   Result:=TabSheet;
end;


А вот так любые манипуляции с переменной CurTabSheet формы FStreet приводят к исключительной ситуации.

Создаю форму:

TFMain.N13Click(Sender: TObject);
var
 TabSheet: TTabSheet;
begin
 if (not Assigned(FStreet)) then // Форма добавления дома
 begin
   FStreet := TFStreet.Create(Self); // создание Формы)
   //Создаю вкладку
   TabSheet:=G_CreateTabSheet(N10.Caption);
   //Здесь с TabSheet"ом еще можно делать все что угодно, возвращается нормально.

    //Передаю TabSheet в переменную CurTabSheet
   FStreet.CurTabSheet := TabSheet;
   
   FStreet.Show;
 end
 else
 begin
   SetForegroundWindow(FStreet.Handle); // активируем окно
 end;
end;


Но теперь из формы FStreet нельзя манипулировать с переменной CurTabSheet. Любое действие приводит к ошибке.

В чем проблема не могу понять. Уже пол инета излазил. Такое чувство, что во втором варианте при передачи в переменную теряется ссылка на TabSheet.


 
Gedimen ©   (2012-04-08 16:54) [1]

Всем спасибо. Можно не отвечать. Волшебным образом почему-то заработало само.


 
Дмитрий С ©   (2012-04-08 17:37) [2]

в FormCloseQuery рано destroy делать еще. И вообще Free, а не Destroy.

а на каком этапе ты манипулировал с CurTabSheet ?


 
Anatoly Podgoretsky ©   (2012-04-08 18:41) [3]

> Gedimen  (08.04.2012 16:54:01)  [1]

Cтоило только сказать трах тибидох


 
Sha ©   (2012-04-08 18:52) [4]

Use TabVisible to temporarily remove a tab sheet from a page control.
When TabVisible is false, the tab does not appear in the page control and its TabIndex property is -1.
Setting TabVisible to true allows the user to see the tab of the tab sheet again.


 
Gedimen ©   (2012-04-08 18:53) [5]


> И вообще Free, а не Destroy.а на каком этапе ты манипулировал
> с CurTabSheet ?


Можно и Free. Мне главное, чтобы уничтожился.
Насчет этапа манипуляции с CurTabSheet, то выпадала ошибка при попытке (хотя бы) прочитать Caption вкладки из открытой формы FStreet, не говоря уже о Destroy или Free. Как я уже писал раньше все само собой заработало.


 
Gedimen ©   (2012-04-08 19:02) [6]


> Use TabVisible to temporarily remove a tab sheet from a
> page control. When TabVisible is false, the tab does not
> appear in the page control and its TabIndex property is
> -1. Setting TabVisible to true allows the user to see the
> tab of the tab sheet again.


It"s not that. I destroy the form at the closing. Therefore TabSheet also need to destroy.


 
Sha ©   (2012-04-08 19:21) [7]

> Gedimen ©   (08.04.12 19:02) [6]

think about it tomorrow



Страницы: 1 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.052 c
11-1245728951
Dy1
2009-06-23 07:49
2013.03.22
ComboBox в ListView


2-1348491706
Дениска
2012-09-24 17:01
2013.03.22
Кеширующий HTTP прокси сервер на основе IndyHTTPProxyServer


2-1345880723
alexdn
2012-08-25 11:45
2013.03.22
Округление


15-1336595403
Юрий
2012-05-10 00:30
2013.03.22
С днем рождения ! 10 мая 2012 четверг


8-1230645984
Б
2008-12-30 17:06
2013.03.22
Где найти DirectX SDK для Delphi?