Доброго дня мастера. Я столкнулся с очень непонятной для меня "штукой".
Есть процедура:
procedure TForm1.ButtonPin2;
begin
Lpt.WritePort (GetCurrentPort,0,(1 xor Lpt.ReadPort( (GetCurrentPort) ,0) ));
//Здесь идёт обращение к драйверу LPT порта...впринципе невникайте в суть работы
end;
.и
.по
.аналогии до
procedure TForm1.ButtonPin9;
begin
end;
Есть такая процедура, устанавливающая все биты регистра данных LPT порта в лог. 1
procedure TForm1.Button41Click(Sender: TObject); //начальная установка сигналов
var
i : integer;
begin
if CheckBox1.Checked = false then ButtonPin2; //тут флажки чтоб видно было (для удобства)
if CheckBox2.Checked = false then ButtonPin3;
if CheckBox3.Checked = false then ButtonPin4;
if CheckBox4.Checked = false then ButtonPin5;
if CheckBox5.Checked = false then ButtonPin6;
if CheckBox6.Checked = false then ButtonPin7;
if CheckBox7.Checked = false then ButtonPin8;
if CheckBox8.Checked = false then ButtonPin9;
for i :=1 to 16 do arFlags[i] :=0;
end;
Есть также процедура
procedure TForm1.Button13Click(Sender: TObject); //сигнал -АД00
begin
ButtonPin3; //выкл 3 разряд
ButtonPin4;
ButtonPin7; // 7 разряд
ButtonPin8; //имитирует строб
ButtonPin8;
//Вот здесь (до слова end)мне нужно вызвать процедуру Button41Click, устанавливающую все биты регистра данных LPT порта в 1. Но...здесь возникает проблема
//1) Значит, вызываю процедуру Form1.Button41Click(Form1);
// Результата нет.
2) Пишу задержку:
Sleep (5000);
Form1.Button41Click(Form1); - результата нет
3) Пишу задержку циклом
for i :=1 to 10000 do
for j :=1 to 10000 do Form1.Button41Click(Form1); - результата нет
//
// А если пишу так
ShowMessage ('');
Form1.Button41Click(Form1); - после нажатия на диалоге - процедура срабатывает (разумеется если не слишком быстро нажал :-) )
//
//
end;
Логичный вопрос: Почему так происходит и как избежать задержки подобным образом?