Как уничтожить TTabSheet с активным компонентом?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Как уничтожить TTabSheet с активным компонентом?

Сообщение VirtUX » 29.09.2008 11:37:37

Собсно: во время выполнения на PageControl создаются TabSheet'ы с ListBox'ами. На нажатие Key=27 форма определяет активный (Form1.ActiveControl) контрол и его место (Form1.ActiveControl.Parent). Если это ListBox и TabSheet соответственно, то нужно уничтожить (не спрятать) TabSheet со всем содержимым.
Выдает ошибку. Как обойти это? Может мона как-то перенаправить активность на другой компонент (SetFocus не спасает)?
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Как уничтожить TTabSheet с активным компонентом?

Сообщение v-t-l » 30.09.2008 11:11:46

А назначить другой ActiveControl?
Кстати, Form1.ActiveControl.Parent внутри метода класса TForm1 - плохой стиль :) .
v-t-l
энтузиаст
 
Сообщения: 734
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: Как уничтожить TTabSheet с активным компонентом?

Сообщение VirtUX » 30.09.2008 11:36:25

v-t-l писал(а):А назначить другой ActiveControl?
Если использовать Form1.ActiveControl := (OtherComponent as TWinControl); то ошибка не исчезает :( Пишет: "Project raised exeption class 'External: SIGSEGV'" После закрытия диалога с ошибкой кидает в qtwidgets. Наверно это ошибка QT4... А GTK2 у меня не собирается под Mandriva 2009 RC2 :( Сегодня попробую поставить openSUSE 11.1 Beta1, мот там заработает...

Добавлено спустя 23 минуты 36 секунд:
Так и не понял в чем конкретно глюк, но... Если обрабатывать событие OnKeyDown, то появляется ошибка с выбросом в qtwidgets, но если обрабатывать событие OnClick или OnKeyPress, то все отлично работает и активность никуда переводить не нуна! Скорее всего баг в qtwidgets.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Как уничтожить TTabSheet с активным компонентом?

Сообщение v-t-l » 30.09.2008 14:38:13

VirtUX писал(а):Form1. := (OtherComponent as TWinControl);

а OtherComponent точно является потомком TWinControl?

И еще раз, писать Form1. в методах класса TForm1 - это обычно не смертельно, но привычка - плохая. Ты завязываешь всю работу класса на одну конкретную переменную этого класса - Form1.
Код: Выделить всё
Self.ActiveControl:=...
, а лучше
Код: Выделить всё
ActiveControl:=...


P.S. qtwidgetset пока еще сырой.
v-t-l
энтузиаст
 
Сообщения: 734
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: Как уничтожить TTabSheet с активным компонентом?

Сообщение VirtUX » 30.09.2008 16:33:18

v-t-l писал(а):а OtherComponent точно является потомком TWinControl?
Да
И еще раз, писать Form1. в методах класса TForm1 - это обычно не смертельно, но привычка - плохая
Я просто для наглядности описания конкретизировал.
qtwidgetset пока еще сырой.
Это - точно. Но пока работаю с недельку, вроде, как уже... Хотя и достают иногда некоторые глюки :) Но под KDE4 уже писать мона.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 37

Рейтинг@Mail.ru