Descrição:
Como posso arrastar objetos de tela com o mouse em tempo de execução?
Solução:
Antes de mais nada, para solucionar esta questão é preciso estabelecer qual a versão do Elipse E3 em uso. Deste modo, será possível estabelecer como arrastar os objetos de tela em tempo de execução.
A partir da versão 3.5 do Elipse E3, pode-se criar um script do tipo WhileRunning na Tela, e então usar os métodos GetMouseX e GetMouseY para obter a posição do mouse. Por exemplo:
Sub Tela1_WhileRunning()
Item("Circulo1").X = FromPixelX(Application.GetMouseX())
Item("Circulo1").Y = FromPixelY(Application.GetMouseY())
End Sub
Os métodos FromPixelX e FromPixelY convertem as coordenadas de pixels para himetric.
NOTA: É importante salientar que esse tipo de script (WhileRunning) pode prejudicar a performance da aplicação, dependendo do que for realizado.
Para versões inferiores à 3.5, existem duas opções. Você pode:
- Criar uma Animação com Translação ou com Rotação para o objeto. A desvantagem neste caso é que o movimento do objeto ficará limitado ao percurso da animação. Por outro lado, sua vantagem é que o objeto será realmente “arrastado” com o mouse; ou
- Mudar a posição do objeto por script. A vantagem neste caso é que o objeto poderá ser movido para qualquer posição da tela.
Para isso, siga estes procedimentos:
1. Crie um script no evento MouseDown do objeto a ser arrastado. Então, atribua a propriedade Name do objeto a um Tag Interno (usando o tag como uma variável global). Por exemplo:
Sub Rectangle1_MouseDown(Button, ShiftState, MouseX, MouseY) Application.Item("TagInterno1").Value = Name 'Guarda o ponto exato em que o objeto foi clicado Application.Item("MouseX").Value = MouseX - X Application.Item("MouseY").Value = MouseY - Y End Sub
2. Crie um script no evento MouseUp da tela onde o objeto está inserido. Neste evento, é necessário passar para as propriedades X e Y do objeto as variáveis MouseX e MouseY do evento MouseUp que contêm a posição X e Y do cursor do mouse. Por exemplo:
dim objname set obj = Application.Item("TagInterno1") objname = obj.Value if objname <> "" then Item(objname).X = MouseX - Application.Item("MouseX").Value Item(objname).Y = MouseY - Application.Item("MouseY").Value obj.Value = "" end if