Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

применить код ко множеству компонентов

6.2K
05 июня 2006 года
zercalo
75 / / 05.06.2006
я извиняюсь, видимо, за такие вопросы, ибо совсем начинающий, а в имеющейся под рукой литературе не найду ответа на свой вопрос.
Я пишу первую самостоятельную и сложную (для меня) программу и у меня есть код:
procedure TForm1.Edit41KeyPress(Sender: TObject; var Key: Char);
begin
case Key of
'0'..'9',#8:
else
Key:=Chr(0);
end;
if Length(Edit41.Text)=0 then Edit42.SetFocus;
end;
Вопрос такой: У меня таких компонентов (Edit41) 20 штук. Как можно не переписывать код для 20 компонентов, а уместить их в одну процедуру. Я знаю есть какое-то свойство Tag, но у меня применить его не выходит..
И второй вопрос:
у меня есть 4 компонента edit. Я проделываю с ними простую фигню:
procedure TForm1.Edit1Change(Sender: TObject);
begin
Memo2.Lines.Clear;
Memo2.Lines.Add(Edit1.Text);
end;
смысл тот, что я пытаюсь синхронизировать ввод в edit с вводом в memo.
Но затем мне нужно создать Edit2Change с тем, чтобы текст из edit2 прибавился в строчку к edit1.
И кроме того, нужно будет еще edit3 с таким же синхронизированным вводом, но его нужно запихать в memo строкой ниже так, чтобы edit1 и edit2 не стерлось. Еще раз извиняюсь за видимо очевидные вопросы.. .
929
05 июня 2006 года
sp999
198 / / 31.01.2003
по поводу первого вопроса:
 
Код:
procedure TForm1.Edit41KeyPress(Sender: TObject; var Key: Char);
begin
  case Key of
    '0'..'9',#8:
    else
      Key:=Chr(0);
  end;
  if Length(TEdit(Sender).Text)=0 then TEdit(Sender).SetFocus;
end;

второй не понял
6.2K
05 июня 2006 года
zercalo
75 / / 05.06.2006
[QUOTE=sp999]по поводу первого вопроса:
 
Код:
procedure TForm1.Edit41KeyPress(Sender: TObject; var Key: Char);
begin
  case Key of
    '0'..'9',#8:
    else
      Key:=Chr(0);
  end;
  if Length(TEdit(Sender).Text)=0 then TEdit(Sender).SetFocus;
end;

второй не понял[/QUOTE]
нет что-то не то..). У меня перестал работать и еdit41.. .
________
насчет второго кода. Там мне нужно, чтобы когда я ввожу в компонент edit1 текст - он сразу бы отображался в компоненте memo. Затем я буду вводить текст в edit2 и он должен отобразиться в memo в одной строке с edit1. Затем я буду вводить вводить текст в edit3. Он также должен вводиться одновременно как в edit3 так и в memo, но второй строчкой, после edit1+edit2.
6.2K
05 июня 2006 года
zercalo
75 / / 05.06.2006
[QUOTE=sp999]по поводу первого вопроса:
 
Код:
procedure TForm1.Edit41KeyPress(Sender: TObject; var Key: Char);
begin
  case Key of
    '0'..'9',#8:
    else
      Key:=Chr(0);
  end;
  if Length(TEdit(Sender).Text)=0 then TEdit(Sender).SetFocus;
end;

второй не понял[/QUOTE]
и еще момент.. . Мне нужно задействовать не все компоненты edit, а с 41 по 60-й.. .
1.8K
05 июня 2006 года
LastSoul
279 / / 28.12.2005
второй код:
[size=3]
Код:
procedure TForm1.Edit1Change(Sender: TObject);
begin
 Memo1.Lines[0]:=edit1.Text;
end;

procedure TForm1.Edit2Change(Sender: TObject);
begin
 memo1.Lines[0]:=edit1.Text+' '+edit2.Text;
end;

procedure TForm1.Edit3Change(Sender: TObject);
begin
 memo1.Lines[1]:=edit3.Text;
end;
[/size]
6.2K
05 июня 2006 года
zercalo
75 / / 05.06.2006
аа.. . Спасибо LastSoul.. . Я пытался так сделать.. . Теперь вижу свою ошибку.. ).
303
06 июня 2006 года
makbeth
1.0K / / 25.11.2004
[quote=zercalo]нет что-то не то..). У меня перестал работать и еdit41...[/quote] Проверка условия:
 
Код:
if Length(TEdit(Sender).Text)=0 then TEdit(Sender).SetFocus;
задана не в том обработчике.

Попробуй сделать так:
 
Код:
procedure TForm1.EditKeyPress(Sender: TObject; var Key: Char);
begin
    if not (Key in ['0'..'9', #8]) then Key:=#0;
end;

procedure TForm1.EditChange(Sender: TObject);
begin
    if Edit41.Text = '' then Edit42.SetFocus;
end;
EditChange - обработчик OnChange.
Если надо, чтобы при пустом Edit автоматически переключался фокус на следующий Edit, то используй Tag - пронумеруй с помощью него все Edit'ы (Edit41.Tag:=41, etc.):
 
Код:
procedure TForm1.EditChange(Sender: TObject);
begin
    if (Sender as TEdit).Text = '' then
          (FindComponent('Edit' + IntToStr((Sender as TEdit).Tag + 1)) as TEdit).SetFocus;
end;
6.2K
06 июня 2006 года
zercalo
75 / / 05.06.2006
2makbeth
спасибо большое.. . Всё отлично работает..
339
06 июня 2006 года
verybadbug
619 / / 12.09.2005
добавь эту функцию в OnChange каждого Edit начиная с 41-го.....
Код:
procedure TForm1.EditChange(Sender: TObject);
var
  S: String;
  I, J: Integer;
begin
  S := TEdit(Sender);
  Delete(S, 1, 4);
  I := StrToInt(S);
  J := (I - 41) div 2;//если обработка начинается с 41-го
  S := TEdit(FindComponent('Edit' + IntToStr(I div 2 * 2))).Text;
  if I mod 2 = 1 then
    S := S + TEdit(FindComponent('Edit' + IntToStr(I))).Text;
  Memo2.Lines[J] := S;
end;
350
06 июня 2006 года
cheburator
589 / / 01.06.2006
[QUOTE=zercalo]я извиняюсь, видимо, за такие вопросы, ибо совсем начинающий, а в имеющейся под рукой литературе не найду ответа на свой вопрос.
Я пишу первую самостоятельную и сложную (для меня) программу и у меня есть код:
procedure TForm1.Edit41KeyPress(Sender: TObject; var Key: Char);
begin
case Key of
'0'..'9',#8:
else
Key:=Chr(0);
end;
if Length(Edit41.Text)=0 then Edit42.SetFocus;
end;
Вопрос такой: У меня таких компонентов (Edit41) 20 штук. Как можно не переписывать код для 20 компонентов, а уместить их в одну процедуру. Я знаю есть какое-то свойство Tag, но у меня применить его не выходит...
[/QUOTE]
Можно предложить такой выход.
Напиши одну процедуру, несвязанную с компонентом, и вызывай ее из каждого обработчика. Типа:
procedure EditKeyPress(var key: char);
begin
case Key of
'0'..'9',#8:
else
Key:=Chr(0);
end;
if Length(Edit41.Text)=0 then Edit42.SetFocus;
end;

procedure TForm1.Edit41KeyPress(Sender: TObject; var Key: Char);
begin
EditKeyPress (Key);
end;
242
08 июня 2006 года
Оlga
2.2K / / 04.02.2006
Уважаемый zercalo
у меня к вам большая просьба, что бы для каждого
вопроса вы создавали отдельную тему, давая ей осмысленное
название
Ваша новая тема перенесена в раздел Студенты, и вопросы
такого уровня просьба создавать именно в этом разделе :)

http://forum.codenet.ru/showthread.php?t=26768

[COLOR=blue]эту тему я закрываю, т.к. думаю что ваш вопрос исчерпан
если я ошиблась вы можете мне написать, и я ее открою[/COLOR]
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог