Página 1 de 1

Como fazer funções para definir controles

Enviado: 28 Jul 2014 11:57
por Paulo_CPV
Bom dia!

Gostaria de saber se alguém pode me tirar a seguinte dúvida se é possível construir funções para definir controles no Minigui Extend, uso a versão 237, para que eu não precise ficar definindo controle por controle toda a hora e para otimizar a aplicação , como por exemplo:

Tenho os seguintes controles definidos:

Código: Selecionar todos

	DEFINE FRAME frame_1
		
		ROW 81
		COL 15)
		WIDTH 535
		HEIGHT 52
		CAPTION "Nome do Cliente"
		OPAQUE .T.
		FONTNAME "Arial"
		FONTSIZE 9
		FONTCOLOR PRETO
		FONTBOLD .T.
		BACKCOLOR BK_TEXTO0
		
	END FRAME

	DEFINE TEXTBOX TxNomeCli
		
		ROW 100
		COL 22
		WIDTH 521
		HEIGHT 18
		TOOLTIP 'Digite o nome do Cliente'
		FONTNAME "Arial"
		FONTSIZE 10
		FONTCOLOR PRETO
		FONTBOLD .T.
		BACKCOLOR BK_TEXTO3
		UPPERCASE .T.
		MAXLENGTH 60
		ON ENTER {|| oCadastro:PesqCli(janelaclientes.TxNomeCli.Value), janelaclientes.TxCepCli.SetFocus}

Para ser da seguinte forma:

Código: Selecionar todos

FUNCTION EntradaDados(nLinha,nColuna,nLargura,nAltura,cControle01,cControle02,cValor01,cValor02,Cor_Bk01,Cor_Bk_02,ntLinha,ntColuna,ntLargura,ntAltura,lMaiuscula,nTamanho,cRotina)

// nLinha,nColuna,nLargura,nAltura - São as coordenadas do controle Frame
// ntLinha,ntColuna,ntLargura,ntAltura - São as coordenas do controle TextBox
// cControle01,cControle02 - Sao os nomes dos controles
// cValor01 - Titulo da Frame
// cValor02 - Descrição do TextBox
// Cor_Bk01, Cor_Bk02 - São as cores de fundo da Frame e do TextBox
// lMaiuscula - Quando o texto for preenchido com letras maiúsculas
// nTamanho - Quantidade de caracteres para digitação
// cRotina - Rotina a ser executada pelo controle TextBox.
........
Será que isto é possível de ser implementado ou eu tenho que fazer uma função para o controle FRAME e outro para o controle TEXTBOX? Se alguém tiver algum exemplo para dividir comigo e me ajudar ou aonde eu poderei encontrar exempkos para estudar ficarei grato por isso.

[]'s
Paulo
Jacareí-SP

Como fazer funções para definir controles

Enviado: 28 Jul 2014 16:27
por Pablo César
Oi Paulo,

Os DEFINEs, nada mais é que a "tradução" de chamada de funções. Cada componente tem uma função e por geral é chamada desde um PRG. Por tanto é possível montar algo assim, não revisei com atenção mas eu não vejo o por quê não. Só que os DEFINEs tem também suas vantagens, pois na chamada de função de cada elementos, você vai precisar informar todos ou quase todos os parâmetros que necessitam cada componente e nesse DEFINEs que vem tanto na MiniGui Ext como na HMG e como outra bibliotecas gráficas, possuem tratamento desses parâmetros, seja para defini-los quando faltam ou quando precisa-se definir o componente de forma default ou especial.

Como disse em sintese, sim pode. Mas eu não abriria mão dos DEFINEs. Revise a sub-pasta SOURCE você encontrará ao menos um PRG para cada componente. Neste também poderá invocar funções na linguagem C.

Fazer de essa forma, requer um certo conhecimento de cada componente, suas variações, seu comportamento e o que se espera, Portanto, eu não abriira mão dos DEFINEs.

Espero ter sido esclarecedor.

Como fazer funções para definir controles

Enviado: 28 Jul 2014 20:46
por alxsts
Olá!

Se entendi bem a sua questão, o que você precisa é poder criar seus próprios componentes (User Defined Components).

Na pasta \SAMPLES\USER.COMPONENTS da instalação da HMG tem um exemplo (pouco claro). Talvez sirva para te dar alguma luz...

Como fazer funções para definir controles

Enviado: 28 Jul 2014 22:48
por Toledo
Paulo, segue um pequeno exemplo do que você pode fazer.

Código: Selecionar todos

#include "minigui.ch"

Function Main()

  SET NAVIGATION EXTENDED

  DEFINE WINDOW Form_1 ;
      AT 0,0 ;
      WIDTH 580 HEIGHT 300 ;
      TITLE 'Função para Definir Frame e TextBox' ;
      MAIN

      EntradaDados(10,15,535,52,"Frame_1","TxNomeCli",;
                   "Nome do Cliente","Digite o nome do Cliente",;
                   AQUA,YELLOW,;
                   29,22,521,18,.T.,60,{|| MsgInfo(Form_1.TxNomeCli.Value)})

      EntradaDados(70,15,535,52,"Frame_2","TxEndCli",;
                   "Endereço do Cliente","Digite o endereço do Cliente",;
                   AQUA,GREEN,;
                   89,22,521,18,.T.,60,{|| .T. })

  END WINDOW

  On Key escape Of Form_1 Action Form_1.release
  Form_1.Center
  Form_1.Activate

Return Nil

************************************
Function EntradaDados(nLinha,nColuna,nLargura,nAltura,cControle01,cControle02,cValor01,cValor02,Cor_Bk01,Cor_Bk02,ntLinha,ntColuna,ntLargura,ntAltura,lMaiuscula,nTamanho,cRotina)

  DEFINE FRAME &cControle01
      ROW nLinha
      COL nColuna
      WIDTH nLargura
      HEIGHT nAltura
      CAPTION cValor01
      OPAQUE .T.
      FONTNAME "Arial"
      FONTSIZE 9
      FONTCOLOR BLACK
      FONTBOLD .T.
      BACKCOLOR Cor_Bk01
  END FRAME

  DEFINE TEXTBOX &cControle02
      ROW ntLinha
      COL ntColuna
      WIDTH ntLargura
      HEIGHT ntAltura
      TOOLTIP cValor02
      FONTNAME "Arial"
      FONTSIZE 10
      FONTCOLOR BLACK
      FONTBOLD .T.
      BACKCOLOR Cor_Bk02
      UPPERCASE (lMaiuscula)
      MAXLENGTH nTamanho
      ON ENTER Eval(cRotina)
  END TEXTBOX

Return Nil
Abraços,