[RESOLVIDO]Como salvar a posição de um objeto movido em tela em tempo de execução?


(Yuri Reiner) #1

Estou usando o código apresentando no seguinte link: http://kb.elipse.com.br/pt-br/questions/2130/KB-33026%3A+Arrastando+objetos+de+tela+com+o+mouse+em+tempo+de+execução.

Apesar de conseguir mover o objeto em tela, quando a aplicação é interrompida, o objeto volta pro lugar inicial predefinido antes da aplicação ser executada. Alguém saberia me ajudar nisso?


(Luiz Fernando Freire dos Reis) #2

@YuriReiner, bom dia.

Há uma forma de fazer isso: armazenando a informação em tag interno no servidor.

Para isso, será necessário criar um tag interno para cada objeto de tela que será movido. Segue um exemplo abaixo utilizando o E3 v4.8.352 com a aplicação do link que passou:

  • Criar um tag interno com o mesmo nome do retângulo da opção 2 (“Rectangle2”) dentro da pasta “Dados”;
    image

  • Duplo clique no Tag Interno “Rectangle2” para abrir a configuração no meio do Studio. Na coluna “Valor” desse tag, escolher “Criar Array…” e em “Tamanho do Array” inserir “2” e clicar em OK;
    image

image image

  • No script do evento MouseUp da tela “InitialScren”, inserir o seguinte script :

Sub InitialScreen_MouseUp(Button, ShiftState, MouseX, MouseY)

dim objname
set obj = Application.Item("ObjName")
set fld = Application.GetObject("Dados")
objname = obj.Value

if objname <> "" then
	for each tag in fld
		'Se existir um tag no servidor para este tag
		if tag.Name = objname then
			DIM A(2)
			'MsgBox "Achou: "&tag.Name
			A(0) = MouseX - Application.Item("MouseX").Value
			A(1) = MouseY - Application.Item("MouseY").Value
			tag.Value = A
			fld.Save()
		end if
	next
	Item(objname).X = MouseX - Application.Item("MouseX").Value
	Item(objname).Y = MouseY - Application.Item("MouseY").Value
	obj.Value = ""
end if

End Sub

  • Por último, no evento OnStartRunning do próprio objeto de tela, no exemplo “Rectangle2”, colocar o seguinte script:

Sub Rectangle2_OnStartRunning()

A = Application.GetObject("Dados."&Name&"").Value
X = A(0)
Y = A(1)

End Sub

Por favor, testar.

Obs.1: Caso ocorra o erro 80070057 após os testes, verificar este KB.

Obs.2: Qualquer usuário que acessar a aplicação receberá essa modificação.

Sds.


(Yuri Reiner) #3

Obrigado, amigo!!! Consegui resolver o problema!