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

Вниз

Копирование вкладки с PageControl а   Найти похожие ветки 

 
Delp ©   (2010-04-12 19:45) [0]

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

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



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

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


 
~AQUARIUS~ ©   (2010-04-12 20:37) [2]

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


 
Delp ©   (2010-04-13 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;


 
Delp ©   (2010-04-13 18:37) [4]

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

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;


 
Leonid Troyanovsky ©   (2010-04-13 18:48) [5]


> 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.


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


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

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


 
Delp ©   (2010-04-13 19:02) [7]

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


 
Delp ©   (2010-04-13 19:24) [8]

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


 
Leonid Troyanovsky ©   (2010-04-13 19:32) [9]


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

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

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

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

--
Regards, LVT.


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

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


 
Leonid Troyanovsky ©   (2010-04-13 19:53) [11]


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

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

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

--
Regards, LVT.


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


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

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



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

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

Наверх




Память: 0.5 MB
Время: 0.007 c
11-1210765847
Vinum
2008-05-14 15:50
2011.11.06
StringGrid+DateTimePicker


15-1310117366
Bober1
2011-07-08 13:29
2011.11.06
service application


15-1310284397
@!!ex
2011-07-10 11:53
2011.11.06
Как делать небольшие смс рассылки?


15-1310243395
Юрий
2011-07-10 00:29
2011.11.06
С днем рождения ! 10 июля 2011 воскресенье


1-1271942672
Delpherrr
2010-04-22 17:24
2011.11.06
Как изменить TextHeight формы в RunTime?