• advertisement_alt
  • advertisement_alt
  • advertisement_alt
Cassiano

[RESOLVIDO] Acessar Controles da Window do Componente Externo

8 posts in this topic

Olá pessoal, blz...

Seguinte, seguindo as orientações do manual da PCSOFT, q recomenda trabalhar com componentes externos ao invés de WDLs, iniciei o projeto de um componente no qual utilizará várias procedures e outros recursos q serão comuns entre outros projetos, exemplo procedure VALIDACPF().

Por isso estou fazendo testes com componentes externos, simulando pra entender na prática seu funcionamento e visibilidade. 

Então o q fiz foi o seguinte, criei o componente externo, adicionei a procedure tudo esta funcionado bem, a procedure é visível no projeto q tem o componente etc, agora minha dúvida é com relação a controles pertecentes a uma window do componente externo. Se é possível acessar esses controles.

Vou exemplificar... 

Criei um componente externo com: 

  • 1 classe chamada C_ParametrosGlobais contendo uma variável (member) chamada sTextodaWindow do tipo string = ""
  • 1 window chamada WIN_TESTE, com apenas um controle STC chamado STC_Teste de conteúdo inicial "Testando"

Blz, agora em um novo projeto importo esse componente e crio um botão para abrir essa window do componente, da seguinte maneira:

Open(WIN_Teste)

O resultado é a abertura da Window com o STC com a palavra Testando sendo visualizada.

Blz até aki tudo ok...

Agora a dúvida seria o seguinte...

Quero alterar ou ler o conteúdo desse STC_Teste, se possível de uma maneira direta sem ser das maneiras q vou mostrar abaixo...

As 2 formas q conheço para alterar seriam:

  • Definir parâmetros na inicialização da window e passar esses parâmetros na função Open() da seguinte forma:
Open(Win_Teste, "NovoTexto")
  • Atribuir na variável sTextodaWindow da Classe o novo texto e no código de inicialização da Window Win_Teste, do compoente, fazer verificar a classe, da seguinte forma:
C_Parametros_Globais:sTextodaWindow = "Testando alterar texto da Window"
Open(Win_Teste)

// e no código de inicialização da Win_Teste colocar
IF C_Parametros_Globais:sTextodaWindow <> ""
	STC_Teste = C_Parametros_Globais:sTextodaWindow
END


Agora acredito q não tenha como acessar o controle STC_Teste do componente diretamente, tipo: 

Info( Win_Teste.STC_Teste )

 

Share this post


Link to post
Share on other sites

Se eu não estiver muito errado, a maneira do acesso direto ao "STC_Teste" só funcionaria se a janela já estivesse aberta no momento do uso de "Win_Teste.STC_Teste"
Se chamar isso e a janela não estiver aberta, ocorre erro na execução pois está chamando um controle que ainda não existe

Tirando a passagem por parâmetro, não me vem a mente nenhuma outra maneira de atribuir um valor para algo que ainda "não existe"

1 person likes this

Share this post


Link to post
Share on other sites

Posted (edited)

Olá,

A ideia de componentes externos, é ótima mas deve-se atentar para o fato de que ela tem de ser o bastante. Não deve ser de uso comum e o acesso aos seus componentes tem de ser através de funções para que funcionem bem.

Por exemplo, elaborei um componente para a biometria, então todas as funções de biometria ficaram por conta de suas rotinas, a captura, a verificação, a captura de imagem biométrica, a verificação se existe um dispositivo conectado e assim por diante. Vislumbrei um efeito secundário sensacional, quando instalo esse componente em qualquer outra aplicação automaticamente é refletido para as windows do componente, ficando totalmente transparente para o usuário final de que se trata de uma rotina à parte.

Já para o caso de funções de apoio, como essa do CPF/CNPJ, ou mesmo de máscaras de apresentação (CEP, CPF, CNPJ, Códigos diversos) o que indico é a criação de uma classe de apoio, você conseguirá uma uniformidade e terá sempre um bom patrimônio de seus hábitos. Além do que é muito simples de passar de um projeto para outro.

[]´s

Edited by Mello Junior
1 person likes this

Share this post


Link to post
Share on other sites

No caso um componente exclusivo para classe de apoio? pq se não teria q modificar a classe em cada projeto q copiar ela correto?

Share this post


Link to post
Share on other sites

Uma Classe deve se tornar um objeto e então poderá utilizar qualquer um dos métodos ali declarados. É muito simples fazer isso com WD, pois automaticamente uma variável argumentada passa o seu endereço (além do conteúdo) então fazer com que o objeto se comunique com o chamador é tranquilo. Quanto a ter de atualizar, eu utilizo um arquivo em determinado local, fora da árvore da pasta do projeto, então quando altero esse arquivo tenho de recompilar todas os projetos para que possam usufruir das novas alternativas. Nem fica dentro de um componente, é uma classe declarada no projeto e instanciada no início de sua execução.

[]´s

 

1 person likes this

Share this post


Link to post
Share on other sites

Agora, é interessante que haja um método que acessa a versão da CLASSE, assim você consegue saber rapidamente se está atualizada ou não. Normalmente eu coloco tal informação em "Sobre a Aplicação"

 

[]´s

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now