Помощь - Поиск - Пользователи - Календарь
Полная версия: Массив объектов!
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
Help_mE!
НАРОД, поможите как сделать массив из объектов в Дельфях!!!!
Допустим, у меня на форме 10 Эдитов.. надо что бы они принадлежали массиву A ... первый едит - А[1]... и так далее.. и чтобы я мог обращатся к ним так - допустимм A[4].text:='ага гаа' !!!!!!!!
Vit
Допустим у тебя на форме стоит 10 Edit'ов - Edit1..Edit10

Тогда объявляем массив:

Var e:array[1..10] of TEdit;

Заполняем массив:

For i:=1 to 10 do
 E[i]:=FindComponent('Edit'+inttostr(i)) as TEdit;

Теперь наслаждаемся работой с массивом:

e[5].text:='It is me!';
SAB
Робята, а зачем нужен массив Editов? Не проще ли работать с ними по отдельности?
Vit
Нет не проще, представим себе, что этих Edit'ов стоит например 100, а операции над ними надо сделать однотипные, например надо все очистить - тогда можно написать компактный код:

for i:=0 to 99 do MyArray[i].text:='';

Если таких массовых операций много, то можно сделать код значительно компактнее.
SAB
Дак, ведь обычно имена-то у них разные. Если на форме 100 Edit'ов и у всех имена Editxx, то в них без поллитры не разберешся, а если разберешся, то утром все равно не вспомнишь.
___ALex___
SAB
написано же было - это делается для удобства и компактности кода
Nightmare
Если нужно сделать одотипные операции, то порождаешь объект от TEdit и добовляешь обработчик своего события.
___ALex___
Nightmare
ты о чём?
ты видимо не догоняешь...
Nightmare
Я о том, для чего был нужен этот массив.
___ALex___
да о чём мы?
автор спросил, что ему надо было, ему ответили, стало быть зачем-то надо было, это в конце концов его проблемы ;)
Nightmare
Ладно, проехали.
Shadow
Это кусок кода моей программы учета кабелей
с генерацией динамических компонентов
которые изображ муфты
-=-=-=-=-=-=
перед их генерацией программа находит их
в базе данных
-=-=-=-=--=
муфты(компоненты) находяться в массиве
-=-=-=-=-=-=

Код

{
 генерируем найденные данные в виде панелек муфт
}
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;

{
Выборка динамического компонента из массива и его изничтожение как
компонента, а так же из базы данных
}
Shadow
: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;
___ALex___
кому это байда нужна, сабж вроде как уже проехали
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.