НАРОД, поможите как сделать массив из объектов в Дельфях!!!! Допустим, у меня на форме 10 Эдитов.. надо что бы они принадлежали массиву A ... первый едит - А[1]... и так далее.. и чтобы я мог обращатся к ним так - допустимм A[4].text:='ага гаа' !!!!!!!!
Нет не проще, представим себе, что этих Edit'ов стоит например 100, а операции над ними надо сделать однотипные, например надо все очистить - тогда можно написать компактный код:
for i:=0 to 99 do MyArray[i].text:='';
Если таких массовых операций много, то можно сделать код значительно компактнее.
Дак, ведь обычно имена-то у них разные. Если на форме 100 Edit'ов и у всех имена Editxx, то в них без поллитры не разберешся, а если разберешся, то утром все равно не вспомнишь.
Это кусок кода моей программы учета кабелей с генерацией динамических компонентов которые изображ муфты -=-=-=-=-=-= перед их генерацией программа находит их в базе данных -=-=-=-=--= муфты(компоненты) находяться в массиве -=-=-=-=-=-=
Код
{ генерируем найденные данные в виде панелек муфт } c:=Form7.Query1.FieldByName('Number').asInteger; c1:=Form7.Query1.FieldByName('Number').asString; // значение из активного поля колонки Number
For i:=1 to Form7.Query1.RecordCount do begin MyPan[c] := TPanel.Create(Image1); MyPan[c].Name:='Pan' + c1; // генерируем имя компонента
MyPan[c].height := 10; MyPan[c].width := 10; MyPan[c].BevelInner:=bvLowered; MyPan[c].caption :=Form7.Query1.FieldByName('Number').asString; MyPan[c].Cursor:=crHandPoint; MyPan[c].Color:=clWhite; // button1.Hint:='Hello Word'; // button1.ShowHint:=true; // Application.HintColor:=clAqua; Application.HintHidePause:=7500; MyPan[c].Hint:='Муфта '+Form7.Query1.FieldByName('NameMuf').asString+#13+#10+'расстояние от ТП '+Form7.Query1.FieldByName('LonFroTP').asString+#13+#10+'растояние до ТП '+Form7.Query1.FieldByName('LonGoTP').asString; MyPan[c].ShowHint:=True; MyPan[c].PopupMenu:=PopupMenu1; MyPan[c].left:=Form7.Query1.FieldByName('Mous_X').asInteger; MyPan[c].top:=Form7.Query1.FieldByName('Mous_Y').asInteger; MyPan[c].Parent :=ScrollBox1; MyPan[c].OnMouseMove:=MyPanMouseMov; MyPan[c].OnClick:=MyPanOnCl; Form7.Image1.Left:=0; Form7.Image1.Top:=0; Form7.Query1.Next; // следующая запись c:=Form7.Query1.FieldByName('Number').asInteger; c1:=Form7.Query1.FieldByName('Number').asString; end; end else exit; Block:=False; end; { Обработка события Движен Мыши над динамич панельками } Procedure TForm7.MyPanMouseMov(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin Form7.Add1.Enabled:=False; Form7.Del1.Enabled:=True; // Label1.Caption:=((Sender as TPanel).Name); StatusBar1.Panels[4].Text:=((Sender as TPanel).Caption); { Вот тут самое интересное если бы не наткнулся на эту строку то долго бы еще парился как определить из какого динамичексго компонента пришло событие Sender --- отправитель } (Sender as TPanel).Color:=clRed; end;
{ Выборка динамического компонента из массива и его изничтожение как компонента, а так же из базы данных }
Сообщение отредактировано: volvo -
--------------------
Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы. МЕРФИ --------------------- RTFM - Read the fucking manual --------------------- http://www.livejournal.com/users/lonley_raven/
:D -=-=-=-= а вот предварительная генерация его по обработке события щелчка мышки правой кнопки по полю Image =-=-=-
Код
private { Private declarations }
public MyPan : array[1..99]of Tpanel; { Опишем массив в сотню Компонентов -1 класса TPanel } MufFilNames:String; //-------------- end;
Const PsevBas : array [0..5] of String = ('z','v','s','k','l','c'); var Form7: TForm7; wx,wy:Integer;{Доступность переменных в разных формах} MyPanMouseMov:TMouseMoveEvent; MyPanOnCl:TNotifyEvent; implementation
uses lbsd2, lbsd8, LBSD10;
{$R *.dfm}
{ Монстрячим динамический компонент класса TPanel } procedure TForm7.Add1Click(Sender: TObject); Var Numb:Integer; MufFilN:String; begin Form7.Query1.Last; Numb:=Form7.Query1.FieldByName('Number').asInteger; { получаем количество записей в компоненте Query (количество найденых записей) } Numb:=Numb+1; { получаем следующий номер муфты (нового компонента) } MyPan[Numb] := TPanel.Create(Image1); { динамический компонент класса TPanel конструктор на событие Create (Создать) от компонента Inmage1 то есть получаем его свойства (задаем владельца нового компонента) } with MyPan[Numb] do BEGIN Parent :=ScrollBox1; // родитель компонента height := 4; // работает width := 4; // с новым caption := 'M'; // компонентом Cursor:=crHandPoint; Color:=clLime; left:=wx+Image1.Left; top:=wy+Image1.Top; END; { при создании нового компонента пишем его место расположения, имя номер и т.д в базу данных } With Form7.Table1 do begin Append; FieldByName('Number').AsInteger:=Numb; FieldByName('NameMuf').AsString:=Form7.NameMuft.Text; FieldByName('Lines').AsString:=ilLine.Caption; FieldByName('Fiders').AsString:=ilFider.Caption;
MufFilN:=ilLine.Caption+ilFider.Caption+'MufIm'+ FieldByName('Number').AsString+PsevBas[Form2.IndexBas]; FieldByName('MufZaoz').AsString:=MufFilN; FieldByName('LonFroTp').AsInteger:=StrToInt(Form7.ot_TP.Text); FieldByName('LonGoTp').AsInteger:=StrToInt(Form7.k_TP.Text); FieldByName('Im_X').AsInteger:=Image1.Left; FieldByName('Im_Y').AsInteger:=Image1.Top; FieldByName('Mous_X').AsInteger:=wx; FieldByName('Mous_Y').AsInteger:=wy; Post; end; { после генерации панели создаем новую запись в базе данных и пишем туда данные } end;
Сообщение отредактировано: volvo -
--------------------
Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы. МЕРФИ --------------------- RTFM - Read the fucking manual --------------------- http://www.livejournal.com/users/lonley_raven/