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;
применить код ко множеству компонентов
Я пишу первую самостоятельную и сложную (для меня) программу и у меня есть код:
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 не стерлось. Еще раз извиняюсь за видимо очевидные вопросы.. .
Код:
второй не понял
Код:
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;
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.
Код:
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;
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-й.. .
[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;
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;
аа.. . Спасибо LastSoul.. . Я пытался так сделать.. . Теперь вижу свою ошибку.. ).
Код:
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;
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;
Если надо, чтобы при пустом 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;
begin
if (Sender as TEdit).Text = '' then
(FindComponent('Edit' + IntToStr((Sender as TEdit).Tag + 1)) as TEdit).SetFocus;
end;
спасибо большое.. . Всё отлично работает..
Код:
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;
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;
Я пишу первую самостоятельную и сложную (для меня) программу и у меня есть код:
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;
у меня к вам большая просьба, что бы для каждого
вопроса вы создавали отдельную тему, давая ей осмысленное
название
Ваша новая тема перенесена в раздел Студенты, и вопросы
такого уровня просьба создавать именно в этом разделе :)
http://forum.codenet.ru/showthread.php?t=26768
[COLOR=blue]эту тему я закрываю, т.к. думаю что ваш вопрос исчерпан
если я ошиблась вы можете мне написать, и я ее открою[/COLOR]