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

Вниз

Клонирование 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;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.04 c
2-1144190463
WestBronx
2006-04-05 02:41
2006.04.16
HotKeys в Windows


2-1143797397
Xmen
2006-03-31 13:29
2006.04.16
Распечатка в QuickReport


1-1142345678
tesseract
2006-03-14 17:14
2006.04.16
COM-сервер и procedural var


15-1143090734
vajo
2006-03-23 08:12
2006.04.16
USB контроллер не определяется


2-1143785171
vova_vova
2006-03-31 10:06
2006.04.16
Перевод времени





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский