2013-06-17 3 views
-3

시작 및 중지 버튼에 문제가 있습니다. 내가 시작을 클릭하면하나의 버튼으로 활동을 전환하는 방법은 무엇입니까?

see here

, 그것은 정확한 우리 종료를 중지 할 수 없습니다 :이처럼 만들 수 있습니다 방법 :

하기 전에

내 코드 :

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    Button1.Enabled := False; 
    TServiceThread.Create; 
end; 

내 친구가이 코드를했다,하지만 작동하지 않습니다 - 내가 시작을 클릭하면,이 닫힙니다.

해결책은 무엇입니까?

+4

button1.Caption : = '& Start'; 명령문 바로 앞에 있기 때문에 양식이 닫힙니다. 무엇을 멈추고 시작하려고합니까? 서비스 스레드입니까? –

+0

나는 그것에 대해 모른다, 나의 친구는 그 코드를 준다 나는 그가 나에게주는 코드가 아직도 버그를 가지고 있다고 생각한다, 미안 나는 단지 델파이와 2 주간의 공부를한다, 나는 당신을 혼란스럽게 만들면 너무 미안하지만 너무 혼란 스럽다. _- – rihsano

답변

2

먼저이벤트에 Close 이벤트가 발생하여 양식을 닫습니다. 그것을 제거하면 그 문제를 해결할 수 있습니다.

스레드를 시작하고 중지하고 싶다고 생각하면 몇 가지 작업을 수행해야합니다. 당신의 Button1Click 핸들러에서,

type 
    TForm1 = class(TForm) 
    ... 
    private 
    FServiceThread: TServiceThread; 
    ... 
    end; 

지금 :

첫째, 당신은 스레드에 대한 참조를 유지하므로 양식 정의에 새로운 변수를 추가 할 필요가

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    Button1.Enabled := False; 
    try 
    if FServiceThread = nil then 
     FServiceThread := TServiceThread.Create; 

    if (Button1.Caption = '&Start') then 
    begin 
     Button1.Caption := '&Stop'; 
     FServiceThread.Start; 
    end 
    else 
    begin 
     Button1.Caption := '&Start'; 
     FServiceThread.Terminate; 
    end; 
    finally 
    Button1.Enabled := True; 
    end; 
end; 

주 당신 스레드의 FreeOnTerminate 속성을 True (종료 될 때 자동으로 스레드를 해제)으로 설정하거나 수동으로 양식의 OnClose 또는 OnDestroy 이벤트에서 직접 해제해야합니다. FreeOnTerminate을 사용하는 경우 스레드의 OnTerminate 이벤트에 대한 이벤트를 추가하고 을 설정하여 다음에 Start 버튼을 클릭 할 때 새 이벤트를 만들 수 있도록해야합니다.

+0

'FServiceThread.Stop' ->'FServiceThread.Start'이고 Q의 코드가 스레드를 해제하려고 시도하지 않는다면'FreeOnTerminate'에 대해 이야기해볼 가치가 있습니다. –

+0

'FServiceThread : = TServiceThread.Create (True); // 'Suspend'를 생성합니다. [Error] Unit1.pas (37) : 실제 매개 변수가 너무 많습니다.'FServiceThread.Stop;'오류 : Unit1.pas (42) : 선언되지 않은 식별자 : '중지' 나는 무엇을해야만 하는가? 대답 – rihsano

+0

주셔서 감사합니다 지금은 하나의 문제가'FServiceThread : = TServiceThread.Create (True); // 'Suspend'를 생성합니다. 오류 메시지'Unit1.pas (37) : 너무 많은 실제 매개 변수가 있습니다. ' – rihsano

관련 문제