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:
Exemplo HMG:
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?