Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Проверить едиты на заполнение и вывести MessageDl


Автор: kovalenko123 22.7.2008, 21:12
Привет всем программистам как реализовать проверку едитов чтоб для каждого не заполненного выводилось сообшение и чтоб этот едит еше покрасился в другой цвет Заранее спасибо.

Код

if (sEdit1.text='') then MessageDlg ('Заполни Edit1!', mtWarning, [mbOK], 0) or
   (sedit2.text='') then MessageDlg ('Заполни Edit2!', mtWarning, [mbOK], 0)
else
 with Adotable1 do Begin
  insert;
    FindField('1').AsString:=sEdit1.Text;
    FindField('2').AsString:=sEdit2.Text;

          Post;         
 


на этот код  он ругается на then во втором едите; 

Автор: strikerok 22.7.2008, 21:32
Код


if (sEdit1.text='') then MessageDlg ('Заполни Edit1!', mtWarning, [mbOK], 0);
if (sedit2.text='') then MessageDlg ('Заполни Edit2!', mtWarning, [mbOK], 0);
 with Adotable1 do Begin
  insert;
    FindField('1').AsString:=sEdit1.Text;
    FindField('2').AsString:=sEdit2.Text;
          Post;   

Автор: kovalenko123 22.7.2008, 21:41
strikerok  он должен вывести сообшение и покрасить едит в красный цвет например 

а где else он же без него будет в базу записывать (пустые строки) 
ставлю else он опять ругается на then как быть ?? 

Автор: strikerok 22.7.2008, 21:48
Код

if (sEdit1.text='') then 
 begin 
  MessageDlg ('Заполни Edit1!', mtWarning, [mbOK], 0);
  Edit1.Color:=clRed; // это красный цвет, остальные цвета посмотри в свойстве Color
 end;
if (sedit2.text='') then
 begin
  MessageDlg ('Заполни Edit2!', mtWarning, [mbOK], 0);
  Edit2.Color:=clRed;
 end;
  
with Adotable1 do Begin
 insert;
  FindField('1').AsString:=sEdit1.Text;
  FindField('2').AsString:=sEdit2.Text;
     Post; 


Добавлено через 2 минуты и 31 секунду
Цитата(kovalenko123 @ 22.7.2008,  21:41)
strikerok  он должен вывести сообшение и покрасить едит в красный цвет например 

а где else он же без него будет в базу записывать (пустые строки) 
ставлю else он опять ругается на then как быть ??

Почему не будет, должен записать. Потому что после проверки if если в поле Едит чтото записано то выполнится следующее действие, а следующим действием является записать содержимого поля в таблицу)))

Добавлено через 4 минуты и 8 секунд
ааа я тоже чето намудрил, щас подожди подумаю )))

Автор: kovalenko123 22.7.2008, 21:54
Все спасибо огромное там еше тока  два else добавить надо после  endov и получиться "крутой код" с проверкой; 
Еше Раз спасибо 

Автор: strikerok 22.7.2008, 22:00
Код


if (sEdit1.text='') then 
 begin 
  MessageDlg ('Заполни Edit1!', mtWarning, [mbOK], 0);
  Edit1.Color:=clRed; // это красный цвет, остальные цвета посмотри в свойстве Color
 end
else
 if (sedit2.text='') then
  begin
   MessageDlg ('Заполни Edit2!', mtWarning, [mbOK], 0);
   Edit2.Color:=clRed;
  end
else
 begin
   
  with Adotable1 do Begin
   insert;
    FindField('1').AsString:=sEdit1.Text;
    FindField('2').AsString:=sEdit2.Text;
     Post;
 end;


Автор: pseud 23.7.2008, 08:55
kovalenko123, 
strikerok, 
а если на форме 20 едитов, то на каждый инвалид будем стопать валидацию?
с точки зрения у важения юзера ты должен проверить все едиты и по не валидным вывести месаги одновременно.

Автор: Poseidon 23.7.2008, 10:07
Код

procedure CheckEdit(Form: TForm);
var
i: integer;
begin
with Form do
for i:= 0 to ControlCount-1 do
  if Controls[i] is TEdit
  then
    if TEdit(Controls[i]).Text = ''
    then
      begin
      MessageDlg ('Заполни '+TEdit(Controls[i]).Name,
                   mtWarning, [mbOK], 0);
      TEdit(Controls[i]).Color:= clRed;
      end;
end;


Использовать примерно так:
Код

procedure TForm1.Button1Click(Sender: TObject);
begin
CheckEdit(Form1)
end;

Автор: pseud 23.7.2008, 10:29
Poseidon, -1.
ИМХО - месага должна быть максимум ОДНА, чтоб не заставлять юзера 100 раз жать ОК.
Но у казать ошибки заполнения едитов необходимо все.
Приблизительно так.
ИМХО - конечно.

http://ipicture.ru/Gallery/Viewfull/3997375.html

Автор: aleksh 23.7.2008, 10:38
(морально устарело пока писалось)

Автор: Poseidon 23.7.2008, 10:52
Цитата(pseud @  23.7.2008,  10:29 Найти цитируемый пост)
ИМХО - месага должна быть максимум ОДНА, чтоб не заставлять юзера 100 раз жать ОК.Но у казать ошибки заполнения едитов необходимо все.
Ну блын, придрались smile

Код

procedure CheckEdit(Form: TForm);
var
i: integer;
mess: boolean;
begin
mess:= False;
with Form do
for i:= 0 to ControlCount-1 do
  if Controls[i] is TEdit
  then
    if TEdit(Controls[i]).Text = ''
    then
      begin
      if not mess
      then
        begin
        MessageDlg ('Не все поля заполнены', mtWarning, [mbOK], 0);
        mess:= True;
        end;
      TEdit(Controls[i]).Color:= clRed;
      end
  else TEdit(Controls[i]).Color:= clWindow;
end;




Автор: pseud 23.7.2008, 11:22
Poseidon, если брать указанный тобой пример, то он, с моей точки зрения, должен выглядеть так:

Код

procedure CheckEdit(AForm: TForm);
var
  i: Integer;
  mess: Boolean;
  edt: TEdit;
begin
  mess := False;
  with AForm do
  begin
    for i := 0 to ControlCount-1 do
      if Controls[i] is TEdit then
      begin
        edt := TEdit(Controls[i]);
        if edt.Text = '' then
        begin
          edt.Color := clRed;
          mess := True;
        end else
          edt.Color := clWindow;
      end;

    if mess then
      MessageDlg ('Не все поля заполнены', mtWarning, [mbOK], 0);
  end;
end;


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)