![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Копирование вкладки с 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]Одной команды нет, придётся код писать.