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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2010, 14:59   #1
Arcanum
Новичок
Джуниор
 
Регистрация: 30.01.2010
Сообщений: 2
По умолчанию Зацикливание программы

Доброго времени суток. У меня такая проблема, есть программа каторая при введении неверного пароля должна выдавать сообщение "у вас осталось 2 попытки", при следующем неверном введении "у вас осталось 1 попытка" при третьем программа закрывается. Почему то происходит зацикливание. Объясните пожалуйста почему.
Листинг программы:

Код:
procedure TForm6.Button1Click(Sender: TObject);
var
k:real;
begin
Form6.Color:=clLime;
  if edit1.text='xxx'
   then  begin
     Form6.Color:=clRed;
     Label1.Caption:='Добро пожаловать';
     edit1.Enabled:=false;
      end
      else
        begin
        ShowMessage('Пароль введен неверно');
        Edit1.Text:='';
        Edit1.SetFocus;
      k:=k+1;
      if k=1 then ShowMessage('У вас осталось 2 попытки');
      if k=2 then ShowMessage('У вас осталось 1 попытки');
      if k=3 then Form6.close;


   end;

end;

procedure TForm6.Button2Click(Sender: TObject);
begin
  form6.close;
end;

procedure TForm6.FormCreate(Sender: TObject);
var
k:real;
begin
  k:=0;
end;


end.

Последний раз редактировалось Stilet; 12.04.2010 в 10:35.
Arcanum вне форума Ответить с цитированием
Старый 11.04.2010, 16:57   #2
MaxNik2009
Форумчанин
 
Аватар для MaxNik2009
 
Регистрация: 17.09.2009
Сообщений: 294
По умолчанию

Вынеси переменную K за процедуры, т.е. сделай ее глобальной.
принимаю благодарности в письменном виде( весы слева)...
MaxNik2009 вне форума Ответить с цитированием
Старый 11.04.2010, 17:00   #3
xakkkkker
Форумчанин
 
Аватар для xakkkkker
 
Регистрация: 15.12.2007
Сообщений: 226
По умолчанию

Во первых К надо объявить глобально, а не локально как ты объявил.
И во вторых старайся для счетчика использовать целый тип (integer).

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  k:integer;
implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
Form1.Color:=clLime;
if edit1.text='xxx'
then begin
Form1.Color:=clRed;
Label1.Caption:='Добро пожаловать';
edit1.Enabled:=false;
end
else
begin
ShowMessage('Пароль введен неверно');
Edit1.Text:='';
Edit1.SetFocus;
k:=k+1;
if k=1 then ShowMessage('У вас осталось 2 попытки');
if k=2 then ShowMessage('У вас осталось 1 попытки');
if k=3 then Form1.close;
end;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
k:=0;
end;

end.
xakkkkker вне форума Ответить с цитированием
Старый 11.04.2010, 17:02   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,830
По умолчанию

k должна быть глобальной в вашем коде, иначе каждый раз будет обнулятся.
p51x вне форума Ответить с цитированием
Старый 11.04.2010, 17:23   #5
xakkkkker
Форумчанин
 
Аватар для xakkkkker
 
Регистрация: 15.12.2007
Сообщений: 226
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
k должна быть глобальной в вашем коде, иначе каждый раз будет обнулятся.
Как она может обнуляться каждый раз она только при создании формы обнуляется
xakkkkker вне форума Ответить с цитированием
Старый 11.04.2010, 21:51   #6
Arcanum
Новичок
Джуниор
 
Регистрация: 30.01.2010
Сообщений: 2
По умолчанию

Благодарю ребята. У меня насчет глобальной переменной была идея,но почему то ей не воспользовался. Теперь все работает. Еще раз спасибо всем
Arcanum вне форума Ответить с цитированием
Старый 11.04.2010, 21:55   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,830
По умолчанию

Код:
procedure TForm6.Button1Click(Sender: TObject);
var
k:real;
Код:
procedure TForm6.FormCreate(Sender: TObject);
var
k:real;
Разные k...
p51x вне форума Ответить с цитированием
Старый 12.04.2010, 10:20   #8
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Вот, все легко и просто:
Код:
var
  PswLogFrm: TPswLogFrm;
  Reg:TRegistry;
  Log,Psw:string;
  Count:byte;


procedure TPswLogFrm.BtnOkClick(Sender: TObject);
begin
  SetWindowPos( Handle, HWND_NOTOPMOST, Left, Top, Width, Height,
                                  SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE );
  if (Log<>edLogin.Text) or (Psw<>edPsw.Text) then
    begin
      MessageBox(0,'Неверный логин или пароль.','Ошибка ввода!',mb_Ok);
      edLogin.Text:='';
      edPsw.Text:='';
      edLogin.SetFocus;
      Inc(Count);
      if Count<3
        then
          begin
            StatusBar.Panels[0].Text:=' Осталось попыток - '+IntToStr(3-Count);
            Application.ProcessMessages;
            Exit
          end
        else Application.Terminate
    end;
  MainFrm.Visible:=true;
  PswLogFrm.Visible:=false;
end;
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Зацикливание в паскале. sir.andrey Помощь студентам 2 19.03.2010 13:57
Из программы 1.exe создаем пустой файл 2.exe. Как из программы 1 внести API функции в программу 2? X-LEV-X Общие вопросы Delphi 7 09.03.2010 08:33
Почему получается зацикливание?? _Studentka_ Общие вопросы по Java, Java SE, Kotlin 1 09.12.2009 02:13
помогите убрать зацикливание с++,борланд Барби Помощь студентам 23 02.12.2008 10:14
Запуск программы на выполнение из другой программы. ViNcHeStEr Паскаль, Turbo Pascal, PascalABC.NET 6 18.06.2008 14:33