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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.02.2013, 18:05   #1
Host-2013
Пользователь
 
Регистрация: 02.02.2013
Сообщений: 63
По умолчанию конвертер

понадобилось сделать конвертер одной величины в другую:
есть 2 Edit-а, сделал для обоих по OnChange изменение в другом Edit-е текста по формуле, но проблема в том, что так как OnChange предполагает не только изменение текста пользователем, но и вообще любое изменение, то при изменении текста во 2 Edit-е меняется текст и в 1 и во 2 (они взаимосвязаны), как от этого избавиться? надо чтобы ввел в Edit1 текст, во 2 изменился текст, но не менялся в 1, в то же время чтобы потом во 2 ввести текст, и изменился в 1, не меняясь во 2

и еще другой вопрос:
Код:
...
StringGrid1.RowCount:= StringList1.Count;
...
for i:= 0 to StringGrid1.RowCount-1 do StringGrid1.Cells[2,i]:= StringList1[i];
...
for i:= 0 to StringGrid1.RowCount-1 do StringList1[i]:= StringGrid1.Cells[2, i];
...
все время выдает ошибку List index out of bounds. При чем это точно с этими строками связано...

Последний раз редактировалось Host-2013; 02.02.2013 в 18:23.
Host-2013 вне форума Ответить с цитированием
Старый 02.02.2013, 18:31   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
конвертер одной величины в другую...
ввел в Edit1 текст, во 2 изменился текст, но не менялся в 1, в то же время чтобы потом во 2 ввести текст, и изменился в 1, не меняясь во 2
Код:
procedure TForm1.Edit2Change(Sender: TObject);
begin
 with (sender as tedit) do begin
   if tag=0 then edit2.Text:= floattostr(strtofloatdef(edit1.Text, 0)*8)
    else edit1.Text:= floattostr(strtofloatdef(edit2.Text, 1)/8)
 end
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 edit2.Tag:= 1;
 edit1.OnChange:= edit2change
end;
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 02.02.2013, 18:36   #3
Host-2013
Пользователь
 
Регистрация: 02.02.2013
Сообщений: 63
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
Код:
procedure TForm1.Edit2Change(Sender: TObject);
begin
 with (sender as tedit) do begin
   if tag=0 then edit2.Text:= floattostr(strtofloatdef(edit1.Text, 0)*8)
    else edit1.Text:= floattostr(strtofloatdef(edit2.Text, 1)/8)
 end
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 edit2.Tag:= 1;
 edit1.OnChange:= edit2change
end;
можно с комментариями? + к тому же так или иначе наверное получится 2 OnChange, т.к. текст в 1 и 2 Edit меняется по разным формулам
Host-2013 вне форума Ответить с цитированием
Старый 02.02.2013, 18:45   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...а вы попробуйте ...в коде выше конвертор гривни в баксы и наоборот.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 02.02.2013, 18:54   #5
Host-2013
Пользователь
 
Регистрация: 02.02.2013
Сообщений: 63
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
...а вы попробуйте ...в коде выше конвертор гривни в баксы и наоборот.
ошибку выдает: Error reading Edit1.OnChange: Invalid property value
Host-2013 вне форума Ответить с цитированием
Старый 02.02.2013, 19:13   #6
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...а ежели слегка подумать?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 02.02.2013, 19:17   #7
Host-2013
Пользователь
 
Регистрация: 02.02.2013
Сообщений: 63
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
...а ежели слегка подумать?
и что же получится в результате сего мыслительного процесса?
Host-2013 вне форума Ответить с цитированием
Старый 02.02.2013, 19:26   #8
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...вам должно быть видней
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 02.02.2013, 21:50   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
и что же получится в результате сего мыслительного процесса?
Описание твоего Edit1. Что он, кто он, как ты его используешь.
Имеется ввиду назначение одного и того же события обоим Эдитам. Можно и не писать так, можно просто обоим эдитам назначить такой код:
Код:
procedure TForm1.Edit2Change(Sender: TObject);
begin

   if Sender=edit1 then edit2.Text:= floattostr(strtofloatdef(edit1.Text, 0)*8)
    else edit1.Text:= floattostr(strtofloatdef(edit2.Text, 1)/8)

end;
Тогда процедура сама определит какой эдит редактируется и в какой нужно конвертировать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.02.2013, 14:12   #10
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

raxp, Stilet - 2 с минусом. Как раз этого ТС и хочет избежать.
1. Зачем нужно обоим эдитам назначать один обработчик, если для каждого из них свой код нужен. Я бы заморочился на эту тему, если бы едитов было штук 5 или >, или если их кол-во было неопределено заранее (может менятся). Если нужно только 2 эдита, то "if Sender=edit1 then" - лишний заморачивающий код.
2. ТС, используй свойство Focused
Код:
procedure TForm1.Edit1Change(Sender: TObject);
begin
  if not Edit2.Focused then
    Edit2.Text := FloatToStr (StrToFloatDef (Edit1.Text, 0) * 8)
end;

procedure TForm1.Edit2Change(Sender: TObject);
begin
  if not Edit1.Focused then
    Edit1.Text := FloatToStr (StrToFloatDef (Edit2.Text, 0) / 8)
end;
Sibedir вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конвертер sent161rus Общие вопросы .NET 1 26.08.2011 17:02
Конвертер БД Vlaar Фриланс 3 22.12.2010 09:06
Конвертер VanHelsing Софт 0 22.07.2010 11:46
Конвертер на С++ VanHelsing Общие вопросы C/C++ 5 21.07.2010 15:01
конвертер malevich Общие вопросы Delphi 10 14.02.2007 23:19