Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
14-1133597407
Knight
2005-12-03 11:10
2005.12.25
Архивация файлов с русскими именам в TurboPower Abbrevia...


2-1133787205
Antek
2005-12-05 15:53
2005.12.25
Удаление ярлыков с рабочего стола и пуска в Bat файлах


14-1133336045
msguns
2005-11-30 10:34
2005.12.25
Kansas. Magnum Opus. Утопание в кайфе


10-1110209021
maxz
2005-03-07 18:23
2005.12.25
сопряжение в AutoCAD


2-1133885039
oleggar
2005-12-06 19:03
2005.12.25
быстрая запись





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский