Página 1 de 3

Adicionar um controle depois que o form foi carregado

Enviado: 06 Mar 2016 10:27
por rubens
Olá...

Tenho um Form

Código: Selecionar todos

*HMGS-MINIGUI-IDE Two-Way Form Designer Generated Code
*OPEN SOURCE PROJECT 2005-2015 Walter Formigoni http://sourceforge.net/projects/hmgs-minigui/

DEFINE WINDOW TEMPLATE AT 152 , 239 WIDTH 1088 HEIGHT 550

END WINDOW
Carrego ele pelo arquivo

Código: Selecionar todos

LOAD WINDOW FORMS\FORM_VENDA AS FORM_VENDA
DoMethod('FORM_VENDA','MAXIMIZE')
DoMethod('FORM_VENDA','ACTIVATE')
Como faço para definir um controle tipo um status bar nele depois de carregado com o LOAD? preciso inserir o STATUSBAR seguinte:

Código: Selecionar todos

     DEFINE STATUSBAR FONT "Courier New" SIZE 14 BOLD OF FORM_VENDA
            STATUSITEM "VENDEDOR:" WIDTH 270 FONTCOLOR {255,255,255} BACKCOLOR {0,0,0}
            STATUSITEM "PDV: " WIDTH 80 FONTCOLOR {255,255,255} BACKCOLOR {0,0,0}
            STATUSITEM "SERVIDOR:" WIDTH 300 FONTCOLOR {255,255,255} BACKCOLOR {0,0,0}
            STATUSITEM "F7-ATUALIZA PDV" WIDTH 210 FONTCOLOR {255,255,255} BACKCOLOR {0,0,0}
				STATUSITEM "F9-FECHA VENDA" WIDTH 210 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
Motivo... a IDE da minigui está com problemas nesse controle, já enviei e-mail informando o problema e estão corrigindo. a IDE coloca as cores entre aspas toda vez que salva o formulário, daí não funciona as cores.
Se alguém souber também como setar as cores de um item do statusbar resolve. Bastaria colocar uma função no oninit.
Tentei setar assim mas deu erro na compilação:

Código: Selecionar todos

   FORM_VENDA.STATUSBAR.ITEM(1).FONTCOLOR := {255,255,255}
   FORM_VENDA.STATUSBAR.ITEM(1).BACKCOLOR := {0,0,0}
Obrigado
Rubens

Adicionar um controle depois que o form foi carregado

Enviado: 06 Mar 2016 12:17
por Nascimento
Amigo Achei esse exemplo aqui nao sei se vai se encaixar no que vc quer

Código: Selecionar todos

#include <hmg.ch>

Function Main

define window tabsample at 0,0 width 400 height 300 main
   define tab tab1 at 10,10 width 380 height 200
      define page 'Page1'
         define button ok
            row 30
            col 30
            caption 'Press here to add a acontrol'
            width 200
            action addnewcontrol()
         end button   
      end page
      define page 'Page2'
     
      end page
   end tab

end window
tabsample.center
tabsample.activate
Return

function addnewcontrol
if iscontroldefined(text1,tabsample)
   tabsample.text1.release
endif
define textbox text1
   parent tabsample
   row 50
   col 10
   width 100
end textbox
tabsample.tab1.addcontrol('text1',1,80,50)
return nil

fonte http://www.hmgforum.com/viewtopic.php?t=1859

Adicionar um controle depois que o form foi carregado

Enviado: 06 Mar 2016 15:37
por rubens
Nascimento, Obg....

Pelo que vi essa função addcontrol é para o controle TAB.
No manual da Minigui menciona ele mas menciona que é para o TAB
Add a new control to a tab control.
SYNTAX
METHOD
<ParentWindowName>.<ControlName>. AddControl ( ControlName , nPageNumber , nRow , nCol )
Até tentei simular um comando com ele

Código: Selecionar todos

FORM_VENDA.STATUSBAR.ADDCONTROL( 'STATUSITEM','VENDEDOR',270 )
mas dá erro na compilação.

Na pasta C:\MiniGUI\SAMPLES\BASIC\Status\demo4 tem um exemplo de uma função "oculta" (não encontrei documentação em lugar nenhum, mas no demo4 mostra exemplo de funcionamento, faz o que eu preciso, muda a cor do item das STATUSBAR. Mas para isso acontecer na definição da STATUSBAR, tem que definir o STATUSITEM com ou fontcolor ou backcolor e é exatamente isso que tá dando problema na IDE da Minigui Extends. O jeito vai ter que esperar uma correção e ir alterando na unha toda vez que precisar abrir e salvar o form.

Se alguém precisar mudar a cor de um item da STATUSBAR é só ir no exemplo que mencionei acima que tem o exemplo...

Obrigado
Rubens

Adicionar um controle depois que o form foi carregado

Enviado: 06 Mar 2016 16:14
por asimoes
Rubens,

Estou interessado também nisso, estou pesquisando se eu achar algo compartilho aqui.

Adicionar um controle depois que o form foi carregado

Enviado: 06 Mar 2016 16:25
por asimoes
Rubens,

Com relação a cor você tentou usar o #command que está no exemplo?

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

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

Adicionar um controle depois que o form foi carregado

Enviado: 06 Mar 2016 16:30
por asimoes
Rubens,

Não sei se ajuda no include i_status.ch

#xcommand STATUSITEM [ <cMsg> ] ;
[ WIDTH <nSize> ] ;
[ ACTION <uAction> ] ;
[ ICON <cBitmap> ] ;
[ STYLE ] [ <style:FLAT,RAISED> ] ;
[ TOOLTIP <cToolTip> ] ;
[ BACKCOLOR <backcolor> ] ;
[ FONTCOLOR <fontcolor> [ <c: CENTERALIGN> ] [ <r: RIGHTALIGN> ] ] ;
[ <default: DEFAULT> ] ;
=> ;
_DefineItemMessage( "STATUSITEM", , 0, 0, <cMsg>, <{uAction}>, <nSize>, 0, <cBitmap>, <"style">, <cToolTip>, <.default.>, <backcolor>, <fontcolor>, iif( <.r.> == .t., 2, iif( <.c.> == .t., 1, 0 ) ) )

Adicionar um controle depois que o form foi carregado

Enviado: 06 Mar 2016 17:07
por asimoes
Rubens,

Acho que você está querendo talvez não funcione, porque o controle statusbar tem estar dentro de um define window como foi feito o load este controle não pode ser definido logo após.

Adicionar um controle depois que o form foi carregado

Enviado: 06 Mar 2016 22:23
por Toledo
Amigos, tente o seguinte:

Código: Selecionar todos

     DEFINE STATUSBAR PARENT FORM_VENDA FONT "Courier New" SIZE 14 BOLD
            STATUSITEM "VENDEDOR:" WIDTH 270 FONTCOLOR {255,255,255} BACKCOLOR {0,0,0}
            STATUSITEM "PDV: " WIDTH 80 FONTCOLOR {255,255,255} BACKCOLOR {0,0,0}
            STATUSITEM "SERVIDOR:" WIDTH 300 FONTCOLOR {255,255,255} BACKCOLOR {0,0,0}
            STATUSITEM "F7-ATUALIZA PDV" WIDTH 210 FONTCOLOR {255,255,255} BACKCOLOR {0,0,0}
            STATUSITEM "F9-FECHA VENDA" WIDTH 210 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
Abraços,

Adicionar um controle depois que o form foi carregado

Enviado: 06 Mar 2016 22:31
por asimoes
Toledo,

Só pode usar Of ou Parent, os dois juntos dá erro

Adicionar um controle depois que o form foi carregado

Enviado: 06 Mar 2016 22:33
por asimoes
Toledo,

Eu tentei isso mas não funfou:

Código: Selecionar todos

LOAD WINDOW FMG\fCadastro AS fCadastro

DEFINE STATUSBAR PARENT "FCADASTRO" FONT "Courier New" SIZE 14 BOLD //OF fCadastro
            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
     
CENTER Window fCadastro

ACTIVATE Window fCadastro

Adicionar um controle depois que o form foi carregado

Enviado: 06 Mar 2016 22:35
por asimoes
O erro é esse:

Código: Selecionar todos

Called from h_status.prg->_BEGINMESSAGEBAR(112)
Called from ->CADASTRO_CONDOMINOS(47)
Called from ->(b)MAIN(40)
Called from h_windows.prg->_DOCONTROLEVENTPROCEDURE(1670)
Called from h_events.prg->EVENTS(1523)
Called from ->DOMESSAGELOOP(0)
Called from h_windows.prg->_ACTIVATEWINDOW(1388)

Adicionar um controle depois que o form foi carregado

Enviado: 06 Mar 2016 22:35
por Toledo
Alexandre, desculpe... eu copiei o código do post inicial e depois acabei notando isto e fiz a correção na minha mensagem.

Abraços,

Adicionar um controle depois que o form foi carregado

Enviado: 06 Mar 2016 22:38
por Toledo
Alexandre, tenta sem as aspas no nome do formulário:

Código: Selecionar todos

DEFINE STATUSBAR PARENT FCADASTRO FONT "Courier New" SIZE 14 BOLD

Adicionar um controle depois que o form foi carregado

Enviado: 06 Mar 2016 22:42
por asimoes
Toledo,

Infelizmente não funciona, seria bem legal ter esse recurso na minigui ou hmg

Código: Selecionar todos

 
LOAD WINDOW FMG\fCadastro AS fCadastro
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
     

   ACTIVATE Window fCadastro

Código: Selecionar todos

Error BASE/1081  Erro nos parâmetros: +
Called from h_status.prg->_DEFINEITEMMESSAGE(188)
Called from ->CADASTRO_CONDOMINOS(46)
Called from ->(b)MAIN(40)
Called from h_windows.prg->_DOCONTROLEVENTPROCEDURE(1670)
Called from h_events.prg->EVENTS(1523)
Called from ->DOMESSAGELOOP(0)
Called from h_windows.prg->_ACTIVATEWINDOW(1388)
Called from ->MAIN(116)

Adicionar um controle depois que o form foi carregado

Enviado: 06 Mar 2016 22:53
por asimoes
Eu entendo que estes controles tem que estar dentro do define window, que neste caso está no fmg

Eu procurei na minigui se existe alguma função que permita isso mas não achei