Форум: "Начинающим";
Текущий архив: 2005.12.25;
Скачать: [xml.tar.bz2];
ВнизTEdit Найти похожие ветки
← →
Evgenxxxx (2005-12-06 16:46) [0]Допустим у меня много едитов edit1, edit2,.... и с каждого мне нужно прочитать инфрмацию и занести её в массив например:
For i:=1 to n do
begin
array[i]:=edit_i.text; ???????????????????????????????????
end
как это можно реализовать?
← →
Leonid Troyanovsky © (2005-12-06 16:49) [1]
> Evgenxxxx (06.12.05 16:46)
> как это можно реализовать?
TStringGrid.
Можешь считать его Cells - массивом.
--
Regards, LVT.
← →
msguns © (2005-12-06 17:08) [2]Если все эдиты "лежат" в одном контейнере (например, панели), то в случае, если порядок по барабану, то так
j := 0;
for i := 0 to Panel1.ControlCount-1 do
if Panel1.Controls[i].ClassType=TEdit then
begin
ArrayA[j] := TEdit(Panel1.Controls[i]).Text;
inc(j);
end;
← →
Digitman © (2005-12-06 17:09) [3]
> Допустим у меня много едитов
на Луне ? или таки эти самые твои "едиты" имеют в кач-ве владельца какой-то строго определенный компонент ?
← →
EvgenXXXX (2005-12-06 18:44) [4]
> Если все эдиты "лежат" в одном контейнере (например, панели),
> то в случае, если порядок по барабану, то так
>
> j := 0;
> for i := 0 to Panel1.ControlCount-1 do
> if Panel1.Controls[i].ClassType=TEdit then
> begin
> ArrayA[j] := TEdit(Panel1.Controls[i]).Text;
> inc(j);
> end;
Все Editы находятся на разных вкладках компонента TPageControl
← →
VitGun © (2005-12-06 19:01) [5]Вот так пропробуй.
for i:=0 to form1.ComponentCount-1 do
begin
if form1.Components[i] is TEdit then
begin
Myarray[i]:=(form1.Components[i] as TEdit).Text;
end;
end;
← →
VitGun © (2005-12-06 19:08) [6]Сорри...так будет правильнее.....
j:=0;
for i:=0 to form1.ComponentCount-1 do
begin
if form1.Components[i] is TEdit then
begin
Myarray[j]:=(form1.Components[i] as TEdit).Text;
inc(j);
end;
end;
← →
Evgenxxxx (2005-12-07 08:39) [7]Как я понял из примера здесь на одном компоненте формы 1 Edit а у меня их несколько. Вся сложножность заключается в том что я не знаю заранее сколько Editов у меня будет. Это определяется программно пользователем. Поетому мне их необходимо считывать через цикл
← →
Anatoly Podgoretsky © (2005-12-07 08:45) [8]EvgenXXXX (06.12.05 18:44) [4]
Вопрос про владельца, а не где лежат.
← →
Evgenxxxx (2005-12-07 08:58) [9]Вопрос на счет владельца не понял!!! По несколько Editов лежат на разных вкладках компонента PageControl
← →
Leonid Troyanovsky © (2005-12-07 09:01) [10]
> Evgenxxxx (07.12.05 08:39) [7]
> Как я понял из примера здесь на одном компоненте формы 1
> Edit а у меня их несколько. Вся сложножность заключается
> в том что я не знаю заранее сколько Editов у меня будет.
> Это определяется программно пользователем. Поетому мне
> их необходимо считывать через цикл
with PageControl1 do
for i := 0 to PageCount-1 do
begin
for j := 0 to Pages[i].ControlCount-1 do
if Pages[i].Controls[j] is TEdit then
a[i, j] := TEdit(Pages[i].Controls[j]).Text;
end;
--
Regards, LVT.
← →
Evgenxxxx (2005-12-07 10:21) [11]Почему то не выполняется следующее условие и естественно массив не заполняется
> if Pages[i].Controls[j] is TEdit then
← →
Leonid Troyanovsky © (2005-12-07 11:24) [12]
> Evgenxxxx (07.12.05 10:21) [11]
> Почему то не выполняется следующее условие и естественно
> массив не заполняется
> > if Pages[i].Controls[j] is TEdit then
Если TEdit лежит, скажем, не непосредственно на Pages,
а, например, на TPanel, то Controls должен быть панели.
--
Regards, LVT.
← →
msguns © (2005-12-07 11:36) [13]>Leonid Troyanovsky © (07.12.05 09:01) [10]
>with PageControl1 do
for i := 0 to PageCount-1 do
begin
for j := 0 to Pages[i].ControlCount-1 do
if Pages[i].Controls[j] is TEdit then
a[i, j] := TEdit(Pages[i].Controls[j]).Text;
end;
Неверно.
Во-первых, потому что заранее неизвестно на сколько элементов резервировать массив
Во-вторых, что делать с "дырками" (эелементами, не имеющими значения, которые "появляются" от не TEdit-контролов) массива ?
ИМХО:
- считать контролы "в ряд", игнорируя иерархию, при необходимости запоминая контейнер-носитель
- вместо массива - список указателей на структуру, включая парент, если надо (см. п.1)
- переменная j для правильного отсчета найденных контролов необходима.
← →
Evgenxxxx (2005-12-07 11:40) [14]Editы лежат непосредственно на страницах PageControla (TabSheetaх)
← →
Digitman © (2005-12-07 11:47) [15]
> Editы лежат
что значит "лежат" ?
ты их в ран-тайм туда "положил" ?
ну так и демонстрируй свой код, который "наклал" Edit"ы на TabSheet"ы !
← →
Leonid Troyanovsky © (2005-12-07 11:50) [16]
> Evgenxxxx (07.12.05 11:40) [14]
> Editы лежат непосредственно на страницах PageControla
Edit какого класса?
--
Regards, LVT.
← →
Evgenxxxx (2005-12-07 11:54) [17]
> что значит "лежат" ?
Это значит расположены.
← →
Digitman © (2005-12-07 11:56) [18]
> Evgenxxxx (07.12.05 11:54) [17]
> Это значит расположены.
ну вот и показывай фрагмент кода, где ты их "располагал" ..
а из пустого в порожнее можно долго переливать)
← →
Leonid Troyanovsky © (2005-12-07 11:58) [19]
> msguns © (07.12.05 11:36) [13]
> Во-первых, потому что заранее неизвестно на сколько элементов
> резервировать массив
> Во-вторых, что делать с "дырками" (эелементами, не имеющими
> значения, которые "появляются" от не TEdit-контролов) массива
Оно мне надо?
Возжелавшие массив пусть о нем и пекутся.
При данной постановке задачи массив и вовсе лишний.
--
Regards, LVT.
← →
Evgenxxxx (2005-12-07 12:23) [20]
> ну вот и показывай фрагмент кода, где ты их "располагал"
> ..
//формирование страниц
For i:=0 to StrToInt(edcolaccountpoints.text)-1 do
begin
NewPage:=TtabSheet.Create(self);
NewPage.PageControl:=PageControl1;
NewPage.Caption:="Точка учета №"+ IntToStr(i+1);
//1
NewEdit1:= TEdit.Create(Self);
NewEdit1.Name:="edDataAP"+inttostr(i+1);
NewEdit1.Left:= 288;
NewEdit1.Top:= 16;
NewEdit1.Text:="";
NewEdit1.Parent:=newPage;
//2
NewEdit2:= TEdit.Create(Self);
NewEdit2.Name:="edCounterAP"+inttostr(i+1);
NewEdit2.Left:= 288;
NewEdit2.Top:= 48;
NewEdit2.Text:="";
NewEdit2.Parent:=newPage;
//3
NewEdit3:= TEdit.Create(Self);
NewEdit3.Name:="edLossesAP"+inttostr(i+1);
NewEdit3.Left:= 288;
NewEdit3.Top:= 80;
NewEdit3.Text:="";
NewEdit3.Parent:=newPage;
end;
← →
Digitman © (2005-12-07 12:36) [21]кто у тебя в дан.случае Self ?
форма ?
← →
Evgenxxxx (2005-12-07 12:53) [22]Незнаю так было описано создание новых компонентов в одной книге.
← →
Digitman © (2005-12-07 13:21) [23]
> Evgenxxxx (07.12.05 12:53) [22]
> Незнаю
плохо !
Self - это ссылка на объект, метод-обработчик события которого в данный момент времени в данном контексте выполняется.
Пусть в обработчике, например, события TMyForm.OnCreate ты создаешь некий объект-компонент вызовом
NewEdit1:= TEdit.Create(Self);
Указание Self в кач-ве параметра Owner конструирующего метода TEdit.Create означает, что отныне (и до самой смерти) создаваемого тобой объекта-компонента TEdit его владельцем будет являться объект-форма MyForm, в обработчике события OnCreate которого ты создаешь Edit-компонент ... Владение одного компонента другим компонентом означает, что владеющий объект-компонент (MyForm) отныне ответственен за неявное автоуничтожение (если таковое не выполнено тобой явно) владеемых им объектов-компонентов (Edit) в ходе собственного уничтожения ... Список владеемых объектов-компонентов доступен через св-во-список компонента-владельца Components[] ... В этом списке в дан.случае как раз и находятся ссылки на все Edit-компоненты, которые ты сконструировал с указанием Self в кач-ве владельца
отсюда следует и решение :
//предполагается что этот код выполняется в контексте любого из методов
//объекта MyForm
for i := 0 to ComponentCount - 1 do
if Components[i] is TEdit then
ShowMessage(Components[i].Name); //обращение к найденному компоненту
← →
Leonid Troyanovsky © (2005-12-07 13:28) [24]
> Evgenxxxx (07.12.05 12:53) [22]
Насчет того, что if Pages[i].Controls[j] is TEdit не срабатывает,
при условии [20], - не верю.
А вот left = 288, кажется мне, завышено.
Кста, у страниц Owner естественней быть PageControl1.
--
Regards, LVT.
← →
Leonid Troyanovsky © (2005-12-07 13:38) [25]
> Digitman © (07.12.05 13:21) [23]
> if Components[i] is TEdit then
if Component[i] is TEdit then
if TEdit(Components[i]).Parent is TTabSheet then
--
Regards, LVT.
← →
Evgenxxxx (2005-12-07 15:43) [26]Получилось!!!
for i := 0 to ComponentCount - 1 do
if Components[i] is TEdit then
begin
s:=TEdit(Components[i]).Name ;
If Copy(S,0,2)="xx" then
begin
a[j]:=s;
inc(j);
end;
end;
Editам котрые необходимо считать присваеваем в начеле имени какой нибудь идентификато например "XX" а потом поэтому идентифекатора определяем считать на этот едит или нет.
← →
Leonid Troyanovsky © (2005-12-07 16:50) [27]
> Evgenxxxx (07.12.05 15:43) [26]
> Editам котрые необходимо считать присваеваем в начеле имени
> какой нибудь идентификато например "XX" а потом поэтому
> идентифекатора определяем считать на этот едит или нет.
Если еще немного напрячься с именами, а также сделать Owner для Edit
тот же PageControl1, легко заметить, что массив а - лишний.
Т.е., перебирать PageControl1.Components или PageControl1.FindComponent.
--
Regards, LVT.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2005.12.25;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.012 c