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:
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
Curtir tópico
+ 0
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
Clique aqui para fazer login e interagir na Comunidade :)