Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];

Вниз

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

 
DarkLord ©   (2006-03-10 13:16) [0]

Имеется PageControl с одним TabSheet, на который, в design-time, помещены ComboBox-ы, LabeledEdit-ы и пр.
Необходимо, по нажатию кнопки, создать клон TabSheet-а со всем содержимым (контролами). Содержимое контролов можно не клонировать. Оно будет выполняться при иных условиях.
Главное условие - нормальный и лёгкий доступ в дальнейшем, к созданным TabSheet-ам и их контролам.
Доступ будет в виде процедуры, которой передается номер страницы, а она уже сама должна оперировать с контролами на этой странице.

Доп. условие - кол-во страниц переменное.

Пробовал работать через массивы компонентов, но возникают странности. Например, массив ComboBox-ов ведёт себя иначе, нежели такой же массив CheckBox-ов. Т.е. CheckBox-ы загоняются в массив, а при загоне ComboBox-ов, массив содержит nil. :(

Подозреваю, что это я лажанулся в коде, но может где-то есть что-то типа шаблона-заготовки, либо некоего компонента, дабы не изобретать веловипед.


 
Crash Coredump ©   (2006-03-10 13:55) [1]


> Необходимо, по нажатию кнопки, создать клон TabSheet-а со
> всем содержимым (контролами). Содержимое контролов можно
> не клонировать


unit main;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 ComCtrls, StdCtrls;

type
 TfMain = class(TForm)
   Button1: TButton;
   PageControl: TPageControl;
   TabSource: TTabSheet;
   Edit: TEdit;
   CheckBox: TCheckBox;
   ComboBox: TComboBox;
   procedure Button1Click(Sender: TObject);
 private
   function CloneTab(Source: TTabSheet): TTabSheet;
 end;

var
 fMain: TfMain;

implementation

{$R *.DFM}

procedure TfMain.Button1Click(Sender: TObject);
var
 Dest: TTabSheet;
begin
 Dest := CloneTab(TabSource);
end;

function TfMain.CloneTab(Source: TTabSheet): TTabSheet;
var
 I: Integer;
 Control: TControl;
begin
 Result := TTabSheet.Create (Self);
 Result.Name := Source.Name+"1";
 Result.PageControl := Source.PageControl;
 for I:=0 to Pred(Source.ControlCount) do begin
   Control := TControlClass(Source.Controls[I].ClassType).Create (Self);
   Control.Name := Source.Controls[I].Name+"1";
   Control.Parent := Result;
   Control.BoundsRect := Source.Controls[I].BoundsRect;
 end;
end;

end.


 
DarkLord ©   (2006-03-10 14:29) [2]

Спасибо! Оно. Но! Есть нехороший нюанс с LabeledEdit - неверный Caption и непонятно откуда берущееся содержимое.

И ещё вопросик: как лучше потом организовать доступ к контролам?
Если там будет десяток страниц, и по пару десятков разных контролов на странице...
Просто по Name+"номер страницы"? Или может в массивы как-то?


 
Crash Coredump ©   (2006-03-10 15:49) [3]


> Есть нехороший нюанс с LabeledEdit - неверный Caption и
> непонятно откуда берущееся содержимое.


Ничем не могу помочь - нет у меня такого компонента.


> Если там будет десяток страниц, и по пару десятков разных
> контролов на странице...


Делай у каждого контрола уникальный осмысленный Name, обращайся к нему через FindComponent - Owner"ом у них у всех все равно форма будет.
А еще у компонентов есть свойство Tag, туда тоже можно какую-то идентификацию положить.


 
DarkLord ©   (2006-03-10 19:44) [4]

И последний вопрос: как менять caption у созданных контролов, ведь он protected?

Допустим у меня Edit c именем "PriceEdit1" и капшеном "Цена". Так вот при клонировании, новому Edit-у присваивается капшен "PriceEdit1", что есть не совсем гуд :(


 
DarkLord ©   (2006-03-10 20:00) [5]

Вопрос снят. Надо было указывать класс контрола :)


 
TStas ©   (2006-03-10 20:57) [6]

А нельзя создавать и через Assign? Известны же, что за контролы на пе5рвом табе?



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

Форум: "Основная";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.057 c
15-1143267479
kilonet
2006-03-25 09:17
2006.04.16
Как обмениваться большими файлами


2-1143993406
MVP
2006-04-02 19:56
2006.04.16
Переход от экранных координат к декартовым


2-1143813820
Vasiliy
2006-03-31 18:03
2006.04.16
Не могу подцепить библиотеку .dcu компилятор требует .pas


2-1143757712
except
2006-03-31 02:28
2006.04.16
Borland Delphi 2005 не компилирует C# проги!


15-1143125776
ZeFiR
2006-03-23 17:56
2006.04.16
Преобразование картинки в ASCII символы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский