Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.062 c
2-1337924665
leklerk
2012-05-25 09:44
2013.03.22
Отослать сообщения пользователям


8-1226309625
Andrey_ka
2008-11-10 12:33
2013.03.22
как работает PixelFormat


15-1340972066
Омлет
2012-06-29 16:14
2013.03.22
Почему в русском при отрицании [всё] = [ничего]?


15-1338124044
Loginov Dmitry
2012-05-27 17:07
2013.03.22
Лабораторные работы по языку Pascal. Методические указания


15-1330357950
CRLF
2012-02-27 19:52
2013.03.22
А что такое "порты 2В/1Р"





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский