Como criar eventos em um objeto em um formulário

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Como criar eventos em um objeto em um formulário

Mensagem 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!
Editado pela última vez por Toledo em 06 Jul 2015 16:16, em um total de 1 vez.
Razão: Esta mensagem foi dividida de um outro tópico que estava na seção Clipper, que tratava de um outro assunto. POR FAVOR evite desviar o assunto do tópico.
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Como criar eventos em um objeto em um formulário

Mensagem 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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Como criar eventos em um objeto em um formulário

Mensagem 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...
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Como criar eventos em um objeto em um formulário

Mensagem 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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Como criar eventos em um objeto em um formulário

Mensagem 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.
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Como criar eventos em um objeto em um formulário

Mensagem 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...
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Responder