Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Копирование вкладки с PageControl'а


Delp ©   (2010-04-12 19:45:00) 

Приветствую!
Имеется два PageControl'а: PageControl1 и PageControl2
Подскажите пожалуйста как можно скопировать вкладку с PageControl1 на PageControl2?
Следующий код просто переносит вкладку:

var t:TTabSheet;
begin
 t:= TTabSheet.Create(form1);
 t:= PageControl1.Pages[0];
 t.pagecontrol:= pagecontrol2;
end;


Плохиш   (2010-04-13 20:05:00) [1]


> Но это, о.х., все равно, не то, что на самом деле хотелось
> автору,

Думаю, как раз этого автору и не хватает, т.к. в InsertControl не устанавливается свойство Parent вставляемого контрола :-)


Leonid Troyanovsky   (2010-04-13 19:53:00) [2]


> Плохиш ©   (13.04.10 19:38) [10]

> Борланд говорит "Applications should not need to call InsertControl
> directly."

Т.е., после вызова IC обязан уже компилятор.
Но это, о.х., все равно, не то, что на самом деле хотелось автору,
IMHO.

--
Regards, LVT.


Плохиш   (2010-04-13 19:38:00) [3]

Интересно, где их учат?
Борланд говорит "Applications should not need to call InsertControl directly."


Leonid Troyanovsky   (2010-04-13 19:32:00) [4]


> Плохиш ©   (13.04.10 18:54) [6]

> Я бы для начала порекомендовал назначить требуемый Parent
> созданному компоненту.

Неназначенные не имели б, IMHO, проблем с:

> com.Items.Add((form1.Components[i] as TComboBox).Items.Strings[j]);

--
Regards, LVT.


Delp   (2010-04-13 19:24:00) [5]

Всё, всем отвечающим спасибо, вопрос снят.
Дело в том, что практически всё создаю в рантайме, поэтому сначало надо всё создать и сразу внести на форму (то есть выполнить insertcontrol). После этого всё стало работать.


Delp   (2010-04-13 19:02:00) [6]

Как выяснилось проблема возникает из-за того, что я вставляю его в groupbox. При вставке на форме всё работает нормально, но хотелось вы вставить именно в groupbox.


Плохиш   (2010-04-13 18:54:00) [7]


> Т.е., перенести обсуждаемый код туда, где Control has parent
> window.
> Например, в parent's CreateWnd, override.
>

Я бы для начала порекомендовал назначить требуемый Parent созданному компоненту. Ну и ещё, для самого начала, прочитать справку про свойство Parent.


Leonid Troyanovsky   (2010-04-13 18:48:00) [8]


> Delp ©   (13.04.10 18:29) [3]

> Решил просто скопировать компоненты с одной вкладки на другую,
>  тут встретился с одной проблемой. Не получается добавить
> строки в динамически созданный combobox, вылетает ошибка
> "Control '' has no parent window".
> Вот кусок кода:
>
> for j:=0 to (form1.components[i] as TComboBox).Items.Count-
> 1 do
>  begin
>   com.Items.Add((form1.Components[i] as TComboBox).Items.
> Strings[j]);// - здесь вылетает ошибка
>  end;

Тут просто так, с кондачка, нельзя.
Тут книжки всякие умные надо почитать ..
инквизиция и ее пытки (С)

1. form1. - некошерно. Пусть уж Self, или, во-ще, ничего - писать короче.
2. Если уж найден components[i] as TComboBox, то дальнейшие
as .. - излишни.
3. Если вылетела оная ошибка, то, дейс-но, Control '' has no parent window.

Т.е., перенести обсуждаемый код туда, где Control has parent window.
Например, в parent's CreateWnd, override.

--
Regards, LVT.


Delp   (2010-04-13 18:37:00) [9]

Вот, более полный код:

if form1.Components[i].ClassName='TComboBox' then
       begin
         com:= TComboBox.Create(TargetPage);
         com.Left:= (form1.components[i] as TComboBox).Left;
         com.Top:= (form1.components[i] as TComboBox).Top;
         com.Width:= (form1.components[i] as TComboBox).Width;
         com.Font:= (form1.components[i] as TComboBox).Font;
         //com.Name:= (form1.components[i] as TComboBox).Name;
         if (form1.Components[i] as TComboBox).Parent.Name='GroupBox2' then gr.InsertControl(com)
           else
         if (form1.Components[i] as TComboBox).Parent.Name='GroupBox1' then gr1.InsertControl(com);
         //вот здесь пытаюсь добавлять строки в созданный combobox
         for j:=0 to (form1.components[i] as TComboBox).Items.Count-1 do
           begin
             com.Items.Add((form1.Components[i] as TComboBox).Items.Strings[j]);
           end;
       end;


Delp   (2010-04-13 18:29:00) [10]

Решил просто скопировать компоненты с одной вкладки на другую, тут встретился с одной проблемой. Не получается добавить строки в динамически созданный combobox, вылетает ошибка "Control '' has no parent window".
Вот кусок кода:

for j:=0 to (form1.components[i] as TComboBox).Items.Count-1 do
 begin
  com.Items.Add((form1.Components[i] as TComboBox).Items.Strings[j]);// - здесь вылетает ошибка
 end;


~AQUARIUS~   (2010-04-12 20:37:00) [11]

Попробуйте поекспериментировать с TMemoryStream.WriteComponent / TMemoryStream.ReadComponent


Плохиш   (2010-04-12 20:15:00) [12]

Одной команды нет, придётся код писать.


Наверх

Титульная страница Поиск, карта сайта Написать письмо