자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Firemonkey [XE8] 안드로이드 이벤트 처리법
2015.10.19 16:37
본 게시판 사용시 당부 사항
* 이 게시판은 누구나 자유롭게 질문을 올리고 자발적으로 답변을 공유하는 게시판입니다.
* 따라서 질문을 올리실 때에는 최대한 자세하고 정중하게 질문을 올려 주세요.
* 최대한 질문을 자세히 올려야 답변도 자세히 올라 옵니다.
* 본 질문에 답변을 주시는 여러 개발자님들께 미리 감사드립니다.
-----------------------------------------------------------------------------------------------
윈도우에서는 되는데, 안드로이드에서는 안되는 부분이 있어서 질문글 올립니다.
예를들어, 개발코드중에 text 에 0부터 10000 까지 찍는다고 했을때,
찍는 도중에 중간에 STOP버튼을 누르면 멈춘다고 하는 소스를 작성하면 아래와 같습니다.
procedure TForm1.Button5Click(Sender: TObject);
var
num : integer;
begin
IsForceStop := false;
for num := 0 to 1000 do
begin
Text1.Text := inttostr(num);
application.ProcessMessages;
if IsForceStop then
break;
end;
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
IsForceStop := true;
end;
위 코드가 윈도우에서는 정상작동 되는데..
안드로이드에서는 루프를 도는동안 stop버튼 자체가 먹질 않네요..
보통 application.ProcessMessages; 코드를 써서 루프중에도 다른 이벤트를 처리하는데
안드로이드에서는 안먹는것 같아요..
이런 경우는 어떻게 처리해야 할까요?~~
Firemonkey [XE8] 안드로이드 이벤트 처리법
2015.10.19 16:37
본 게시판 사용시 당부 사항
* 이 게시판은 누구나 자유롭게 질문을 올리고 자발적으로 답변을 공유하는 게시판입니다.
* 따라서 질문을 올리실 때에는 최대한 자세하고 정중하게 질문을 올려 주세요.
* 최대한 질문을 자세히 올려야 답변도 자세히 올라 옵니다.
* 본 질문에 답변을 주시는 여러 개발자님들께 미리 감사드립니다.
-----------------------------------------------------------------------------------------------
윈도우에서는 되는데, 안드로이드에서는 안되는 부분이 있어서 질문글 올립니다.
예를들어, 개발코드중에 text 에 0부터 10000 까지 찍는다고 했을때,
찍는 도중에 중간에 STOP버튼을 누르면 멈춘다고 하는 소스를 작성하면 아래와 같습니다.
procedure TForm1.Button5Click(Sender: TObject);
var
num : integer;
begin
IsForceStop := false;
for num := 0 to 1000 do
begin
Text1.Text := inttostr(num);
application.ProcessMessages;
if IsForceStop then
break;
end;
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
IsForceStop := true;
end;
위 코드가 윈도우에서는 정상작동 되는데..
안드로이드에서는 루프를 도는동안 stop버튼 자체가 먹질 않네요..
보통 application.ProcessMessages; 코드를 써서 루프중에도 다른 이벤트를 처리하는데
안드로이드에서는 안먹는것 같아요..
이런 경우는 어떻게 처리해야 할까요?~~
http://cafe.naver.com/delphifmx/ 의 center7788 님의 답글입니다.
아래와 같이 루프문장을 쓰레드처리하여 사용해보세요.
var
aTask : ITask;
begin
aTask := TTask.Create(procedure()
var
num : integer;
begin
IsForceStop := false;
for num := 0 to 1000 do
begin
TThread.Synchronize(TThread.CurrentThread,
procedure()
begin
Text1.Text := inttostr(num);
application.ProcessMessages;
end);
if IsForceStop then
break;
end;
end);
aTask.Start;