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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.08.2009, 08:52   #1
marinochka
Новичок
Джуниор
 
Регистрация: 30.08.2009
Сообщений: 2
По умолчанию курсор автоматом возвращался в edt_1 и после набора двух символов переходил в edt_2

Здравствуйте, уважаемые админы, хаки, креки и пр. Заранее приношу извинения, если влезла, по простоте душевной, не в ту тему.
Сразу оговорюсь, Я-ЧАЙНИК. Ну конечно, я очень активно работаю над собой, но-увы и ах-пока вот так.
Для работы мне понадобилось написать простенькую программку (ну, это для вас, естественно, она простенькая, а я с ней два вечера мурыжилась). Ну, короче, написала. Это мое первое, и пока единственное приложение. Теперь хочется внести кое-какие улучшения. Буду очень признательна тому, кто снизойдет до общения с "тупым чайником" и: 1) посмотрит фрагмент кода 2)подскажет, какую процедуру надо ввести, чтобы курсор автоматом возвращался в edt_1 и после набора двух символов переходил в edt_2 3) приведет пример оптимизации моего, как я думаю, не самого оптимального кода.
Заранее спасибо. Готова принять все полагающиеся мне нравоучения, язвительные замечания и т.д.

Код:
procedure TFormSecretar.edt_Dano1KeyPress(Sender: TObject; var Key: Char);
begin
if not(Key in['0'..'9'])then
Key:=Chr(0);
end;

procedure TFormSecretar.edt_Dano2KeyPress(Sender: TObject; var Key: Char);
begin
  if not(Key in['0'..'9',#13])then
Key:=Chr(0)
else
case Key of #13:

if (edt_Dano1.Text='') or (edt_Dano2.Text='') then
begin
  lbl_Rezul.Visible:=True;
  lbl_Rezul.Caption:='Дубина! Данные вводить будем?!';
end
else
begin
Kol:=kol+1;
lbl_Uch.Visible:=True;
lbl_Uch.Caption:='количество участников-'+floattostr(Kol);
 Min:=Min+StrToInt(edt_Dano1.Text);
 Sek:=Sek+StrToInt(edt_Dano2.Text);
 edt_Dano1.Text:='';
 edt_Dano2.Text:='';
   SrSek:=Round((Min*60+Sek)/Kol);
   lbl_Rezul.Visible:=True;
   lbl_Rezul.Caption:='среднее время-'+chr(13)+IntToStr((SrSek)div 60)+'минут'+IntToStr((SrSek)mod 60)+'секунд';
 
end;

Последний раз редактировалось Stilet; 31.08.2009 в 10:23.
marinochka вне форума Ответить с цитированием
Старый 30.08.2009, 09:35   #2
uberchel
Участник клуба
 
Аватар для uberchel
 
Регистрация: 19.01.2009
Сообщений: 1,453
По умолчанию

По поводу ввода в Tdit-ы :

Код:
procedure TForm1.Edit1Change(Sender: TObject);
begin
 with Edit1 do begin
 SetFocus;
 if GetTextLen = 2 then
 Edit2.SetFocus;
 end;
end;

procedure TForm1.Edit2Change(Sender: TObject);
begin
 if Edit2.GetTextLen = 0 then
    Edit1.SetFocus;
end;
uberchel вне форума Ответить с цитированием
Старый 30.08.2009, 12:29   #3
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

У Вас код не полный, поэтому я его немного подправил и местами оптимизировал.
Код:
Var
Kol: Integer=0;
Procedure TFormSecretar.edt_Dano1KeyPress(Sender: TObject; Var Key: Char);
Begin
If Not(Key In['0'..'9',#13,#8]) Then
Key:=Chr(0);
If Key = #13 Then
Begin
Edt_Dano2.SetFocus;
Key:=Chr(0);
End;
End;

Procedure TFormSecretar.edt_Dano2KeyPress(Sender: TObject; Var Key: Char);
Var
Min,Sek,SrSek: Integer;
Begin
If Not(Key In['0'..'9',#13,#8]) Then
Key:=Chr(0)
Else
Case Key Of #13:
If (Edt_Dano1.Text='') Or (Edt_Dano2.Text='') Then
Begin
Lbl_Rezul.Visible:=True;
Lbl_Rezul.Caption:='Дубина! Данные вводить будем?!'
End
Else
Begin
Inc(Kol);
Lbl_Uch.Visible:=True;
Lbl_Uch.Caption:='Количество участников - '+FloatToStr(Kol);
Min:=Min+StrToInt(Edt_Dano1.Text);
Sek:=Sek+StrToInt(Edt_Dano2.Text);
Edt_Dano1.Clear;
Edt_Dano2.Clear;
SrSek:=Round((Min*60+Sek)/Kol);
Lbl_Rezul.Visible:=True;
Lbl_Rezul.Caption:='Среднее время- '+Chr(13)+IntToStr((SrSek)Div 60)+'минут'+IntToStr((SrSek)Mod 60)+'секунд';
Edt_Dano1.SetFocus
End;
End;
End;
Если хотите его больше оптимизировать, то удалите такие строки
Код:
Lbl_Rezul.Visible:=True;
и сделайте компонент видимым, а поле текста у компонента оставьте пустым. Получится такой же эффект.
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
уберите курсор (в конце программы верните курсор), HECTOR.A. Паскаль, Turbo Pascal, PascalABC.NET 2 05.06.2009 20:10
Обновление набора данных после добавления в таблицу записей "внешней" программой dimmm БД в Delphi 5 21.04.2009 00:56
как залогиниться автоматом? geget Работа с сетью в Delphi 43 30.08.2008 22:57
Надо вбивать автоматом данные diznt Помощь студентам 8 21.08.2008 08:15