Adicionar um controle depois que o form foi carregado

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Adicionar um controle depois que o form foi carregado

Mensagem 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,
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
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Adicionar um controle depois que o form foi carregado

Mensagem por asimoes »

Toledo,

Sim, eu entendo isso, para mim é transparente, o Rubens é que queria essa possibilidade, logo no primeiro post dele.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Adicionar um controle depois que o form foi carregado

Mensagem 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...
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Adicionar um controle depois que o form foi carregado

Mensagem 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.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Adicionar um controle depois que o form foi carregado

Mensagem 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
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
Nascimento
Usuário Nível 4
Usuário Nível 4
Mensagens: 763
Registrado em: 19 Jul 2008 12:11
Localização: OLINDA-PE

Adicionar um controle depois que o form foi carregado

Mensagem por Nascimento »

Boa noite,
Rubens poderia mostrar a resolução do seu problema com um exemplo?

att: Nascimento
A arte de programar é simplesmente fazer seus pensamentos serem interpretados por uma maquina :) clipper 5.3 /harbour/minigui
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Adicionar um controle depois que o form foi carregado

Mensagem 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
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Adicionar um controle depois que o form foi carregado

Mensagem 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,
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
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Adicionar um controle depois que o form foi carregado

Mensagem 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
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Adicionar um controle depois que o form foi carregado

Mensagem 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,
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
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Adicionar um controle depois que o form foi carregado

Mensagem por asimoes »

Toledo,

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

Você pode postar um exemplo?
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Adicionar um controle depois que o form foi carregado

Mensagem 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 151 vezes
Exemplo HMG:
statusbarHMG.zip
(785 Bytes) Baixado 144 vezes
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:

Adicionar um controle depois que o form foi carregado

Mensagem 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"?
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:

Adicionar um controle depois que o form foi carregado

Mensagem por Toledo »

Amigo, tem dois exemplos em anexo na minha mensagem!

statusbarMiniGuiEx.zip (MiniGui Extended)

statusbarHMG.zip (HMG 3.4.2)

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:

Adicionar um controle depois que o form foi carregado

Mensagem 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?
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!
Responder