var
wykonano_polecenie: Boolean = false;
procedure TForm1.Timer1Timer(Sender: TObject); //timer ustawiłem na 800ms
var
i: Integer;
k: Integer;
begin
k := GetKeyState(VK_OEM_MINUS);
if k < 0 then //wcisniety
begin
Form1.Caption := 'wcisniety';
if not wykonano_polecenie then ShowMessage(IntToStr(Random(1000)));
wykonano_polecenie := True;
end else //puszczony
begin
Form1.Caption := 'puszczony';
wykonano_polecenie := False;
end;
end;
Nie rozumiem dlaczego gdy przytrzymam przycisk MINUS przez chwilę to wykonuje się kilka razy ShowMessage (timer ustawiony na 800 ms).
Przecież zaraz po ShowMessage() program ustawia zmienną boolean na True i tym samym jak timer drugi raz się wykonuje to powinien mieć mieć w zmiennej wartość TRUE i nie spełnić warunku, a spełnia.
A nawet jak wywalę kod pod ELSE to i tak ShowMessage() wykona się wiele razy przy trzymaniu minusa, choć jak byk ma rozkaz ustawić boolean na true po jednym wykonaniu ShowMessage().
Proszę o znalezienie błędu w tym kodzie.
ten Timer może jakiś zbugowany jest? Dopisałem pod ShowMessage() linijkę:
Timer1.Enabled := False;
A on i tak mi wykonuje spam ShowMessage() tak długo aż nie puszczę klawisza i dopiero wtedy się wyłącza, a przecież powinien wyłączyć się po JEDNYM showmessage!
Już chyba wiem o co chodzi. ShowMessage() tworzy nowe okno i chyba ono buguje Timera, bo jak ShowMessage wywalę i dam by dodawał nowe linie do TMemo to wtedy dodaje tylko jedną linijkę i koniec i działa prawidłowo. Pozostaje więc pytanie dlaczego okno ze ShowMessage robi taki bug?