A comunidade brasileira de desenvolvimento e programação de jogos.
Bem-vindo: Qua Abr 14, 2021 11:01 am

Todos os horários são GMT - 3 horas




Criar novo tópico Responder  [ 2 mensagens ] 
Autor Mensagem
 Título: ASSISTÊNCIA REMOTA E FUNÇÃO CREATERECTRGN
MensagemEnviado: Qui Dez 17, 2015 9:45 pm 
Offline
Membro novo

Registrado em: Qui Dez 17, 2015 9:35 pm
Mensagens: 1
ASSISTÊNCIA REMOTA E FUNÇÃO CREATERECTRGN: COMO AJUSTAR RETÂNGULO NA MESMA POSIÇÃO NA TELA (COM BASE NA TELA DO SERVIDOR), EM OUTRO COMPUTADOR (TELA CLIENTE)?


Boa noite,

Estou adicionando uma funcionalidade extra para o meu software de assistência remota para uma melhor interação com os meus usuários e quando vou criar um retângulo com um "buraco" no Client.exe, em meus testes este rectângulo é criado com sucesso em outro computador, mas meu problema é que este retângulo nunca é criado na mesma posição que eu já tinha definido antes em server.exe.

Imagem


Aqui está o meu código que eu tentei da última vez:

Código:

//Server.exe

    private
        { Private declarations }
        FSelecting: Boolean;
        FSelection: TRect;
        function ClientToWindow(const P: TPoint): TPoint;

    public
        Socket: TCustomWinSocket;


    function TForm1.ClientToWindow(const P: TPoint): TPoint;
    begin
      Result := pb1.ClientToScreen(P); // pb1 é um TPaintBox que fica acima de um TImage (onde são recebidos os prints atualizados do cliente) no Form1
      Dec(Result.X, Left);
      Dec(Result.Y, Top);
    end;

    procedure TForm1.pb1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin

      FSelection.Left := X;
      FSelection.Top := Y;
      FSelecting := True;

    end;

    procedure TForm1.pb1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin


    if FSelecting then

      begin

        FSelection.Right := X;
        FSelection.Bottom := Y;
        PB1.Invalidate;
      end;

    end;

    procedure TForm1.pb1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin

    FSelecting := False;
        FSelection.Right := X;
        FSelection.Bottom := Y;
        PB1.Invalidate;

        FSelection.NormalizeRect;
        if FSelection.IsEmpty then  begin
          Socket.SendText('<|QUADRADO_FECHADO|>');
        end
        else
        begin
          Socket.SendText(

                          IntToStr(ClientToWindow(FSelection.TopLeft).X)
                          + '§' +
                          IntToStr(ClientToWindow(FSelection.TopLeft).Y)
                          + '§' +
                          IntToStr(ClientToWindow(FSelection.BottomRight).X)
                          + '§' +
                          IntToStr(ClientToWindow(FSelection.BottomRight).Y)
          )
        end;

    end;

procedure TForm1.pb1Paint(Sender: TObject);
begin
pb1.Canvas.Brush.Color := clRed;
pb1.Canvas.Rectangle(FSelection);
end;





Código:
//Client.exe

procedure TForm1.CS1Read(Sender: TObject; Socket: TCustomWinSocket);
var
StrCommand: string;
List: TStrings;
FormRegion, HoleRegion: HRGN;

begin
  StrCommand := Socket.ReceiveText;

if Pos('<|QUADRADO_FECHADO|>', StrCommand) > 0 then
  begin
    SetWindowRgn(Form2.Handle, 0, True)
  end;

  if Pos('§', StrCommand) > 0 then
  begin

     List := TStringList.Create;
     try

       FormRegion := CreateRectRgn(0, 0, Form2.Width, Form2.Height);
       ExtractStrings(['§'], [], PChar(StrCommand), List);
       HoleRegion := CreateRectRgn(StrToInt(List[0]), StrToInt(List[1]),    StrToInt(List[2]), StrToInt(List[3]));
       CombineRgn(FormRegion, FormRegion, HoleRegion, RGN_DIFF);
       SetWindowRgn(Form2.Handle, FormRegion, True);

     finally
       List.Free;
     end;
  end;

end;



Deixo aqui http://tempsend.com/E5B3A8830F também um exemplo prático (com um código pouco modificado em relação ao anterior acima (entretanto, de nada adiantou e o problema persiste).

Qualquer sugestão será bem-vinda.


Voltar ao topo
 Perfil  
 
 Título: Re: ASSISTÊNCIA REMOTA E FUNÇÃO CREATERECTRGN
MensagemEnviado: Qui Jan 05, 2017 6:02 am 
Offline
Membro novo

Registrado em: Seg Dez 19, 2016 5:12 am
Mensagens: 13
liked it


หนังการ์ตูน


Voltar ao topo
 Perfil  
 
Exibir mensagens anteriores:  Ordenar por  
Criar novo tópico Responder  [ 2 mensagens ] 

Todos os horários são GMT - 3 horas


Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante


Enviar mensagens: Proibido
Responder mensagens: Proibido
Editar mensagens: Proibido
Excluir mensagens: Proibido
Enviar anexos: Proibido

Ir para:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traduzido por: Suporte phpBB