Página 2 de 3

Adicionar um controle depois que o form foi carregado

Enviado: 06 Mar 2016 22:59
por Toledo
Alexandre, para criar o StatusBar tem que ser no ON INIT do formulário (DEFINE WINDOW), então você terá que criar uma função para criar o StatusBar, por exemplo:

Código: Selecionar todos

Function CriarStatusBar()
DEFINE STATUSBAR PARENT FCADASTRO FONT "Courier New" SIZE 14 BOLD
            STATUSITEM "VENDEDOR:" WIDTH 270 FONTCOLOR {255,255,255} BACKCOLOR {0,0,0}
            DATE WIDTH 150 FONTCOLOR {255,255,255} BACKCOLOR {0,0,0}
            CLOCK WIDTH 150 FONTCOLOR {255,255,255} BACKCOLOR {0,0,0}
END STATUSBAR
return Nil
Ai no DEFINE WINDOW (que está no arquivo FMG) chamar a função no ON INIT.

Abraços,

Adicionar um controle depois que o form foi carregado

Enviado: 06 Mar 2016 23:03
por asimoes
Toledo,

Sim, eu entendo isso, para mim é transparente, o Rubens é que queria essa possibilidade, logo no primeiro post dele.

Adicionar um controle depois que o form foi carregado

Enviado: 07 Mar 2016 08:18
por rubens
Bom dia...

Tentei dessa forma...
A primeira tentativa foi assim... só que pro algum motivo dá erro...

Quando usa o LOAD FORM.. ele já fecha o formulário... Daí precisa adicionar o STATUSBAR mas já aconteceu o END do DEFINE FORM.
Poderia também ser criado um STATUSBAR no form sem cor e setar a cor depois do LOAD FORM mas para setar a cor com a função

Código: Selecionar todos

_SetStatusItemProperty( <n>, <acolor>, GetFormHandle(<"Form">), STATUS_ITEM_FONTCOLOR )
é necessário que define uma for na criação do STATUSITEM.

Estou usando como no exemplo...

Define os command

Código: Selecionar todos

#command SET STATUSITEM <n> ;
         OF <Form> ;
         FONTCOLOR <acolor> ;
      => ;
	_SetStatusItemProperty( <n>, <acolor>, GetFormHandle(<"Form">), STATUS_ITEM_FONTCOLOR )

* SET STATUSITEM nItem OF Form_1 FONTCOLOR RED

#command SET STATUSITEM <n> ;
         OF <Form> ;
         BACKCOLOR <acolor> ;
      => ;
	_SetStatusItemProperty( <n>, <acolor>, GetFormHandle(<"Form">), STATUS_ITEM_BACKCOLOR )

* SET STATUSITEM nItem OF Form_1 BACKCOLOR YELLOW	

#command SET STATUSITEM <n> ;
         OF <Form> ;
         ALIGN [ <c: CENTER> ] [ <r: RIGHT> ] ;
      => ;
	_SetStatusItemProperty( <n>, iif( <.r.> == .t., 2, iif( <.c.> == .t., 1, 0 ) ), GetFormHandle(<"Form">), STATUS_ITEM_ALIGN )

* SET STATUSITEM nItem OF Form_1 ALIGN CENTER
e para setar a cor

Código: Selecionar todos

   FOR X = 1 TO 7
	   SET STATUSITEM X OF FORM_VENDA FONTCOLOR {255,255,255}
		SET STATUSITEM X OF FORM_VENDA BACKCOLOR {0,0,0}
		IF X > 3 
			SET STATUSITEM X OF FORM_VENDA ALIGN CENTER
		ENDIF
  	NEXT
Como aprendizado valeu demais, mas não resolveu este problema...

Adicionar um controle depois que o form foi carregado

Enviado: 07 Mar 2016 08:50
por asimoes
Rubens,

Olhando os fontes da minigui ela utiliza vetores para montar e saber o que foi informado para o form e seus componentes definidos dentro do define window, as 2 formas de utilizar no seu caso o statusbar, seria no on init com uma função sua, ou no próprio form.

Adicionar um controle depois que o form foi carregado

Enviado: 07 Mar 2016 08:52
por rubens
Enquanto respondia recebi uma resposta do Grigory informando que ele tinha feito a correção na IDE e disponibilizado para atualização...
Fiz a atualização e funcionou certinho a criação da status bar direto no form com a IDE.

Agora essa questão da definição do statusbar no ON INIT é que ficou a dúvida porque não funciona... eu faço assim com o menu. ele é criado dinamicamente fora do form. Nesse momento não preciso dessa funcionalidade mas se uma hora precisar a gente saberia que tá funcionando..

MAs de qualquer forma valeu... obrigado a todos...

Rubens

Adicionar um controle depois que o form foi carregado

Enviado: 11 Mar 2016 23:30
por Nascimento
Boa noite,
Rubens poderia mostrar a resolução do seu problema com um exemplo?

att: Nascimento

Adicionar um controle depois que o form foi carregado

Enviado: 12 Mar 2016 19:05
por rubens
Nascimento...

Não consegui resolver o problema do adicionar o controle depois do formulário criado/definido... Isso foi tentado porque a IDE da minigui extends tava com erro na hora de salvar o formulário tava salvando errado.
Era para salvar:

Código: Selecionar todos

DEFINE STATUSBAR PARENT FCADASTRO FONT "Courier New" SIZE 14 BOLD
        STATUSITEM "VENDEDOR:" WIDTH 270 FONTCOLOR {255,255,255} BACKCOLOR {0,0,0}
END STATUSBAR
e a IDE salvava

Código: Selecionar todos

DEFINE STATUSBAR PARENT FCADASTRO FONT "Courier New" SIZE 14 BOLD
        STATUSITEM "VENDEDOR:" WIDTH 270 FONTCOLOR "{255,255,255}" BACKCOLOR "{0,0,0}"
END STATUSBAR
As cores eram salvas entre aspas o que dá erro de compilação. Como o meu controle STATUSBAR tinha 07 itens, toda vez que eu salvava o Formulário pela IDE eu tinha que entrar na editar o formulário e fazer a correção (remover as aspas). Solicitei a correção ao Grigory Filatovi através de e-mail. Achei que ia demorar a correção e abri este tópico aqui, porque se houvesse como inserir o controle depois de definido o formulario tava fácil de resolver. Era só colocar no on init do formulário uma função para criar o controle. Mas não descobri como fazer isso, ou melhor, não descobrimos. Descobri(mos) como mudar as propriedades do STATUSBAR/STATUSITEM depois de criado, mas para mudar a cor que era o objetivo do post, só era possível se definisse uma cor na sua criação dentro do formulário...Voltamos ao início. E para minha surpresa, dois dias após solicitar a correção na IDE, o Grirory respondeu o e-mail informando que a correção havia sido efetuada, bastava atualizar a IDE. Atualizei, recriei o controle no Formulário e beleza, corrigido. resolveu o problema inicial.

Agora só para por lenha na fogueira, a questão da criação de controles depois do formulário definido, me interessa e muito. Já pensou você poder criar um formulário de cadastro ou até de impressão padrão e conforme a opção escolhida no menu, bastasse carregar o formulário e adicionar nele os controles que forem necessários, tipo uma herança de classe ou generalização !!!! ia agilizar muito...

Rubens

Adicionar um controle depois que o form foi carregado

Enviado: 12 Mar 2016 21:29
por Toledo
Amigos, consegui definir o StatusBar chamado uma função no ON INIT (só) enganando a MiniGui:

Código: Selecionar todos

Function CriarStatusBar()
_HMG_ActiveFormName:="FCADASTRO"
_HMG_BeginWindowActive:=.T.
DEFINE STATUSBAR OF FCADASTRO FONT "Courier New" SIZE 14 BOLD
            STATUSITEM "VENDEDOR:" WIDTH 270 FONTCOLOR {255,255,255} BACKCOLOR {0,0,0}
            DATE WIDTH 150 FONTCOLOR {255,255,255} BACKCOLOR {0,0,0}
            CLOCK WIDTH 150 FONTCOLOR {255,255,255} BACKCOLOR {0,0,0}
END STATUSBAR
return Nil
Abraços,

Adicionar um controle depois que o form foi carregado

Enviado: 13 Mar 2016 09:27
por rubens
Bom dia...

Perfeito Toledo...
e para adicionar outros controles é só acrescentar.

Código: Selecionar todos

Function CriarStatusBar()
_HMG_ActiveFormName:="BaixarXML"
_HMG_BeginWindowActive:=.T.
DEFINE STATUSBAR OF BaixarXML FONT "Courier New" SIZE 12 BOLD
      STATUSITEM "Download de XML:" WIDTH 150 FONTCOLOR {255,255,255} BACKCOLOR {0,0,0}
      KEYBOARD 
      DATE WIDTH 100 FONTCOLOR {255,255,255} BACKCOLOR {0,0,0}
      CLOCK WIDTH 100 FONTCOLOR {255,255,255} BACKCOLOR {0,0,0}
END STATUSBAR

DEFINE BUTTON Button_3 
		PARENT BaixarXML
      ROW    20
      COL    10
      WIDTH  232
      HEIGHT 53
      CAPTION 'Button_3'
      FONTNAME 'Arial'
      FONTSIZE 18
      TOOLTIP ''
      FONTBOLD .T.
END BUTTON  

return Nil
:{
Obrigado
Rubens

Adicionar um controle depois que o form foi carregado

Enviado: 13 Mar 2016 11:13
por Toledo
Só para complementar, este exemplo acima é para MiniGui Extended... então segue abaixo um exemplo para HMG (Oficial):

Código: Selecionar todos

Function CriarStatusBar()
DEFINE STATUSBAR OF BaixarXML FONT "Courier New" SIZE 14 BOLD
            STATUSITEM "VENDEDOR:" WIDTH 270
            DATE WIDTH 150 
            CLOCK WIDTH 150 
END STATUSBAR
return Nil
No StatusBar da HMG não tem como definir cores.

Abraços,

Adicionar um controle depois que o form foi carregado

Enviado: 13 Mar 2016 13:59
por asimoes
Toledo,

Então não precisa informar no ON INIT da DEFINE WINDOW?

Você pode postar um exemplo?

Adicionar um controle depois que o form foi carregado

Enviado: 13 Mar 2016 16:16
por Toledo
Alexandre, nos dois casos (MiniGui Extended e HMG) a função CriarStatusBar() tem que ser chamada no ON INIT, mas no caso da MiniGui Extended tem que enganar a MiniGui usando os comandos:

Código: Selecionar todos

_HMG_ActiveFormName:="BaixarXML"
_HMG_BeginWindowActive:=.T.
Estes comandos são interno da MiniGui na hora de criar a WINDOW (janela), mas pelo jeito isto ocorre depois que é chamado a função em ON INIT, então sem estes comandos vai ocorrer um erro RUNTIME quando a função tenta criar o StatusBar. Já na HMG isto não ocorre, então os dois comandos acima não são necessários.

Exemplo MiniGui Extended:
statusbarMiniGuiEx.zip
(731 Bytes) Baixado 152 vezes
Exemplo HMG:
statusbarHMG.zip
(785 Bytes) Baixado 145 vezes
Abraços,

Adicionar um controle depois que o form foi carregado

Enviado: 15 Mar 2016 17:29
por microvolution
Opa boa tarde!
Estou usando a HMG 3.4.2, o que deve ser do mesmo jeito. Pessoal, sei que é "pergunta idiota", mas, dá pra postar um exemplo do uso do tal "INIT"?

Adicionar um controle depois que o form foi carregado

Enviado: 15 Mar 2016 17:41
por Toledo
Amigo, tem dois exemplos em anexo na minha mensagem!

statusbarMiniGuiEx.zip (MiniGui Extended)

statusbarHMG.zip (HMG 3.4.2)

Abraços,

Adicionar um controle depois que o form foi carregado

Enviado: 15 Mar 2016 18:10
por microvolution
Toledo escreveu:Amigo, tem dois exemplos em anexo na minha mensagem!
gente que absurdo... olhei as 2 páginas deste tópico e não vi o visível e óbvio...
"Kaí gualzin patin na lagoa"
"tá igual pegadinha de prova de concurso público pra juiz federal"
"Tá na Cara"
ô Loko meu!
Bom, estive aqui pensando, posso criar todos os LABELs e TEXTBOXs invisíveis né? E, no momento de sua utilização, aí deve ter um tipo de ENABLE que não depende do FORM.ACTIVATE,
que já ficou bem lá pra trás
, correto?