Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизТеряется ссылка на 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.068 c