Help_mE!
28.03.2003 15:45
НАРОД, поможите как сделать массив из объектов в Дельфях!!!!
Допустим, у меня на форме 10 Эдитов.. надо что бы они принадлежали массиву A ... первый едит - А[1]... и так далее.. и чтобы я мог обращатся к ним так - допустимм A[4].text:='ага гаа' !!!!!!!!
Допустим у тебя на форме стоит 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!';
Робята, а зачем нужен массив Editов? Не проще ли работать с ними по отдельности?
Нет не проще, представим себе, что этих Edit'ов стоит например 100, а операции над ними надо сделать однотипные, например надо все очистить - тогда можно написать компактный код:
for i:=0 to 99 do MyArray[i].text:='';
Если таких массовых операций много, то можно сделать код значительно компактнее.
Дак, ведь обычно имена-то у них разные. Если на форме 100 Edit'ов и у всех имена Editxx, то в них без поллитры не разберешся, а если разберешся, то утром все равно не вспомнишь.
___ALex___
11.10.2003 12:12
SAB
написано же было - это делается для удобства и компактности кода
Nightmare
11.10.2003 14:21
Если нужно сделать одотипные операции, то порождаешь объект от TEdit и добовляешь обработчик своего события.
___ALex___
12.10.2003 0:51
Nightmare
ты о чём?
ты видимо не догоняешь...
Nightmare
12.10.2003 13:07
Я о том, для чего был нужен этот массив.
___ALex___
12.10.2003 13:54
да о чём мы?
автор спросил, что ему надо было, ему ответили, стало быть зачем-то надо было, это в конце концов его проблемы ;)
Nightmare
12.10.2003 19:38
Ладно, проехали.
Это кусок кода моей программы учета кабелей
с генерацией динамических компонентов
которые изображ муфты
-=-=-=-=-=-=
перед их генерацией программа находит их
в базе данных
-=-=-=-=--=
муфты(компоненты) находяться в массиве
-=-=-=-=-=-=
Код
{
генерируем найденные данные в виде панелек муфт
}
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;
{
Выборка динамического компонента из массива и его изничтожение как
компонента, а так же из базы данных
}
: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___
12.10.2003 23:29
кому это байда нужна, сабж вроде как уже проехали
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста,
нажмите сюда.