Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.01.02;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.004 c
2-1286617311
Первокурсница
2010-10-09 13:41
2011.01.02
При щелчке на ячейке DBGrid загружать изображение в Image1 из БД


15-1279792599
Baks
2010-07-22 13:56
2011.01.02
Посоветуйте платный хостинг


2-1286343206
картман
2010-10-06 09:33
2011.01.02
dataset->file


15-1284928164
Юрий
2010-09-20 00:29
2011.01.02
С днем рождения ! 20 сентября 2010 понедельник


2-1286306992
AnGel
2010-10-05 23:29
2011.01.02
Как создать обработчик OnMouseDown у компонента, созданного во...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский