Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Синтаксис
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.08.2010, 15:09
Мяфк Мяфк вне форума
Начинающий
 
Регистрация: 30.05.2010
Сообщения: 102
Репутация: 10
По умолчанию Вывести edit тексты в memo

Стоит задача:
В форме допустим 25 едитов. Пользователь их заполняет и нажимает на кнопку. Далее в мемо должен быть выведен текст каждого едита. В таком формате: edit1.text+','edit2.text+','. И т.п. на выходе должно получится: 123,124 и т.д. Ну, очень запарно писать всё это руками, проще организовать через массив. Вот я накатал такой массив:
Код:
for i:=1 to 50 do
s:= edit[i].text;
form1.script.Lines.Insert(0,s);
дак естественная .text не может быть допустима. Как бороться с этим?
Ответить с цитированием
  #2  
Старый 20.08.2010, 18:42
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

На последнем едите сделайте обработку события onExit там пропишите примерно такое:
Код:
Memo1.Text := '';
for i := 0 to Form1.ComponentCount - 1
do if Form1.Componets[i].ClassType = TEdit
    then if Memo1.Text <> ''
           then Memo1.Text := Memo1.Text+','+TEdit(Form1.Componets[i]).Text
           else Memo1.Text := TEdit(Form1.Componets[i]).Text;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 21.08.2010, 01:21
Мяфк Мяфк вне форума
Начинающий
 
Регистрация: 30.05.2010
Сообщения: 102
Репутация: 10
По умолчанию

Ну код, что вы дали, багнутый, или у меня руки кривые.
В общем попытался поставить, во-первых ничего не работает, т.е. ничего не добавляется, во-вторых, когда вписываешь, что-нибудь в последний едит, то пишет еррор. Дальше попробовал не Онексит поставить, а просто при нажатии на кнопку, сразу стало выдавать ошибку. Вот код, подобрал под свою прогу:
Код:
for i := 0 to Form9.ComponentCount - 1
do if Form9.Components[i].ClassType = TEdit
then if form1.Script.Text <> ''
then form1.Script.Text := form1.script.Text+','+TEdit(Form1.Components[i]).Text
else form1.Script.Text := TEdit(Form1.Components[i]).Text;
Ответить с цитированием
  #4  
Старый 21.08.2010, 01:38
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Ну писал тут без проверки, опечатался в одной буковке. Проверил на реальной проге - все нормально. Вот подправленный вариант:
Код:
 Memo1.Text := '';
 for i := 0 to Form1.ComponentCount - 1
 do if Form1.Components[i].ClassType = TEdit
     then if Memo1.Text <> ''
          then Memo1.Text := Memo1.Text+','+TEdit(Form1.Components[i]).Text
          else Memo1.Text := TEdit(Form1.Components[i]).Text;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 21.08.2010, 01:50
Мяфк Мяфк вне форума
Начинающий
 
Регистрация: 30.05.2010
Сообщения: 102
Репутация: 10
По умолчанию

В общем я то же проверил, опечатку я уже сразу заметил, у меня там с формами было напутано. Ну что у меня выводит: Когда запалняешь 1 или несколько едитов, то он правильно их пишет, но, он оставляет кучу запятых, и если например заполнил побольше едитов, он вставляет между этими запятыми цифры, вот код:
Код:
for i := 0 to Form9.ComponentCount - 1
do if Form9.Components[i].ClassType = TEdit
then if form1.Script.Text <> ''
then form1.Script.Text := form1.script.Text+','+TEdit(Form9.Components[i]).Text
else form1.Script.Text := TEdit(Form9.Components[i]).Text;
Вот, что получаем на выходе, например при 8 заполненых едитов.
,,,4 shop , //Ну это моя часть, так что не обращай внимание.
,1,1,1,1,1,1,1,1,1,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,

Последний раз редактировалось Мяфк, 21.08.2010 в 01:52.
Ответить с цитированием
  #6  
Старый 21.08.2010, 02:00
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Я так понял, что те едиты в которых нет данных должны пропускаться. Тогда будет так:
Код:
Var i: Integer;
begin
 Memo1.Text := '';
 for i := 0 to Form1.ComponentCount - 1
 do if Form1.Components[i].ClassType = TEdit
     then if Memo1.Text <> ''
          then begin
               if TEdit(Form1.Components[i]).Text <> ''
               then Memo1.Text := Memo1.Text+','+TEdit(Form1.Components[i]).Text
               end
          else Memo1.Text := TEdit(Form1.Components[i]).Text;
end;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #7  
Старый 21.08.2010, 02:05
Мяфк Мяфк вне форума
Начинающий
 
Регистрация: 30.05.2010
Сообщения: 102
Репутация: 10
По умолчанию

Спасибо, большое, всё работает, вот только один маленький баг, когда нажимаю на кнопку, в мемо становится две строки:
,,,4 shop
,1,2
Мне бы надо, что бы всё в одну строку шло, но одно но, когда второй раз нажимаю на кнопку, добавляется в одну строку..
Вот полный код:
Код:
form1.script.lines.add (form7.map.text+','+form7.x.text+','+form7.y.text+',4'+#9+'shop'+#9+form7.npc.text+#9+form7.sprite.text);
for i := 0 to Form9.ComponentCount - 1
do if Form9.Components[i].ClassType = TEdit
then if form1.Script.Text <> ''
then begin  if TEdit(Form9.Components[i]).Text <> '' then
form1.Script.Text := form1.script.Text+','+TEdit(Form9.Components[i]).Text
end
else form1.Script.Text := TEdit(Form9.Components[i]).Text;
end;
Ответить с цитированием
  #8  
Старый 21.08.2010, 02:13
Мяфк Мяфк вне форума
Начинающий
 
Регистрация: 30.05.2010
Сообщения: 102
Репутация: 10
По умолчанию

Ох, замучаю я вас сегодня, только что вспомнил, что я дурак и упустил, одну важную деталь.
В общем едитов у меня 2 типа, первые называются sid (sid1,sid2 и т.п.) и также sprice (sprice1,sprise2) Дак вот, мне надо такой код в массив кинуть:
sid1.text+':'+sprice1.text+','+sid2.text+':'+spric e2.text и т.д. Я думал, узнаю как работать хотя бы с етими едитами с вашей помощью, но думаю через компонент это организовать не возможно, так как варианты разные или : или ,. Конечно есть идея, например в массиве делать проверку если i/2 без остатка, то ставим : после компонент[i], а если с остатком, то ставим , прокатит такое?
Ответить с цитированием
  #9  
Старый 21.08.2010, 02:14
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Затрудняюсь сказать почему у вас так происходит, может у вас для мемо включено свойство WordWrap.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #10  
Старый 21.08.2010, 02:17
Мяфк Мяфк вне форума
Начинающий
 
Регистрация: 30.05.2010
Сообщения: 102
Репутация: 10
По умолчанию

Да, было включено, выключил, но ничего не изменилось..
Мне бы важнее услышать ответ на предыдущие моё сообщение.
Ответить с цитированием
  #11  
Старый 21.08.2010, 02:55
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,054
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

1. Делай через буфеную переменную.
2. FindComponent спасет отца русской демократии

Что-то типа того:
Код:
var 
  i : Integer;
  s : String;
  e1, e2 : TEdit;
begin
  S := '';
  For i := 1 to 5 Do // Пусть у нас 5 пар едитов
    Begin
       e1 := FindComponent('sid' + IntToStr(I)) As TEdit;
       e2 := FindComponent('spice' + IntToStr(I)) As TEdit;
       If (e1 <> nil) and (e2 <> Nil) 
          Then S := e1.Text + ':' + e2.Text + ';';
    End;
  Memo1.Text := S;
end;
Ответить с цитированием
  #12  
Старый 21.08.2010, 03:18
Мяфк Мяфк вне форума
Начинающий
 
Регистрация: 30.05.2010
Сообщения: 102
Репутация: 10
По умолчанию

Спасибо, но я не могу угадать сколько едитов заполнит пользователь, ставил for i := 1 to Form9.ComponentCount - 1, не прокатило, пустые едиты заполнял :;, ставил просто 50, думал ваша проверка на нил поможет, так же не прошло...
Ответить с цитированием
  #13  
Старый 21.08.2010, 07:20
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,054
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Угу, потому что в программе ошибка:

Код:
       If (e1 <> nil) and (e2 <> Nil) 
          Then S := S + e1.Text + ':' + e2.Text + ';';
Ответить с цитированием
  #14  
Старый 21.08.2010, 11:57
Мяфк Мяфк вне форума
Начинающий
 
Регистрация: 30.05.2010
Сообщения: 102
Репутация: 10
По умолчанию

Снова не получилось. Поставил массив от 1 до 50 и заполнил 1 пару едитов.
Получилось вот что:
1:1,1:1,:,1:1,:,:,1:1,:,:,:,1:1,:,:,:,:,1:1,:,:,:, :,:,1:1,:,:,:,:,:,:,1:1,:,:,:,:,:,:,:,1:1,:,:,:,:, :,:,:,:,1:1,:,:,:,:,:,:,:,:,:,1:1,:,:,:,:,:,:,:,:, :,:,1:1,:,:,:,:,:,:,:,:,:,:,:,1:1,:,:,:,:,:,:,:,:, :,:,:,:,1:1,:,:,:,:,:,:,:,:,:,:,:,:,:,1:1,:,:,:,:, :,:,:,:,:,:,:,:,:,:,1:1,:,:,:,:,:,:,:,:,:,:,:,:,:, :,:,1:1,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,1:1,:,:,:, :,:,:,:,:,:,:,:,:,:,:,:,:,:,1:1,:,:,:,:,:,:,:,:,:, :,:,:,:,:,:,:,:,:,1:1,:,:,:,:,:,:,:,:,:,:,:,:,:,:, :,:,:,:,:,1:1,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:, :,:,1:1,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:, 1:1,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,1: 1,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,1: 1,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,:,
Точку с запятой на запятую, я заменил. Попробовал например S в массиве обнулять каждый раз, получилось как раньше, т.е. заполняются две первые :, а потом пустые :,

Последний раз редактировалось Мяфк, 21.08.2010 в 12:00.
Ответить с цитированием
  #15  
Старый 21.08.2010, 13:10
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Код:
 If (e1 <> nil) and (e2 <> Nil) 
          Then S := S + e1.Text + ':' + e2.Text + ';';
Здесь идет только проверка на существование пары компонентов с нужным именем, а вот есть ли в них текст вы тоже должны проверять. Как это делать я уже показывал раньше.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:59.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter