2013-03-06 8 views
0

Я создаю компонент во время выполнения, но у меня проблема, потому что, когда я создаю 2 из этих компонентов, я бы изменил значение свойств на одном из них, но, похоже, также изменил его на Другие.Delphi Component Runtime Creation

Как создать компоненты во время выполнения, чтобы они были отдельными компонентами, а не экземплярами eachother?

Хорошо, так что это код, который я использую для создания компонента.

Cell[CellCount]:= TBattery.Create(nil); 
Cell[CellCount].Top := Random(500);  
Cell[CellCount].Left := Random(500); 
Cell[CellCount].Parent := Self; 
Cell[CellCount].ID := CellCount; 
CellCount := CellCount + 1;  

Я использую графику GDI для рисования линий между несколькими экземплярами TBattery. Проблема, с которой я сталкиваюсь; если я создаю два компонента, то добавьте третье, когда я перемещаю третий, линии натягиваются на этот, а не на второй компонент.

Я загрузил исходные файлы, я уверен, что многое из этого не будет иметь смысла, и моя реализация может быть плохой, но любая помощь приветствуется! Заранее спасибо

http://pastebin.com/8WUkT1rw

http://pastebin.com/BpASvc7N

Они являются частью электрической тренажере схемы для моего школьного проекта, если это помогает понять, что код для: s

+2

Показанный код создает только один. Это в петле? Лучше, если вы включите в свой вопрос весь соответствующий код, включая объявление массива ячеек. С другой стороны, это может быть ошибка в классе TBattery, этот класс разработан вами? – jachguate

+4

Пожалуйста, сообщите нам достаточно кода, чтобы воспроизвести вашу проблему. Не стесняйтесь! –

+1

Почему это помечено как C, когда оно, похоже, не имеет ничего общего с языком C? –

ответ

0

Простое создание среды выполнения компонента ...

сначала создайте блок второй создать процедуру ex

procedure Label_Comp(Location: TWinControl; Text: String; Label_Left,Label_Top,Numofcomp: Integer; NameOwn: string; Label_Autosize,Label_FontBold,Label_Trans: Boolean); 

добавить в вар

var 
MyLabel: TsLabel; 

, а затем код процедуры

procedure Label_Comp(Location: TWinControl; Text: String;    
    Label_Left,Label_Top,Numofcomp: Integer; NameOwn: string;                
    Label_Autosize,Label_FontBold,Label_Trans: Boolean); 
begin 
MyLabel := TLabel.Create(main); 
MyLabel.Name := 'Label' + NameOwn + IntToStr(Numofcomp); 
MyLabel.Parent := Location; 
MyLabel.Caption := Text; 
MyLabel.Left := Label_Left; 
MyLabel.Top := Label_Top; 
MyLabel.Font.Name := 'Tahoma'; 
MyLabel.Font.Size := 8; 
MyLabel.Font.Color := clWindowText; 
MyLabel.AutoSize := Label_Autosize; 
if Label_FontBold = True then 
    MyLabel.Font.Style := MyLabel.Font.Style + [fsBold]; 
MyLabel.Transparent := Label_Trans; 
MyLabel.Visible := True; 
end; 

и вызывать его из вашей программы, как вы хотите экс

for i := 0 to 10 do 
Label_Comp(main.panelBattery,'Exit',90,24,i,'',True,True,True); 

Проблема здесь следует помнить i-й atement ...

Надеюсь, я помогу ...