• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Создание пароля

  • Автор темы chiksa20001
  • Дата начала
Статус
Закрыто для дальнейших ответов.
C

chiksa20001

Привет, помогите, пожалуйста, исправить ошибки, я новичок и плохо в этом разбираюсь((( вот такая задача: В памяти компьютера в зашифрованном виде хранится восьмистишье. Компьютер выводит слово, а пользователь должен ввести номер строки и номер позиции слова в строке в виде одного числа. Трехкратный неправильный ввод приводит к предупреждению на экране, что за компьютером злоумышленник, после чего через 30 секунд экран отключается.
Вот к ней код, но форма не выводится, а сразу выключается экран, помогите...

Код:
var
Form2: TForm2;
sl:TStringList;

_count: byte;
_simb: byte;
mas1, mas2: array[0..130] of byte;
_index: byte;
str1,str2: string;
i: byte;
k: integer;
f,w:SYSTEM.text;
x,y,a,z,b,t,p:String;


implementation

uses Unit1;

{$R *.dfm}

procedure CreateNumber;
var i: byte;
label _new;
begin
Randomize;
While _count < 4 do
begin
_new: _simb:= Random(4) + 1;
Application.ProcessMessages;

X := INTTOSTR(1);
Y := INTTOSTR(2);
A := INTTOSTR(3);
Z:= INTTOSTR(4);

for i:= 0 to 120 do
begin
if _simb = mas1[i] then GOTO _new;
end;
mas1[_index]:= _simb;
Inc(_index);
Inc(_count);

end;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
sl:= TStringList.Create;
try
sl.LoadFromFile('C:\Documents and Settings\User\Рабочий стол\Задача 4\Stih.txt');

finally
sl.Free;
end;
Timer1.Interval := 30000;
AssignFile(Input,'Sti.txt');
reset(Input);
Read(Input,str1);
CloseFile(Input);
edit1.Text:=str1;

CreateNumber;
mas2[0]:= mas1[3];
mas2[1]:= mas1[2];
mas2[2]:= mas1[1];
mas2[3]:= mas1[0];
for i:=0 to 3 do
begin
Edit2.Text:= Edit2.Text + IntToStr(mas1[i]) + ' ';

end;
k:=0;

if FileExists('Stih.txt') then
begin
AssignFile(w,'Stih.txt');
reset(w);
Readln(w,t);
CloseFile(w);
//ShowMessage(t);
SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 2);
if (t=p) or (t>p) then
begin
messagedlg('За компьтером здоумышленник',mtError,[mbOk],0);
Application.Terminate;

end;
end;
end;
procedure TForm2.BitBtn1Click(Sender: TObject);
begin
Timer1.Interval := 30000;
end;

procedure TForm2.N11Click(Sender: TObject);
begin
SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, -1); //включает монитор

end;


procedure TForm2.BitBtn2Click(Sender: TObject);
begin
AssignFile(Input,'Sti.txt');
reset(Input);
Read(Input,str1);
CloseFile(Input);
edit1.Text:=str1;

if edit1.Text<>str2 then
begin
k:=k+1;
messagedlg('Неверный пароль! Осталось '+inttostr(3-k)+' попытки',mtError,[mbOk],0);
if k>=3 then
begin
messagedlg('За компьтером здоумышленник',mtError,[mbOk],0);
Timer1.Interval := 30000;
AssignFile(f,'Sti.txt');
Rewrite(f);
Write(f,B);
CloseFile(f);
form1.Close;
end;
end
else
begin
if edit1.Text=str2 then
begin
form1.Hide;
form2.Show;
end;
end;
end;


procedure TForm2.BitBtn3Click(Sender: TObject);
begin
application.Terminate;
end;

procedure TForm2.Timer1Timer(Sender: TObject);
begin
SendMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, 2);
end;





end.
 
N

nayke

Код:
if (t=p) or (t>p) then
begin
messagedlg('За компьтером здоумышленник',mtError,[mbOk],0);
Application.Terminate;

end;
Насколько я понял из хитросплетений вашего кода это условие выхода.
P нигде не присваивается поэтому условие скорее всего выполняется всегда.
Хотя может где то затерялось присвоение.
И вобще если по логике это числовые переменные , то почему объявляете их как строки.
 
D

Dock1100

возможно надо свойство таймера enabled выставить в false, а потом когда нужно что бы он начал работать поменять програvмно на true.
И можете еще файл формы (*.dfm) выложить?
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!