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

Вниз

PageControl и onShow   Найти похожие ветки 

 
faiwer ©   (2010-10-06 19:19) [0]

Доброго времени суток. Обнаружил досадный баг в TPageControl, адекватное решение которому я так и не нашёл.

Тестовый вариант: на форме TPageControl с X вкладками. Всем вкладкам назначен обработчик события Show следующего вида:

procedure TMainF.TabSheet1Show(Sender: TObject);
begin
 Button.Parent:=TWinControl(Sender); // кнопка для примера
end;


При загрузке формы назначается активная вкладка:

procedure TMainF.FormCreate(Sender: TObject);
begin
 PageControl.ActivePageIndex:=1; // 1 для примера
end;


Проверял поэтапно - Parent меняется, свойства Visible вкладки и компонентов равны true, но они (в примере - кнопка) не отображаются после загрузки формы, только если покликать после загрузки.

Нашёл недо-решение:

procedure TMainF.FormCreate(Sender: TObject);
begin
 Button1.parent:=PageControl.Pages[1];
 PageControl.ActivePageIndex:=1; // 1 для примера
end;


Но это решение меня не устраивает, так как оно не действует на TAdvStringGrid... Остаётся разве что таймером грузить, но хотелось бы более валидный код.

P.S. D2010, W7


 
faiwer ©   (2010-10-06 21:55) [1]

Ещё 1 особенность. Если перемещаемые компоненты изначально находятся просто на форме, то выскакивает некая "List index out of bounds (1)". Стоит поместить их на какую нибудь левую панельку, как грузится всё без ошибок, но также не отображается... бред какой то.


 
Anatoly Podgoretsky ©   (2010-10-06 22:00) [2]

> faiwer  (06.10.2010 21:55:01)  [1]

У тебя ошибка в программе.


 
faiwer ©   (2010-10-06 22:07) [3]


> У тебя ошибка в программе.


Ошибка в двух строчках?

procedure TForm1.FormCreate(Sender: TObject);
begin
 pagecontrol1.ActivePage:=TabSheet2;
end;

procedure TForm1.TabSheet1Show(Sender: TObject);
begin
 Button1.Parent:=TWinControl(sender);
end;


Пересоздал проект, две строчки кода, 2 компоненты - PageControl и Button, в PageControl-е две вкладки. На первой кнопка... где ошибка?) Вот сам тестовый проект (6 КБ) http://faiwer.ru/temp/test_pagecontrol.rar


 
Leonid Troyanovsky ©   (2010-10-06 22:25) [4]


> faiwer ©   (06.10.10 22:07) [3]

> Ошибка в двух строчках?

М.б., в двух строках - две ошибки?

--
Regards, LVT.


 
faiwer ©   (2010-10-06 22:29) [5]


> М.б., в двух строках - две ошибки?


Чудесно ) Вы бы мне их ещё назвали, а то "моя не понимать", в чём не дело )
Пока решил дело так:

procedure TForm1.TabSheet1Show(Sender: TObject);
begin
 Button1.parent:=self;
 Button1.Parent:=TWinControl(sender);
end;


Идиотское решение, но работает


 
Leonid Troyanovsky ©   (2010-10-06 22:44) [6]


> faiwer ©   (06.10.10 22:29) [5]

> Чудесно ) Вы бы мне их ещё назвали, а то "моя не понимать"

Ну, да.
И в одной строке могут быть две ошибки.

--
Regards, LVT.


 
faiwer ©   (2010-10-06 22:46) [7]

Я конечно понимаю, что это delphimaster.ru, но можно всё же по существу? :)


 
И. Павел ©   (2010-10-07 07:57) [8]

> [0] faiwer ©   (06.10.10 19:19)

Можеь поможет Panel, растянутая на всю вкладку?
В качестве parent будет фигурировать уже она.
D2010 у меня нет, но на Delphi 7 это помогало с TabedNotebook, правда проблема там была другая.

Еще проверьте в TabSheet1Show, действительно ли Sender - то, что вам нужно: (Sender AS T...Sheet)

А так: если это действительно глюк - напишите в embarcodero и ждите обновления.


 
faiwer ©   (2010-10-07 11:03) [9]


> Можеь поможет Panel, растянутая на всю вкладку?
> В качестве parent будет фигурировать уже она.


Такого рода решение я уже нашёл ) Дважды заменить Parent в событии OnShow:

procedure TForm1.TabSheet1Show(Sender: TObject);
begin
Button1.parent:=self;
Button1.Parent:=TWinControl(sender);
end;



> Еще проверьте в TabSheet1Show, действительно ли Sender -
> то, что вам нужно: (Sender AS T...Sheet)


Проверял, в Sender то, что мне нужно.


> А так: если это действительно глюк - напишите в embarcodero
> и ждите обновления.


Спс, я тоже думаю, что глюк, отпишу


 
_Юрий   (2010-10-07 19:30) [10]

TTabSheet.OnShow Event

Occurs when the TabVisible property changes to true.

Description
Write an OnShow event handler to take specific action when the tab sheet appears in its page control after being temporarily hidden.



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

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

Наверх




Память: 0.49 MB
Время: 0.009 c
15-1285062621
DiamondShark
2010-09-21 13:50
2011.01.02
3Д-экшон суть такова...


11-1227521066
Dy1
2008-11-24 13:04
2011.01.02
юникод


2-1286751023
DROWSY
2010-10-11 02:50
2011.01.02
Посоветуйте как организовать ввод в таблицу.


2-1286375678
AnGel
2010-10-06 18:34
2011.01.02
как узнатьть на какой созданный компонент нажал пользователь?


6-1232800121
DmitryG.
2009-01-24 15:28
2011.01.02
Проверка существования ресурса через TIdHTTP