Текущий архив: 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