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

Вниз

копирование компонента программно   Найти похожие ветки 

 
Volfram   (2005-12-26 18:45) [0]

есть массив TComboBox-ов, хочу чтобы каждый его элемент был копией ComboBox1, но с другими координатами


 for i:=1 to N do begin
   CBArray[i]:=ComboBox1;
   CBArray[i].Top:=...;
   CBArray[i].Left:=...;
 end;


Но на форме двигается сам ComboBox1. Т.е. как я понял, создается не копия, а ссылка на один тот же ComboBox. А как сделать именно 8 разных ComboBox но с одинаковыми свойствами (кроме координат)? Просьба сильно не пинать :)


 
Vlad ©   (2005-12-26 19:00) [1]


> Volfram   (26.12.05 18:45)  

Для этого нужно как минимум создать каждый из комбобоксов (CBArray[i]:= TCombobox.Create(Form1)). Ну а затем установить нужные свойства.


 
Volfram   (2005-12-26 19:37) [2]


for i:=1 to N do begin
  CBArray[i]:=TComboBox.Create(MainForm);
  CBArray[i]:=ComboBox1;
  CBArray[i].Top:=...;
  CBArray[i].Left:=...;
end;


работает точно так же :(


 
Vlad ©   (2005-12-26 19:41) [3]


> Volfram   (26.12.05 19:37) [2]

мдя... вижу что понимания никакого :-)

 CBArray[i]:=TComboBox.Create(MainForm); // создаем новый экземпляр комбобокса
 CBArray[i]:=ComboBox1; // присваиваем указатель на какой-то левый комбобокс (зачем???)
естественно после этого элемент массива будет содержать другой комбобокс, а не тот который ты создал сам.


 
Anatoly Podgoretsky ©   (2005-12-26 19:47) [4]

Попробуй Assign


 
Volfram   (2005-12-26 19:50) [5]

Гхм. Мне надо сделать массив ComboBox-ов, которые одинаковы во всем одиныковы, за исключением координат. Получается, что мне все нужные свойства надо задавать на N строчках? Я хотел создать некий ComboBox1, как эталон, и скопировать все его properties. Как понял, такое невозможно :(


 
Vlad ©   (2005-12-26 19:56) [6]


> Volfram   (26.12.05 19:50) [5]


> все нужные свойства надо задавать на N строчках

Один раз в цикле присвоить нужные свойства.

Можешь использовать метод Assign, но как я понимаю, его придется реализовывать самому, что опять же ведет к построчному присваиванию всех необходимых свойств объекта.


 
Джо ©   (2005-12-26 20:02) [7]

[5] Volfram   (26.12.05 19:50)
> Как понял, такое невозможно :(

Отчего невозможно? Очень даже возможно.

function MakeNewComboBasedOn (Combo: TComboBox;
 AOwner: TComponent): TComboBox;
var
 Stream: TMemoryStream;
begin
 Stream := TMemoryStream.Create;
 try
   Stream.WriteComponent(Combo);
   Stream.Position := 0;

   Result := TComboBox.Create (nil);
   Result.Parent := Combo.Parent;
   Stream.ReadComponent(Result);
 finally
   Stream.Free;
 end;
end;

Пользуем так. Пусть на форме лежит некий эталонный «комбо-бокс», назовем его cbEtalon. Кладем на форму кнопку, в обработчике вызываем приводимую функцию:

procedure TForm16.Button1Click(Sender: TObject);
var
 NewCombo: TComboBox;
begin
 NewCombo := MakeNewComboBasedOn(cbEtalon, Self);
 NewCombo.Left := 10;
 NewCombo.Top := 10;
end;

Вуаля :)


 
Джо ©   (2005-12-26 20:03) [8]


> Result := TComboBox.Create (nil);

Заменить на TComboBox.Create (AOwner), конечно.



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

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

Наверх




Память: 0.48 MB
Время: 0.048 c
2-1135602857
Fedddor
2005-12-26 16:14
2006.01.15
Подскажите плиз функцию определения дня недели по дате!


3-1132301175
Карелин Артем
2005-11-18 11:06
2006.01.15
Как получить тип поля в FireBird?


2-1135736572
ezorcist
2005-12-28 05:22
2006.01.15
Помогите написать клавиатурный шпион)


14-1134935788
QwertyKz
2005-12-18 22:56
2006.01.15
C# и дизайнер форм


2-1135500746
Максим
2005-12-25 11:52
2006.01.15
Среднее арифметическое