Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.09.2014, 04:04   #1
tywka
 
Регистрация: 12.09.2014
Сообщений: 5
По умолчанию Edit. Как от одного компонента, задать значение все остальным

Есть несколько компонентов Edit. Назовем их Edit1, Edit2, Edit 3..... В Edit1 вводится число х. После введения числа, в остальные эдиты выводятся результаты рассчетов по определенной формуле. Пусть будет х+1 для Edit2, x+2 для Edit3 и т.д.

Сейчас у меня каждому эдиту вручную приписывается значение. Можно это как-то автоматизировать, а то при малейшей поправке приходится переделывать много текста?
tywka вне форума Ответить с цитированием
Старый 12.09.2014, 05:08   #2
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Сообщение от tywka Посмотреть сообщение
Можно это как-то автоматизировать
Можно. Для этого все необходимые расчёты следует выполнять в обработчике события OnChange 1го Edit-а.
Streletz вне форума Ответить с цитированием
Старый 12.09.2014, 05:13   #3
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Вот так например:
Код:
procedure TForm1.Edit1Change(Sender: TObject);
var x:Double;
begin
 x:=StrToFloatDef(Edit1.Text,0);
 Edit2.Text:=FloatToStr(x+1);
 Edit3.Text:=FloatToStr(x+2);
end;
Будет срабатывать при любом изменении в Edit1.
Или вместо Edit1Change можно Edit1Exit, тогда будет срабатывать при выходе из Edit1 ( фокус ввода - в другой компонент).

При вводе в Edit1 вместо числа какой-нибудь белиберды в Edit2 будет 1, в Edit1 - 2
type_Oleg вне форума Ответить с цитированием
Старый 12.09.2014, 15:36   #4
tywka
 
Регистрация: 12.09.2014
Сообщений: 5
По умолчанию

Ну это я и называю вручную
Под автоматизацией я подразумевал что-то типа
Код:
for i := 1 to n do Edit(i).Text := 'x+i'
Потому как таких Edit'ов у меня больше 20, а еще хочу в зависимости от того, в каком диапазоне находится число, окрашивать его в разные цвета. В итоге получается на один Edit 5 строчек кода. А на 20 уже 100 строчек.

Вот и интересуюсь, можно ли каким-либо способом укоротить этот обьем.
tywka вне форума Ответить с цитированием
Старый 12.09.2014, 16:11   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

всем Edit-ам задаем общий обработчик OnChange
и ВЫЧИСЛЯЕМ его и только (Sender!!) его цвет.

Код:
r:=strtoint((sender as TEdit).Text);
if r<0 then (sender as Tedit).font.color:=clred
else if r<10 then (sender as Tedit).font.color:=clyellow
else (sender as Tedit).font.color:=clgreen;
если конечно же для всех Edit правила вычисления цветов одинаковы!
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 12.09.2014 в 16:13.
evg_m вне форума Ответить с цитированием
Старый 12.09.2014, 18:32   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
Вопрос

Цитата:
Сообщение от tywka Посмотреть сообщение
Ну это я и называю вручную
Под автоматизацией я подразумевал что-то типа
Код:
for i := 1 to n do Edit(i).Text := 'x+i'
Потому как таких Edit'ов у меня больше 20, а еще хочу в зависимости от того, в каком диапазоне находится число, окрашивать его в разные цвета. В итоге получается на один Edit 5 строчек кода. А на 20 уже 100 строчек.

Вот и интересуюсь, можно ли каким-либо способом укоротить этот обьем.
Да,, возможно обращаться через массив или список, предварительно создав его и заполнив. Хочу знать, как у тебя на форме появляются эти эдиты: ты их мышкой понатыкал, или, всё-же, создал динамически?
Дай посмотреть скриншот формы.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 12.09.2014, 20:03   #7
tywka
 
Регистрация: 12.09.2014
Сообщений: 5
По умолчанию

evg_m, спасибо, то что нужно

min@y™, сейчас понатыканы на форме. Но это не критично, можно и создавать динамически.
tywka вне форума Ответить с цитированием
Старый 12.09.2014, 21:00   #8
саша40
Участник клуба
 
Регистрация: 12.09.2012
Сообщений: 1,030
По умолчанию

WinApi - это наше всё.
Код:
//onChange у первого edit
x,i: integer;
{a: integer; //для второго варианта}
begin
i:=2;
x:=inttostr(edit1.text); 
while FindComponent('Edit' + inttostr(i))<>0 do 
begin
(FindComponent('Edit' + inttostr(i)) as TEdit).Text:=IntToStr(x+i-1);
inc(i); 
end;
end;
{или можно сделать так:
i:=1;
for a:=1 To ComponentCount Do 
begin
if Components[a] is TEdit and Components[a].Name<>'Edit1' then 
begin
(Components[a] as TEdit).Text:=inttostr(x+i);
inc(i);
end;
end;}
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби.
саша40 вне форума Ответить с цитированием
Старый 12.09.2014, 21:50   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
WinApi - это наше всё.
В твоем примере WinAPI нет.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.09.2014, 22:12   #10
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
сейчас понатыканы на форме. Но это не критично, можно и создавать динамически.
Если их количество известно заранее (при запуске), можно их засунуть в статический массив (динамический массив) и обращаться по индексу:
Код:
Edits[Index].Text:= '#icebucketchallenge';
Иначе можно запихать их в TList или TObjectList:
Код:
if (Index < EditsList.Count) and Assigned(EditsList[Index]) and (EditsList[Index] is TEdit)
  then TEdit(EditsList[Index]).Text:= '#icebucketchallenge';

Заполнять массив или список можно в конструкторе формы или в обработчике её события OnCreate.
Еще есть вопросы?

Забыл спросить: нахрена такое количество эдитов в одном окне, да ещё разноцветных?
Цитата:
Потому как таких Edit'ов у меня больше 20, а еще хочу в зависимости от того, в каком диапазоне находится число, окрашивать его в разные цвета.
За такую цветомузыку юзеры придут тебе морду лица корректировать!
Колись давай, чего задумал, чикатило!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось min@y™; 12.09.2014 в 22:24.
min@y™ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как сделать что бы в Edit был прозрачный текст который при введение в Edit все исчез alman12 Общие вопросы Delphi 22 09.06.2014 22:21
Как задать значение переменной? C++ Arrioh Помощь студентам 1 06.05.2012 06:44
Можно ли задать функцию как сожержимое edit? Alexandr000006 Помощь студентам 1 08.03.2011 10:45
Как задать в массив значение ячейки? StudentofSUSU Microsoft Office Excel 1 07.01.2010 23:43
Как задать текст в Edit в чужом окне Artem Win Api 6 14.12.2007 19:13