powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / создание компонента
23 сообщений из 23, страница 1 из 1
создание компонента
    #32220292
Andrei_A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хелп
Выполняю следующее
Код: plaintext
1.
2.
3.
4.
               ArrayEdit[i]:=TEdit.Create(TabSheet01);
               ArrayEdit[i].Parent:=TabSheet01;
               ArrayEdit[i].Font.Size:= 10 ;
               ArrayEdit[i].Left:=  160 ;
               ArrayEdit[i].Top :=  88 ;


В OnShow для закладки пейдж контрола. Странно, но при создании формы в первый раз, этот метод отрабатывает, но едита не видно. При повторном запуске становится видно. Также становится видно, если сделать взибл = фолс, = тру.
Как бы сделать чтобы изначально видно было. Чего только не пробовал
...
Рейтинг: 0 / 0
создание компонента
    #32220313
Gluck99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй .Refresh в конце сделать. Пробовал?
И что значит "При повторном запуске становится видно."? В смысле через раз он отображается что ль?
...
Рейтинг: 0 / 0
создание компонента
    #32220340
Andrei_A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Refresh чего? Не через раз, а при запуске программы, при создании формы, когда вызывается первый раз TabSheetOnShow не отражается.
...
Рейтинг: 0 / 0
создание компонента
    #32220459
Speaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А закладка, случаем не та, которая текущая?

Ну так и оставь Edit.Visible := True;.
...
Рейтинг: 0 / 0
создание компонента
    #32220696
m_kus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну дак он сначала рисует (пока компонент не создан), а потом выполняет OnShow, поэтому, как советует Gluk99 надо сделать Refresh.
Код: plaintext
TabSheet01.Refresh;

или
Код: plaintext
TabSheet01.Updadte;

или Invalidate или Paint - попробовать, а лучше почитать описания для всех этих методов... Если не помогает - Form.Refresh...
А вообще, наверное, лучше создать эти TEdit-ы заранее, например на PageControl.OnChange
...
Рейтинг: 0 / 0
создание компонента
    #32220756
Andrei_A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык когда вызывать то TabSheet01.Refresh;

Там же???? В On Show ????? Куда бы пристроить их....
...
Рейтинг: 0 / 0
создание компонента
    #32220831
m_kus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну да, там же в OnShow можешь попробовать, но это как-то криво (два раза рисовать будет)... В конце, после приведённого тобой кода... А можешь, кстати и
Код: plaintext
ArrayEdit[i].Paint
попробовать...
...
Рейтинг: 0 / 0
создание компонента
    #32220876
Andrei_A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не помогает. ПРобовал в том же методе и рефреши и репаинты, и сетфокус, и брингтофронт
...
Рейтинг: 0 / 0
создание компонента
    #32220942
m_kus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ага. Вот как... Ну а если в PageControl.onChange а не в OnShow добавлять?
...
Рейтинг: 0 / 0
создание компонента
    #32220948
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а почему не в формовском оншоу?
делай там, какая тебе разница, у меня все работает таким образом.
...
Рейтинг: 0 / 0
создание компонента
    #32221085
Andrei_A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а почему не в формовском оншоу?
Дык мне то надо при показе закладки а не формы. Это вопрос равнасилен - а почему не при создании в дизайнере.
...
Рейтинг: 0 / 0
создание компонента
    #32221088
alex_k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если создать заранее, а показывать через visible?
...
Рейтинг: 0 / 0
создание компонента
    #32221241
Gluck99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понял я кажется в чем дело.
У тебя OnShow не работает, т.к. скорее всего твоя закладка, на которой должен появится Эдит, по умолчанию в фокусе, т.е. в дизайнере Дельфы она у тебя активная. При создании PageControl'a метод OnShow для закладки в фокусе не вызывается, => и не создается Эдит.
Что можно сделать:
1) Попробовать определить OnCreate PageControl'a, что муторно.
2) Сделать еще одну невидимую закладку и фокус установить изначально на нее, а потом, после того как у тебя принимается решение, что где и как должно создаваться делать примерно так:
Код: plaintext
1.
PageControl.ActivePageIndex :=  0 ;
        PageControl.ActivePageIndex :=  1 ;

Где 0 - индекс невидимой закладки, а 1 - твоей, на которой Эдит должен создаваться.
...
Рейтинг: 0 / 0
создание компонента
    #32221341
Andrei_A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Gluck99:
Да уж.Стал бы я бойду разводить тут. Уж первым делом то я пошагово проверил запускается ли. И если бы не запускалось, то смена визибле на фол, тру чтобы отражала - не созданный едит????
И еще сразу - делать после создания визибле тру не помогает. Именно на форме сделал кнопку делать видимым невидимым - тогда показывается. Иначе не отрисовывается.
...
Рейтинг: 0 / 0
создание компонента
    #32221498
Gluck99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то тут не то.
Вот этот код у меня работает замечательно:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
procedure TForm1.TabSheet2Show(Sender: TObject);
    var
        Edit: TEdit;
begin
           Edit := TEdit.Create(TabSheet2);
           Edit.Parent := TabSheet2;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
        PageControl1.ActivePageIndex :=  0 ;
        PageControl1.ActivePageIndex :=  1 ;
end;


Показывается все сразу при старте формы. Если FormShow не вызывать, то Эдит не создается, но при смене туда-сюда фокуса закладки он создается нормально.

Тебе это надо, или я что-то не понимаю? Объясни может подробнее. При чем тут Visible Edit'a? Я что-то не пойму.
...
Рейтинг: 0 / 0
создание компонента
    #32221780
Фотография distinger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А попробуй так:
Код: plaintext
TabSheet01.InsertComponent(ArrayEdit[i]) 

или
Код: plaintext
TabSheet01.InsertControl(ArrayEdit[i]) 


Хрен его знает, вдруг поможет :)
...
Рейтинг: 0 / 0
создание компонента
    #32221832
Andrei_A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Gluck99:
Показывается все сразу при старте формы. Если FormShow не вызывать, то Эдит не создается, но при смене туда-сюда фокуса закладки он создается нормально.

У меня при создании формы стопудово вызывается оншоу, проверял в дебагере, и еще раз говорю, если он бы не создался, то при попытке сделать его невидимым - видимым - вылетал бы ексепшион.

Юзать FormShow(Sender: TObject);
тоже не катит - это значит при каждом показе формы я буду в итоге получать первую закладку - не выход.
...
Рейтинг: 0 / 0
создание компонента
    #32221844
Speaker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно, я скопировал твой код и получилась такая же фигня.
Показываем форму - не видно, переключаем закладку туда-обратно,
тогда показывается. В результате поставил Edit.Visible := True;
и все стало нормально...
...
Рейтинг: 0 / 0
создание компонента
    #32222498
Gluck99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык...
Не понимаю я опять - "Если FormShow не вызывать, то Эдит не создается" - естесственно не создается, т.к. onShow TabSheet'a не вызывается ! OnShow только при смене закладок отрабатывает.

Или вот: "Юзать FormShow(Sender: TObject); тоже не катит - это значит при каждом показе формы я буду в итоге получать первую закладку - не выход." Ну почему же первую? В OnShow формы поставь PageControl1.ActivePageIndex := N; где N - номер твоей закладки (0 - первая закладка, 1 - вторая и т.д.). ВСЁ!

А в дебагере не знаю что ты смотрел - не должно такого быть. Либо мы с тобой о разном говорим (что вряд ли), либо ты так и не понял, что я хочу сказать (что надеюсь тоже неправда =) ).
Сделай новый проект и помести туда мой код - увидишь все заработает. Это чуток кривовато, зато просто.

Удачи.
...
Рейтинг: 0 / 0
создание компонента
    #32222678
Дмитрий Мыльников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То? xnj Edit1.Parent:=TabSheet правильно, а вот то, что Edit1:=TEdit1.Create(TabSheet) по моему не правильно. На сколько я помню, у самого TabSheet своего Hadle окна нет и он использует Handle от PageControl. Возможно, что нужно написать что-то типа Edit1:=TEdit1.Create(PageControl)

Видимо при переключении закладки, когда TabSheet повторно активизируется, он переназначает Ownera на PageControl и после этого Edit1 начинает рисоваться.

Хотя, я не знаю, почему у Вас не работает. Версия Delphi какая? Я пробовал на Delpi 5.0 с установленным SP1. У меня всё работает. И создаётся и отображается с первого раза. Правда, на форме есть ещё и другие компоненты.
...
Рейтинг: 0 / 0
создание компонента
    #32223579
Andrei_A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Speaker: Edit.Visible := True;
Говорил - не помогает.

TO Gluck99: естесственно не создается, т.к. onShow TabSheet'a не вызывается! OnShow только при смене закладок отрабатывает.

Тебе надо чтобы толпа народу подтвердила. Новый проект, там пейдж контрол.
Первая закладка текущая.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 procedure TForm1.TabSheet1Show(Sender: TObject);
var Edit : TEdit;
begin
  ShowMessage('Show');
  Edit := TEdit.Create(TabSheet1);
  Edit.Parent := TabSheet1;
  Edit.Visible:=True;
end;


Запускаю прогу. Вылетает мессага - что метод Шоу был запущен. Догоняешь -ЗАПУЩЕН. Закладка то первая рисоваться должна же.
Едит создан но его не видно!!! Енто тебе уже и другие говорят.

TO Дмитрий Мыльников
Не помогло..

Вообщем если других варианто в нет........
...
Рейтинг: 0 / 0
создание компонента
    #32223600
Andrei_A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообщем я ушел от такого варианта. Всем спасибо. Если кому-то самому не интересен данный факт - предлагаю закрыть дискуссию.
...
Рейтинг: 0 / 0
создание компонента
    #32223631
Gluck99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Andrei_A
Да, согласен, я к чертям все события перепутал. =\

Но принципиально это не меняет мое решение - криво но работает.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / создание компонента
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]