Página 1 de 1

Como criar eventos em um objeto em um formulário

Enviado: 06 Jul 2015 13:51
por microvolution
rubens escreveu:Olá...

Também não consegui fazer do jeito que você tá tentando...dê uma olhada no meu exemplo aí de repente te ajuda em alguma coisa...

Rubens
Prezado, obrigado por vc entrar nessa discussão também e quem tem acrescentado muito não só a meus conhecimentos mas de tantos outros quantos precisarem não só agora mas num futuro qualquer.

Baixei e dei uma rápida visualizada em seu post, achei muito legal... mas, foi muito rápido, vou tentar dar mais uma desbulhada com calma.
Antes, como fiz um paliativo, estou tentando fazer o meu primeiro formulário de cadastro já em gráfico. Eu explico e vou postar a tela.
1 - como meu aplicativo estava 100% CONSOLE MODE, aos poucos vou acrescentado gráficos. Por exemplo, todas as perguntas ao usuário (confirmação, atenção, erro, saída) já estão em modo GRÁFICO;
2 - Fiz uma mesclagem de CONSOLE x GRÁFICO juntos para poder fazer essa migração de CONSOLE para GRÁFICO aos poucos;
2.1 - pra isso, eu começo o sistema em modo GRÁFICO criando apenas um WINDOW MAIN genérico (chamo de F1) e que dou um .HIDE(), .MINIMIZE() e .RELEASE(), mas, no momento de sua criação eu chamo uma função em ON INIT ativa_console().
2.2 - Em seguida a tela preta (modo console) aparece e a partir daí posso normalmente executar em ambos os ambientes do jeito que eu quiser;
3 - Só tem um problema (eu não sei como resolver) que sou obrigado a criar o formulário principal (que seria o verdadeiro window main) como WINDOW CHILD/MODAL (chamo de F2), pois o meu MENU POPUP é criado do jeito que mostrei pra vcs aqui neste tópico;
4 - Se houver um jeito de redefinir as opções do MENU MAIN F1, ficará melhor ainda, pois não mais criarei o F2/MODAL e reaproveitarei o que já fora criado, economizarei espaço em memória (pois o F1 nunca pode ser fechado por ser o WINDOW MAIN) e otimizarei o sistema;
5 - Agora, já estou criando o meu primeiro formulário de cadastro que usa o WINDOW PCI10048.FMG, mas, como tudo ainda pra mim é novo, as coisas básicas não estou conseguindo fazer;
5.1 - Vejam que no meu sistema antigo a cada ENTER no @ l,c say get picture valid f() é executado uma ação que verifica na função chamada se o que se digitou é permitido ou não;
5.1.1 - Por exemplo, logo no primeiro EDITBOX que é a variável mNU_VENDA (é assim em modo console) ao pressionar ENTER ele tem que informar ao usuário se o que "ele digitou ou não" se está correto ou não";
5.1.2 - Pode ser uma coisa boba e eu sei que é, mas, pra mim, isso tá mais difícil que no clipper antigo ou no delphi que isso tiro de letra...
5.2 - Então isso tá muito difícil de entender, pois até mesmo o PABLO e tantos outros já tentaram me mostrar que preciso reaprender a programar em modo gráfico pois tudo é diferente, e, o JoséQuintas me deixou com "uma pulga atrás da orelha" ao dizer que o MENU é apenas a ponta do "iceberg"... e para facilitar (no lugar de digitar no braço) usei a IDE/HMG para criar esse tal formulário de cadastro e "agora José...?" como faço?
5.3 - Incrível que programo no ObjectPascal (delphi) e lá não consigo agarrar tanto, pois em cada objeto é só dar um clique duplo e ali criar os códigos necessários para que ele funcione, e, aqui na IDE/HMG não existe esse clique duplo, então... ? ? ? ?
6 - vejam as imagens dessa tela de cadastro com LABEL/TEXTBOX/COMBOBOX/TAB etc, etc...
tela de cadastro com a 1ª guia
tela de cadastro com a 1ª guia
guia 2 e as demais são semelhantes o processo
guia 2 e as demais são semelhantes o processo
Então, no clipper ou MODO CONSOLE as variáveis são iniciadas e a cada enter é verificado se o que se digitou é válido.
1 - E, agora amigos, como faço para essa primeira variável "Número da OSV" (LABEL) mNU_VENDA (EDITBOX) pegue o que realmente tem que pegar que são as funções do modo console?
2 - Pois, está aparecendo como na hora da construção desse formulário na IDE/HMG sem valor algum, vou passando o TAB e vai aceitando como se fosse apenas um "brinquedinho";
3 - Como disse parece ser uma coisa boba, e, é, pois no delphi isso não vejo dificuldade, mas, aqui, tá tão difícil...

Enfim, gostaria que todos me perdoassem a minha falta de lógica, raciocínio e muitos podem pensar em preguiça, não, isso não é a verdade, pois sento na frente computador pela parte da manhã e fico até 2h da madruga do outro dia... de segunda a segunda, minha esposa e filhos acabam ficando a devida atenção merecida.

Aos moderadores, se estiverem errado o local dessas considerações, me perdoem também, e, se acharem conveniente, podem mudar o local, fiquem à vontade!

Como criar eventos em um objeto em um formulário

Enviado: 06 Jul 2015 16:36
por Toledo
microvolution escreveu:e a cada enter é verificado se o que se digitou é válido.
Amigo, no modo gráfico cada objeto que você coloca no formulário você pode determinar um evento ao pressionar Enter (OnEnter), quando for feita alguma alteração (OnChange), quando pegar o foco (OnGotFocus) ou perder o foco (OnLostFocus).
Image1.jpg
Para informar as funções que serão executadas para cada evento, escolha a guia Events da IDE.

Abraços,

Como criar eventos em um objeto em um formulário

Enviado: 06 Jul 2015 23:51
por microvolution
bom, como disse, não sei se eu q estou muito inocente ou "muito burro", pois no delphi isso eu entendo até bem, mas, aqui não estou entendendo nada.
1 - Já havia tentado colocar esses eventos, mas, não consegui entender esses símbolos "+- ....";
2 - como faço para que minhas variáveis que eram atreladas aos GETS sejam atreladas aos EDITBOX/COMBOBOX, pois esses deverão pegar as variáveis os nomes são os mesmos?
3 - Por exemplo, uma coisa básica:
imagine uma função de tratamento da chave principal:

Código: Selecionar todos

TRATA_CHAVE()
@ say 'Numero da OSV' get mNU_VENDA picture '999999' valid fNU_VENDA()
read
return

func fNU_VENDA()
if mNU_VENDA <0 .or. mNU_VENDA > 999999
  mensagem('Numero da OSV inválido. Digite novamente')
  return .f.
endif
if mNU_VENDA:= DCI10035->NU_VENDA
  *(...)
  *comandos/funções que preenchem todas as outras variáveis de todos os campos
  return .t.
endif
if mNU_VENDA :=0
  *funções para criar uma nova osv
  return .t.
endif
return
4 - como é que transfiro essa função para o formulário (modo gráfico), pois repito, é uma coisa simples, mas, tô queimando fosfato... e quebrando a cabeça... :% ?

como disse o JoséQuintas o MENU é o menor dos meus problemas, e, eu não quero retroceder... quero ir pra frente olhar para cima e para o alto, onde está o futuro...

Como criar eventos em um objeto em um formulário

Enviado: 07 Jul 2015 09:51
por Toledo
microvolution escreveu:1 - Já havia tentado colocar esses eventos, mas, não consegui entender esses símbolos "+- ....";
Eu não uso a IDE da HMG Oficial, então também não sei qual a finalidade destes símbolos, vou ficar lhe devendo.
microvolution escreveu:2 - como faço para que minhas variáveis que eram atreladas aos GETS sejam atreladas aos EDITBOX/COMBOBOX, pois esses deverão pegar as variáveis os nomes são os mesmos?
No Clipper cada GET tinha uma variável que recebia o valor do que era digitado no GET, já em um TEXTBOX na MiniGui é um pouco diferente, não existe a tal variável. Então para pegar o valor digitado em um TEXTBOX, você tem que ver a propriedade VALUE do objeto, só que como em um ambiente gráfico você pode ter várias telas abertas ao mesmo tempo, então para encontrar o valor de um objeto (TEXTBOX, COMBOBOX, etc) você tem que informar o nome da janela, o nome do objeto e qual propriedade do objeto você quer. Por exemplo:

No Clipper para pegar o valor digitado em um GET com a variável cNome (@ 9,9 GET cNome):

Código: Selecionar todos

@ 10,10 say "Nome digitado: "+cNome
Na MiniGui para pegar o valor digitado em um TEXTBOX que tem o nome de oNome e que está em uma janela chamada Form_1:

Código: Selecionar todos

cNome:=Form_1.oNome.Value
No comando acima cNome será a variável que vai receber o valor digitado no TEXTBOX. Agora Form_1.oNome.Value corresponde ao nome da janela (Form_1), nome do TEXTBOX (oNome) e Value é a propriedade que você quer pegar no objeto, neste caso o valor digitado no TEXTBOX.
microvolution escreveu:4 - como é que transfiro essa função para o formulário (modo gráfico), pois repito, é uma coisa simples, mas, tô queimando fosfato... e quebrando a cabeça...
No formulário que está na primeira imagem que você postou na sua mensagem inicial deste tópico, tem um TEXTBOX chamado mNU_VENDA, então selecione este objeto e depois na aba "Events" dê um clique duplo na coluna Value (onde tem um NIL) correspondente a linha onde está OnEnter. Vai abrir um janelinha com o título "Event Edit", na qual tem um campo para você digitar o nome da função que será executada quando pressionar enter no TEXTBOX, então digite: fNU_VENDA() e clique no botão Ok.
Agora no início da função fNU_VENDA() você tem que recuperar o que foi digitado no TEXTBOX, então faça as seguintes alterações na função fNU_VENDA():

Código: Selecionar todos

func fNU_VENDA()
Local mNU_VENDA:=PCI10048.mNU_VENDA.Value
... aqui vai o restante da função
Então, no comando acima, estou criando uma variável que vai receber o que foi digitado no TEXTBOX chamado mNU_VENDA e que está na janela chamada PCI10048.
microvolution escreveu:*comandos/funções que preenchem todas as outras variáveis de todos os campos
No Clipper para pegar o valor de um campo do DBF para uma variável para o GET:

Código: Selecionar todos

cCodigo:CLIENTES->CODIGO
cNome:=CLIENTES->NOME
Na MiniGui tem que usar o formato NomeForm.NomeObjeto.Value, por exemplo:

Código: Selecionar todos

Form_1.oCodigo.Value:=CLIENTES->CODIGO
Form_1.oNome.Value:=CLIENTES->NOME
Então, Form_1 é o nome da janela, oCodigo e oNome são os nomes dos TEXTBOX e Value é a propriedade que tem o conteúdo do objeto.
microvolution escreveu:*funções para criar uma nova osv
No Clipper:

Código: Selecionar todos

cCodigo:=SPACE(5)
CnOME:=space(40)
Na MiniGui:

Código: Selecionar todos

Form_1.oCodigo.Value:=SPACE(5)
Form_1.oNome.Value:=SPACE(40)
Abraços,

Como criar eventos em um objeto em um formulário

Enviado: 07 Jul 2015 12:09
por microvolution
interessante... li rapidamente... estou agora no meu unico cliente desse software na versao ainda CONSOLE.
Quando estiver no laboratorio, vou ler com a devida atencao e postar os resultados pra vc e pros demais companheiros.

Como criar eventos em um objeto em um formulário

Enviado: 08 Jul 2015 08:22
por Pablo César
microvolution escreveu:1 - Já havia tentado colocar esses eventos, mas, não consegui entender esses símbolos "+- ....";
Imagem

Simulam botões para:

- Adicionar funções (o mesmo que double click)
- Remover
- Localizar/Editar

Basta elaborar um formulário e ir testando tudo...