Fórum Erro em ShowMessage chamado no execute do TIDTCPServer #347392

16/10/2007

0

Boa tarde,
venho pesquisando no site sobre o indy.
Estou precisando de uma ajuda.

Eu preciso executar um showMessage e um MessageDlg dentro do método execute do servidor TIdTCPServer. O problema é que quando esse caso acontece dá um erro no canvas. O erro é o seguinte ´Canvas does not allow drawing´.

O código que está dando erro é esse:
procedure TfrmPrincipal.ServidorExecute(AContext: TIdContext); 
Var ct : integer; 
    linha : string; 
    mensagem : string; 

begin 
  mensagem:=Acontext.Connection.IOHandler.ReadLn(EOL); 
  if mensagem<>´´ then 
  Begin 

  if flag=1 then 
  Begin 
     Acontext.Connection.IOHandler.WriteLn(´M05´+EOL); 
     flag:=2; 
  End; 

  if copy(mensagem,1,3)=´MA1´ then 
    Acontext.Connection.IOHandler.WriteLn(´RA1´+EOL); 

  if copy(mensagem,1,3)=´M01´ then 
  Begin 
    nomeJogadorRemoto:=copy(mensagem,5,length(mensagem)-1); 
    if MessageDlg(nomeJogadorRemoto+´ o convidou para jogar´+#13+´Deseja iniciar um jogo com ele?´,mtConfirmation, [mbYes, mbNo], 0)= mrYes then 
    Begin 
      status:=1; 
      while length(trim(nomeJogadorLocal))<=0 do 
         nomeJogadorLocal:=inputbox(´Digite seu nome´,´Digite seu nome´,´Player 2´); 
      Acontext.Connection.IOHandler.WriteLn(´R01´+nomeJogadorLocal+EOL); 
    End 
........ 
 



Rodrigolm

Rodrigolm

Responder

Posts

18/10/2007

Massuda

Eu preciso executar um showMessage e um MessageDlg dentro do método execute do servidor TIdTCPServer. O problema é que quando esse caso acontece dá um erro no canvas. O erro é o seguinte ´Canvas does not allow drawing´.
Seu problema está relacionado com multithreading.

Como Indy é multithread, você deveria acessar a UI (que está na thread principal do programa) através de um método executado via Synchronize da thread do servidor (parece que você usa Indy10 que eu não conheço direito, não sei explicar melhor).

Mas tem outro problema... se você executar o MessageDLg dentro do servidor, seu servidor ficará esperando alguém responder e durante esse tempo ele ficará inoperante (deixará de responder outras mensagens).


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar