Главная страница
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.008 c
2-1286617311
Первокурсница
2010-10-09 13:41
2011.01.02
При щелчке на ячейке DBGrid загружать изображение в Image1 из БД


2-1286282763
TRSteep
2010-10-05 16:46
2011.01.02
Форма для печати


15-1284841766
Юрий
2010-09-19 00:29
2011.01.02
С днем рождения ! 19 сентября 2010 воскресенье


2-1286634893
Первокурсница
2010-10-09 18:34
2011.01.02
RvProject1: сделать все page отчёта на одной page


15-1284756202
Макс Черных
2010-09-18 00:43
2011.01.02
Может кто знает название и автора рассказа?