KB-33026: Arrastando objetos de tela com o mouse em tempo de execução.

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:

  1. 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
  2. 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
Anexo a este artigo está uma aplicação desenvolvida com o Elipse E3 v3.2 b. 260 que ilustra os passos descritos acima.

Anexos:

MouseMove

Print Friendly, PDF & Email

Este artigo foi útil? Was this helpful?

Classificação média - Average rating 0 / 5. Count: 0

Deixe seu Comentário

Seu endereço de e-mail não será publicado. Campos marcados com asterisco são obrigatórios *