DLGAUTO Dialogs automáticas (não geração de fontes)
Moderador: Moderadores
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
DLGAUTO Dialogs automáticas (não geração de fontes)
Sem nome definido.
Pra quem não entendeu....
O gerador é uma forma de tirar a tristeza e a demora de desenvolver alguma coisa em GUI.
É uma tristeza dizer que ainda não fiz uma tela funcionando em hwgui, depois de muito tempo, e isso é desanimador.
Por outro lado, com o gerador, dá a sensação de que tá tudo quase pronto, que faltam só alguns detalhes, e isso empolga.
Como resultado da empolgação..... tudo criado a partir de DBFs, sem tela de configuração, só se fizer pelo fonte, pra fazer relacionamento entre DBFs e mostrar na tela.
execução em hwgui, é onde fiz mais coisas, atualiza tudo durante a navegação, e a maioria dos botões funciona, não todos.
Execução em HMG Extended, só fiz o básico de criar as telas
Execução em OOHG, só criei o menu, quando lembrei que é minigui mas é OOP
Está tudo feio, está tudo incompleto, mas tem alguma coisa.
EFEITO COLATERAL DO GERADOR
Talvez muitos pensaram que eu estou querendo mostrar que sei mais.
Pensem bem... nada funciona... agora vai ter mais coisa ainda que não funciona.
De onde tiraram isso de que sei mais ?
Pois esse é o efeito colateral do gerador.
Parece tudo pronto, quando na prática falta tudo.
Diferente das outras vezes, quero usar sem olhar fonte da lib, sem tentar modificar como a lib funciona, só quero ver como fica o uso prático, como ficam os fontes, etc.
Me surpreendi com HMG. O fonte que fiz agora não funcionava antes, parece que aquilo de variável pública sumiu.
O gerador vai ajudar nisso, usar várias LIBs também (fontes separados).
Vai parecer tudo indo em frente, mesmo não saindo do lugar.
Era isso que eu estava precisando, do gerador, e da sensação que ele dá.
Devia ter feito isso há mais tempo.
O resto, vai ser pesquisando, perguntando, sempre com a sensação de que tá pronto.
Tá tudo totalmente automático: menu, telas, relatórios, configurar pra pesquisar um código ou mais códigos no cadastro, mostrar a descrição
O trabalho vai ser só usar um controle de cada lib do jeito que a lib pedir, e as ações de botões, e fazer funcionar.
Se demorar 1 semana ou um mês cada um, sem problemas, vai parecer que tá tudo pronto mesmo.
Pra quem não entendeu....
O gerador é uma forma de tirar a tristeza e a demora de desenvolver alguma coisa em GUI.
É uma tristeza dizer que ainda não fiz uma tela funcionando em hwgui, depois de muito tempo, e isso é desanimador.
Por outro lado, com o gerador, dá a sensação de que tá tudo quase pronto, que faltam só alguns detalhes, e isso empolga.
Como resultado da empolgação..... tudo criado a partir de DBFs, sem tela de configuração, só se fizer pelo fonte, pra fazer relacionamento entre DBFs e mostrar na tela.
execução em hwgui, é onde fiz mais coisas, atualiza tudo durante a navegação, e a maioria dos botões funciona, não todos.
Execução em HMG Extended, só fiz o básico de criar as telas
Execução em OOHG, só criei o menu, quando lembrei que é minigui mas é OOP
Está tudo feio, está tudo incompleto, mas tem alguma coisa.
EFEITO COLATERAL DO GERADOR
Talvez muitos pensaram que eu estou querendo mostrar que sei mais.
Pensem bem... nada funciona... agora vai ter mais coisa ainda que não funciona.
De onde tiraram isso de que sei mais ?
Pois esse é o efeito colateral do gerador.
Parece tudo pronto, quando na prática falta tudo.
Diferente das outras vezes, quero usar sem olhar fonte da lib, sem tentar modificar como a lib funciona, só quero ver como fica o uso prático, como ficam os fontes, etc.
Me surpreendi com HMG. O fonte que fiz agora não funcionava antes, parece que aquilo de variável pública sumiu.
O gerador vai ajudar nisso, usar várias LIBs também (fontes separados).
Vai parecer tudo indo em frente, mesmo não saindo do lugar.
Era isso que eu estava precisando, do gerador, e da sensação que ele dá.
Devia ter feito isso há mais tempo.
O resto, vai ser pesquisando, perguntando, sempre com a sensação de que tá pronto.
Tá tudo totalmente automático: menu, telas, relatórios, configurar pra pesquisar um código ou mais códigos no cadastro, mostrar a descrição
O trabalho vai ser só usar um controle de cada lib do jeito que a lib pedir, e as ações de botões, e fazer funcionar.
Se demorar 1 semana ou um mês cada um, sem problemas, vai parecer que tá tudo pronto mesmo.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Gerador/criação de telas/executor
Parabéns mestre pela evolução nesse gerador, tenho certeza que isso vai ser um divisor de aguas para você.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
xHarbour.org + Hwgui + PostgreSql
Gerador/criação de telas/executor
Parabens MESMO
esta precisando de uma coisa assim a muito tempo
é um dos arrependimentos que tenho de não ter mudado de linguagem.
Poderiam ajudar para finalizar...
Paiva
esta precisando de uma coisa assim a muito tempo
é um dos arrependimentos que tenho de não ter mudado de linguagem.
Poderiam ajudar para finalizar...
Paiva
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Gerador/criação de telas/executor
Lembre-se que apesar de mostrar como cria cada controle, o fonte vai ser mais complicado por causa de tratar todos os campos de uma vez.
E se em console dá pra fazer telas de várias maneiras, em GUI isso se multiplica muito mais.
Esse executor, melhor chamar assim pra não confundir com gerador de fontes, vai ser só uma referência básica de alguma coisa funcionando.
Só que ao contrário dos exemplos das LIBs, vai mostrar um uso prático de um aplicativo, e não os recursos das LIBs.
Pode ser um ponto de partida de todo mundo que vai começar.
Mas de novo: fonte de "executor" não é um fonte normal, talvez possa ser mais complexo de entender, e ao invés de ajudar acabar atrapalhando.
Fico na dúvida sobre isso, porque a parte complexa se resume à criação da tela, que só faz cálculos de posição das coisas.
Vai servir pra mim, e pra todos.
Endereço do github:
https://github.com/JoseQuintas/dlgauto
E se em console dá pra fazer telas de várias maneiras, em GUI isso se multiplica muito mais.
Esse executor, melhor chamar assim pra não confundir com gerador de fontes, vai ser só uma referência básica de alguma coisa funcionando.
Só que ao contrário dos exemplos das LIBs, vai mostrar um uso prático de um aplicativo, e não os recursos das LIBs.
Pode ser um ponto de partida de todo mundo que vai começar.
Mas de novo: fonte de "executor" não é um fonte normal, talvez possa ser mais complexo de entender, e ao invés de ajudar acabar atrapalhando.
Fico na dúvida sobre isso, porque a parte complexa se resume à criação da tela, que só faz cálculos de posição das coisas.
Vai servir pra mim, e pra todos.
Endereço do github:
https://github.com/JoseQuintas/dlgauto
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Gerador/criação de telas/executor
A parte importante referente ao gerador é o array e cada elemento
Exemplo:
Isso acima é o que usaríamos num cadastro.
"Cod.Cliente" o equivalente a isso fica em CFG_FCAPTION
nCodCli o equivalente a isso fica em CFG_FVALUE
cliente->Nome o equivalente a isso seria a tabela CFG_VTABLE e o campo CFG_VSHOW
Na tabela aonde lê e grava seria o CFG_VNAME
Em GUI, vai usar um objeto pra esse primeiro texto, e não importa o nome
Em GUI, o objeto do get é CFG_FCONTROL
Em GUI, aonde vai o segundo texto precisa atualização, então precisa saber o nome, vai em CFG_VCONTROL
Além desses, tem lá tipo, tamanho e decimais de cada campo, e tamanho desse texto que vai ser mostrado quando pesquisa.
No final, o array só contém as variáveis comuns de qualquer aplicativo, a única diferença é que estão num array.
A lógica do "gerador" serve pra qualquer LIB, e as variáveis do gerador servem pra qualquer LIB.
Exemplo:
Para o gerador, o gerador sabe que clicando incluir/alterar precisa habilitar/desabilitar os "GETs".
Cada LIB é que vai dizer como habilita/desabilita um "GET", o que precisa ser feito é colocar o fonte pra isso.
E o mesmo para os demais eventos.
Está ficando organizado, na medida do possível:
test.prg - entrada geral
frm_createdbf.prg - criar dbfs e configuração simples
frm_mainmenu.prg - menu principal dos dbfs
frm_main.prg - entrada
frm_class.prg - classe geral
frm_createfrm.prg - criar janela de dialog
frm_createbutton.prg - criar buttons
frm_createedit.prg - criar textbox/label
frm_updateedit.prg - atualização dos textbox
frm_print.prg - relatórios
frm_preview.prg - preview de relatórios
Algumas funções equivalem a métodos, foi só uma forma de deixar em fonte separado.
Isso eliminou a herança múltipla.
Compilação:
hbmk2 test.hbp hwgui.hbc
hbmk2 test.hbp hmge.hbc
hbmk2 test.hbp oohg.hbc
Se a LIB não tiver hbc, crie vazio.
Se a LIB exige compilar de outro jeito... veja como é, e se precisar, crie por exemplo -DHBMK_HAS_HWGUI, ou no BAT ou no PRG_FLAGS, ou onde a sua LIB deixar.
Ou se souber criar HBC, crie um.
Exemplo:
Código: Selecionar todos
@ 1, 0 SAY "Cod.Cliente" GET nCodCli
@ 1, 30 SAY cliente->Nome
"Cod.Cliente" o equivalente a isso fica em CFG_FCAPTION
nCodCli o equivalente a isso fica em CFG_FVALUE
cliente->Nome o equivalente a isso seria a tabela CFG_VTABLE e o campo CFG_VSHOW
Na tabela aonde lê e grava seria o CFG_VNAME
Em GUI, vai usar um objeto pra esse primeiro texto, e não importa o nome
Em GUI, o objeto do get é CFG_FCONTROL
Em GUI, aonde vai o segundo texto precisa atualização, então precisa saber o nome, vai em CFG_VCONTROL
Além desses, tem lá tipo, tamanho e decimais de cada campo, e tamanho desse texto que vai ser mostrado quando pesquisa.
No final, o array só contém as variáveis comuns de qualquer aplicativo, a única diferença é que estão num array.
A lógica do "gerador" serve pra qualquer LIB, e as variáveis do gerador servem pra qualquer LIB.
Exemplo:
Para o gerador, o gerador sabe que clicando incluir/alterar precisa habilitar/desabilitar os "GETs".
Cada LIB é que vai dizer como habilita/desabilita um "GET", o que precisa ser feito é colocar o fonte pra isso.
E o mesmo para os demais eventos.
Está ficando organizado, na medida do possível:
test.prg - entrada geral
frm_createdbf.prg - criar dbfs e configuração simples
frm_mainmenu.prg - menu principal dos dbfs
frm_main.prg - entrada
frm_class.prg - classe geral
frm_createfrm.prg - criar janela de dialog
frm_createbutton.prg - criar buttons
frm_createedit.prg - criar textbox/label
frm_updateedit.prg - atualização dos textbox
frm_print.prg - relatórios
frm_preview.prg - preview de relatórios
Algumas funções equivalem a métodos, foi só uma forma de deixar em fonte separado.
Isso eliminou a herança múltipla.
Compilação:
hbmk2 test.hbp hwgui.hbc
hbmk2 test.hbp hmge.hbc
hbmk2 test.hbp oohg.hbc
Se a LIB não tiver hbc, crie vazio.
Se a LIB exige compilar de outro jeito... veja como é, e se precisar, crie por exemplo -DHBMK_HAS_HWGUI, ou no BAT ou no PRG_FLAGS, ou onde a sua LIB deixar.
Ou se souber criar HBC, crie um.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Gerador/criação de telas/executor
Código: Selecionar todos
@ nCol2, nRow2 GET aItem[ CFG_TOBJ ] ;
VAR aItem[ CFG_VALUE ] OF iif( ::lWithTab, oTab, ::oDlg ) ;
SIZE aItem[ CFG_FLEN ] * 12, 20 ;
STYLE WS_DISABLED + iif( aItem[ CFG_FTYPE ] == "N", ES_RIGHT, ES_LEFT ) ;
MAXLENGTH aItem[ CFG_FLEN ] ;
PICTURE PictureFromValue( aItem ) ;
VALID { || OkCurrent( aItem, Self ) }
Sabem o que isso significa ?
Tá igual um aplicativo.
Está validando o código chave do arquivo atual.
Também está validando aquele outro, que pesquisa em outra tabela.
Sabém o que isso significa ?
Já simula cadastro de clientes, fornecedores, produtos, financeiro, estoque, contabilidade, etc.
É quase o aplicativo inteiro.
É um ótimo ambiente de teste, é quase o mesmo que testar o aplicativo pronto.
E exige muito pouco de cada LIB GUI.
Código: Selecionar todos
STATIC FUNCTION OkCurrent( aItem, Self )
LOCAL nSelect, lEof
IF aItem[ CFG_ISKEY ]
SEEK aItem[ CFG_TOBJ ]:Value
IF ::cSelected == "INSERT"
IF ! Eof()
hwg_MsgInfo( "Código já cadastrado" )
RETURN .F.
ENDIF
ELSE
IF Eof()
hwg_MsgInfo( "Código não cadastrado" )
RETURN .F.
ENDIF
ENDIF
ENDIF
IF ! Empty( aItem[ CFG_VTABLE ] )
nSelect := Select()
SELECT ( Select( aItem[ CFG_VTABLE ] ) )
SEEK aItem[ CFG_TOBJ ]:Value
lEof := Eof()
aItem[ CFG_VOBJ ]:SetText( FieldGet( FieldNum( aItem[ CFG_VSHOW ] ) ) )
SELECT ( nSelect )
IF lEof
hwg_MsgInfo( "Código não cadastrado" )
RETURN .F.
ENDIF
ENDIF
RETURN .T.
Se o campo é chave ( ISKEY ) pesquisa na tabela atual. SEEK uai, não tem o que inventar, ou encontra ou não encontra.
Se é campo de outra tabela: na configuração temos a tabela onde pesquisar e o que mostrar.
É SEEK e pegar o campo uai, não tem o que inventar.
Acrescentei também a variável :cSelected, pra identificar se está ocorrendo inclusão ou alteração.
Ela é preenchida com 'INSERT" ou "EDIT" quando clica em inclui/altera e é alterada pra "NONE" quando clica em save/cancel
Tudo coisa simples, mas que causa um grande impacto ver funcionando.
É só ir fazendo mexidas simples, que vai avançando o gerador e o uso das LIBs.
Pra testar isso com certeza precisei mexer em alguma lib, usei a hwgui pra testar o funcionamento disso.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Gerador/criação de telas/executor
Tudo isso é interessante.
Cheguei a dividir a classe, pro fonte ficar menos poluído.
Teve fonte que não deu pra dividir.
#ifdef no fonte estava deixando tudo poluido demais, tinha hora que eu ia mexer numa lib, e mexia na lib errada, estragava ao invés de melhorar.
Se isso tava dando trabalho, era encontrar outra forma de fazer, então criei essas funções.
Lembram aquilo que comento aqui:
deixar fontes fáceis
Então, é isso que estou fazendo, conforme o que vai acontecendo, vou procurando deixar os fontes mais fáceis de mexer.
Olhando a situação atual:
Parece uma LIB universal, sintaxe universal, pra trabalhar com qualquer LIB, tanto faz a LIB.
Decido qual LIB vai ser usada durante a compilação.
Sei lá o que vai acontecer, continuo apenas trabalhando no gerador e aprendendo a usar as LIBs.
Apenas o que já está acontecendo está muito louco.
Cheguei a dividir a classe, pro fonte ficar menos poluído.
Teve fonte que não deu pra dividir.
#ifdef no fonte estava deixando tudo poluido demais, tinha hora que eu ia mexer numa lib, e mexia na lib errada, estragava ao invés de melhorar.
Se isso tava dando trabalho, era encontrar outra forma de fazer, então criei essas funções.
Lembram aquilo que comento aqui:
deixar fontes fáceis
Então, é isso que estou fazendo, conforme o que vai acontecendo, vou procurando deixar os fontes mais fáceis de mexer.
Olhando a situação atual:
Parece uma LIB universal, sintaxe universal, pra trabalhar com qualquer LIB, tanto faz a LIB.
Decido qual LIB vai ser usada durante a compilação.
Sei lá o que vai acontecer, continuo apenas trabalhando no gerador e aprendendo a usar as LIBs.
Apenas o que já está acontecendo está muito louco.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Gerador/criação de telas/executor
Porque desse jeito e porque várias LIBs de uma vez:
Exemplo deste instante:
Os buttons deveriam ser desativados mas não desativa.
Será fonte do aplicativo ? será a LIB ? aonde procurar ?
Compilando com minigui não funciona.
Compilando com hwgui funciona.
Então o fonte do aplicativo está certo.
Falta alguma coisa na minigui.....
Olhem lá.... ainda não criei a rotina pra minigui de ativar/desativar button.
O que poderia ser um problemão, uma pesquisa complicada em fonte, trata-se apenas de algumas linhas no fonte de ativar/desativar.
Testando todas as LIBs de uma vez, uma ajuda a outra pra resolver problemas.
É como eu disse:
Esse modo de aprender LIB gráfica é o que eu precisava, e acabou ficando melhor do que a encomenda.
Era um saco aprender uma LIB.
Agora está empolgante aprender várias de uma vez, e até usar uma pra empurrar a outra.
Nota: além de não ter, ainda tá com nome errado, devo ter copiado o esqueleto e esquecido de alterar o nome kkkkk
Exemplo deste instante:
Os buttons deveriam ser desativados mas não desativa.
Será fonte do aplicativo ? será a LIB ? aonde procurar ?
Compilando com minigui não funciona.
Compilando com hwgui funciona.
Então o fonte do aplicativo está certo.
Falta alguma coisa na minigui.....
Olhem lá.... ainda não criei a rotina pra minigui de ativar/desativar button.
O que poderia ser um problemão, uma pesquisa complicada em fonte, trata-se apenas de algumas linhas no fonte de ativar/desativar.
Testando todas as LIBs de uma vez, uma ajuda a outra pra resolver problemas.
É como eu disse:
Esse modo de aprender LIB gráfica é o que eu precisava, e acabou ficando melhor do que a encomenda.
Era um saco aprender uma LIB.
Agora está empolgante aprender várias de uma vez, e até usar uma pra empurrar a outra.
Nota: além de não ter, ainda tá com nome errado, devo ter copiado o esqueleto e esquecido de alterar o nome kkkkk
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Gerador/criação de telas/executor
Código: Selecionar todos
FUNCTION hmge_EnableButton( xDlg, xControl, lEnable )
SetProperty( xDlg, xControl, "ENABLED", lEnable )
RETURN Nil
Uma linha e resolvido o problema de infinitas telas.
Pra OOHG é a mesma solução, duas LIBs resolvidas de uma vez.
Agora tem outro: está iniciando com tudo habilitado e não deveria.
Acontece com todas as LIBs.
Então só pode ser o fonte do aplicativo.
Provavelmente falta colocar lá no INIT da Dialog.
Código: Selecionar todos
CreateDialog( @::oDlg, 0, 0, ::nDlgWidth, ::nDlgHeight, ::cTitle, { || ::EditOff(), ::UpdateEdit() } )
Estão entendendo como está interessante trabalhar assim ?
Estou trabalhando no "meu aplicativo", apenas corrigindo pequenos bugs, o aplicativo está cada vez mais legal.
E as LIBs GUI ? uma coisinha daqui, uma coisinha dali, estão indo em frente também... TODAS.
Agora é só questão de tempo.
Todo mundo deveria criar um gerador assim, é um ambiente de testes sensacional.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Gerador/criação de telas/executor
Pra dar uma idéia de fazer um executor:
Vai partir do DBF ? dbStruct()
Um primeiro esqueleto: get no próprio DBF
É um ponto de partida.
Pode ser um hobby, pra treinar programação usando coisas não tão comuns.
Pra ficar craque em array, por exemplo.
com uma lógica parecida com a que usei no gerador:
Uma única função de SAY/GET fazendo tudo.
Basicamente seria isso.
Vai partir do DBF ? dbStruct()
Um primeiro esqueleto: get no próprio DBF
Código: Selecionar todos
USE arquivo
aStruList := dbStruct()
CLS
@ 1, 1 SAY ""
FOR EACH aField IN aStruList
@ Row() + 1, 0 SAY aField[ F_NAME ]
@ Row(), Col() + 2 GET &( aField[ F_NAME ] )
NEXT
READ
Pode ser um hobby, pra treinar programação usando coisas não tão comuns.
Pra ficar craque em array, por exemplo.
com uma lógica parecida com a que usei no gerador:
Código: Selecionar todos
USE arquivo
aStruList := dbStruct()
CLS
@ 1, 1 SAY ""
FOR EACH aField IN aStruList
CriaGet( aField[ F_NAME ] )
NEXT
READ
FUNCTION CriaGet( cNome )
@ Row() + 1, 0 SAY cNome
@ Row(), Col() + 2 GET &( cNome )
RETURN Nil
Basicamente seria isso.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Gerador/criação de telas/executor
Olhem que coisa feia mais linda:
Fonte de validação genérica
Na compilação com hwgui
Na compilação com HMG Extended
Na compilação com OOHG
num cadastro de produtos
Num cadastro de financeiro
Num cadastro de estoque
Nota: pesquisando porque não mostrou produto no estoque
Não é uma coisa feia ?
Mas não é lindo parecer que é um aplicativo pronto ?
E com opção de 3 LIBs diferentes !!!
Fonte de validação genérica
Código: Selecionar todos
STATIC FUNCTION OkCurrent( aItem, Self )
LOCAL nSelect, lFound := .T., xValue
xValue := GetTextboxValue( ::oDlg, aItem[ CFG_FCONTROL ] )
IF aItem[ CFG_ISKEY ]
SEEK xValue
IF ::cSelected == "INSERT"
IF ! Eof()
MsgGeneric( "Código já cadastrado" )
SetFocusAny( ::oDlg, aItem[ CFG_FCONTROL ] ) // hwgui do not need this
RETURN .F.
ENDIF
ELSE
IF Eof()
MsgGeneric( "Código não cadastrado" )
RETURN .F.
ENDIF
ENDIF
ENDIF
IF ! Empty( aItem[ CFG_VTABLE ] )
nSelect := Select()
SELECT ( Select( aItem[ CFG_VTABLE ] ) )
SEEK xValue
lFound := ! Eof()
xValue := FieldGet( FieldNum( aItem[ CFG_VSHOW ] ) )
SELECT ( nSelect )
IF ! lFound
MsgGeneric( "Código não cadastrado" )
SetFocusAny( ::oDlg, aItem[ CFG_FCONTROL ] ) // hwgui do not need this
ENDIF
SetLabelValue( ::oDlg, aItem[ CFG_VCONTROL ], xValue )
ENDIF
RETURN lFound
Não é uma coisa feia ?
Mas não é lindo parecer que é um aplicativo pronto ?
E com opção de 3 LIBs diferentes !!!
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Gerador/criação de telas/executor
Por incrível que pareça, não consigo resolver esse problema da tela de estoque.
As configurações de pesquisa seguem o mesmo esquema.
Isso descarta rotina errada.
Também segui pelo debug e dá certo.
A criação das telas seguem o mesmo esquema.
Mesma coisa, se funciona pra um, deveria funcionar pra todos.
É só no estoque que não está funcionando, e mesmo assim, ESCADASTRO funciona, os outros não.
As configurações de pesquisa seguem o mesmo esquema.
Isso descarta rotina errada.
Também segui pelo debug e dá certo.
Código: Selecionar todos
aSeekList := { ;
{ "JPCADASTRO", "CDVENDEDOR", "JPVENDEDOR", "IDVENDEDOR", "VENDNOME" }, ;
{ "JPCADASTRO", "CDPORTADOR", "JPPORTADOR", "IDPORTADOR", "PORTNOME" }, ;
{ "JPCADASTRO", "CDUF", "JPUF", "UFUF", "UFNOME" }, ;
{ "JPPRODUTO", "IEUNIDADE", "JPUNIDADE", "IDUNIDADE", "UNIDNOME" }, ;
{ "JPPRODUTO", "IEGRUPO", "JPGRUPO", "IDGRUPO", "GRUPONOME" }, ;
{ "JPESTOQUE", "ESCADASTRO", "JPCADASTRO", "IDCADASTRO", "CDNOME" }, ;
{ "JPESTOQUE", "ESPRODUTO", "JPPRODUTO", "IDPRODUTO", "ESNOME" }, ;
{ "JPESTOQUE", "ESPORTADOR", "JPPORTADOR", "IDPORTADOR", "PORTNOME" }, ;
{ "JPESTOQUE", "ESGRUPO", "JPGRUPO", "IDGRUPO", "GRUPONOME" }, ;
{ "JPFINANC", "FICADASTRO", "JPCADASTRO", "IDCADASTRO", "CDNOME" }, ;
{ "JPFINANC", "FIPORTADOR", "JPPORTADOR", "IDPORTADOR", "PORTNOME" } }
Mesma coisa, se funciona pra um, deveria funcionar pra todos.
É só no estoque que não está funcionando, e mesmo assim, ESCADASTRO funciona, os outros não.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Gerador/criação de telas/executor
ACHEI
Como pude esquecer ....
Estava compilando com HWGUI, foi só compilar com minigui.
O problema só aconteceu com HWGUI.
Não sei porque, tinha colocado de volta esse TRANSPARENT.
Com isso HWGUI não funciona direito.
Se não fosse o uso de várias LIBs, não acharia isso nunca.
Já estava começando a pensar em reescrever tudo....
Vou ter que deixar esse jeito feio de 3D até ajustarem borda na hwgui, senão, daqui uns tempos vou esquecer e pensar que é problema de novo.
Como pude esquecer ....
Estava compilando com HWGUI, foi só compilar com minigui.
O problema só aconteceu com HWGUI.
Código: Selecionar todos
STYLE WS_BORDER // TRANSPARENT
Com isso HWGUI não funciona direito.
Se não fosse o uso de várias LIBs, não acharia isso nunca.
Já estava começando a pensar em reescrever tudo....
Vou ter que deixar esse jeito feio de 3D até ajustarem borda na hwgui, senão, daqui uns tempos vou esquecer e pensar que é problema de novo.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Gerador/criação de telas/executor
Olá!
Na Hwgui use STYLES onde quiser ai é no @ say ?
Saudações,
Itamar M. Lins Jr.
Na Hwgui use STYLES onde quiser ai é no @ say ?
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Gerador/criação de telas/executor
Olá!
STYLE WS_BORDER COLOR 10485760 BACKCOLOR 12507070
Tem cores...
Saudações,
Itamar M. Lins Jr.
STYLE WS_BORDER COLOR 10485760 BACKCOLOR 12507070
Tem cores...
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
