I'm new in Delphi and need assistance for my problem. The description of my program and the problem I'm facing is as follow:
My Program
My program shows 25 circles arranged in a 5x5 square. There is also one button, labeled START. It is a reaction time program and what I wanna do is light one circle (YELLOW) every 1000ms and ask the user to CLICK ON the lighted circle as fast as he/she can. After the user click on the right circle, it will change into white. No matter how fast the user click the lighted circle, my program stays on a fixed interval of 1000ms between two lighting command. The lighting sequences start as the user pressed the START button. The lighting command (changing the circle's color) is put inside the startClick.
My Problem
The problem I'm facing is the program isn't responding to the circleMouseDown. FYI, I've made all the 25 circles their MouseDown procedure and tested them to change the circle color and they work fine. However, when I put them in real situation it's like they haven't even been called. I suspect this is because the program is still busy executing the statements placed in startClick.
Questions
Is there any way to capture the circleMouseDown even the program still runs startClick procedure? Nonetheless, after it responds to the circleMouseDown for the appropriate circle, I need it to come back to its last position in startClick.
That's all, any suggestions will be very helpful for me.
regards,
Nathanael Gratias
My Sampe Code for startClick and circleMouseDown:
- Code: Select all
procedure TForm4.btnStartClick(Sender: TObject);
var j : integer;
begin
btnStart.Visible := false;
for j:=2 to 7 do
begin
changeColor(pattern1[j-1], clWhite);
changeColor(pattern1[j], clYellow);
sleep(1000);
end;
end;
procedure TForm4.circle1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if (circle1.Brush.Color = clYellow) then circle1.Brush.color := clWhite;
end;