"Começando" com GUI
Moderador: Moderadores
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
"Começando" com GUI
Já nem sei mais aonde postar.... rs
Só sei que pode ser interessante pra muitos.
GTWVT é interessante, porque faz parte do core do Harbour, funciona em Windows ou Linux.
GTWVG é uma GTWVT com adição de API Windows, é a que uso com multithread.
Com GTWVG e multithread tenho janelas à vontade, redimensionamento automático, não importa se o monitor é de 14 polegadas, 40 polegadas, 4k, múltiplos monitores, etc.
Agora quero partir pro visual melhorado.
Mas chega uma hora que cansa testar exemplos que não funcionam, exemplos inúteis, ou falta de exemplos.
Continuo achando que a GTWVG poderia ser melhor que todas as outras juntas, mas sem conhecimento de linguagem C, e sem ajuda, não tem muito mais o que fazer.
Agora resta usar as LIBs que tem.
Dependendo do recurso, considero as LIBs FRACAS comparadas à GTWVG, mas tudo bem, talvez juntas dê pra fazer alguma coisa melhorada.
"Talvez", porque com certeza vai faltar o padrão do Harbour 3.4.
A coisa é relativamente simples:
Você tem uma janela, essa janela tem lá linha inicial, coluna inicial, linha final, coluna final.
Fazendo os cálculos se obtém o tamanho da janela, e dá pra usar pra algumas coisas.
No Harbour 3.4 isso é normal, mas não no Harbour 3.2, porque certas rotinas de API são incompatíveis com os tipos numéricos do Harbour.
Tá na hora de usar HARBOUR como o HARBOUR é !!! e não como as LIBs pensam que é !!! (parece trecho do filme Matrix... rs)
Provavelmente vai ter o mesmo problema nas LIBs....
Não quero aprender linguagem C.
Ver PRG ruim já é mais que suficiente.
Aprender C... aprender conversão pra Harbour... aprender API Windows... Parece que aprender outra linguagem de programação seria muito menos trabalhoso do que usar Harbour desse jeito...
Mas vamos ao que interessa:
Quero entrar no visual Windows.
Acredito que vou fazer diferente de todos, mas que interessará a muitos: o programa principal continuará sendo GTWVG, e vai servir de base pra configurar as janelas da(s) LIB(s) GUI (se não obrigar(em) a usar C).
Com certeza a allgui deve ajudar nessa "empreitada".
Se possível, precisaria de dois exemplos não tão básicos pra começar:
- Um browse com opção de ir digitando e filtrando (ou pelo menos a idéia de como isso pode ser feito), e ao teclar ENTER selecionar um conteúdo a ser especificado (código por exemplo)
- O equivalente a say/gets com validação
Tanto faz a LIB usada nos fontes, acho que preferencialmente HWGUI ou HMG Extended.
Só imagino que a parte que possa complicar será no browse deixar a janela modal com relação à janela GTWVG, e retornar esse valor pra janela GTWVG.
Apesar da HWGUI ter poucos exemplos, a tstbrw.prg serviu pra isto.
Já na HMG Extended, não consegui identificar nenhum exemplo.
Como é salada, e vai interessar só pra quem usa console... acho que aqui pode ser interessante.
Só sei que pode ser interessante pra muitos.
GTWVT é interessante, porque faz parte do core do Harbour, funciona em Windows ou Linux.
GTWVG é uma GTWVT com adição de API Windows, é a que uso com multithread.
Com GTWVG e multithread tenho janelas à vontade, redimensionamento automático, não importa se o monitor é de 14 polegadas, 40 polegadas, 4k, múltiplos monitores, etc.
Agora quero partir pro visual melhorado.
Mas chega uma hora que cansa testar exemplos que não funcionam, exemplos inúteis, ou falta de exemplos.
Continuo achando que a GTWVG poderia ser melhor que todas as outras juntas, mas sem conhecimento de linguagem C, e sem ajuda, não tem muito mais o que fazer.
Agora resta usar as LIBs que tem.
Dependendo do recurso, considero as LIBs FRACAS comparadas à GTWVG, mas tudo bem, talvez juntas dê pra fazer alguma coisa melhorada.
"Talvez", porque com certeza vai faltar o padrão do Harbour 3.4.
A coisa é relativamente simples:
Você tem uma janela, essa janela tem lá linha inicial, coluna inicial, linha final, coluna final.
Fazendo os cálculos se obtém o tamanho da janela, e dá pra usar pra algumas coisas.
No Harbour 3.4 isso é normal, mas não no Harbour 3.2, porque certas rotinas de API são incompatíveis com os tipos numéricos do Harbour.
Tá na hora de usar HARBOUR como o HARBOUR é !!! e não como as LIBs pensam que é !!! (parece trecho do filme Matrix... rs)
Provavelmente vai ter o mesmo problema nas LIBs....
Não quero aprender linguagem C.
Ver PRG ruim já é mais que suficiente.
Aprender C... aprender conversão pra Harbour... aprender API Windows... Parece que aprender outra linguagem de programação seria muito menos trabalhoso do que usar Harbour desse jeito...
Mas vamos ao que interessa:
Quero entrar no visual Windows.
Acredito que vou fazer diferente de todos, mas que interessará a muitos: o programa principal continuará sendo GTWVG, e vai servir de base pra configurar as janelas da(s) LIB(s) GUI (se não obrigar(em) a usar C).
Com certeza a allgui deve ajudar nessa "empreitada".
Se possível, precisaria de dois exemplos não tão básicos pra começar:
- Um browse com opção de ir digitando e filtrando (ou pelo menos a idéia de como isso pode ser feito), e ao teclar ENTER selecionar um conteúdo a ser especificado (código por exemplo)
- O equivalente a say/gets com validação
Tanto faz a LIB usada nos fontes, acho que preferencialmente HWGUI ou HMG Extended.
Só imagino que a parte que possa complicar será no browse deixar a janela modal com relação à janela GTWVG, e retornar esse valor pra janela GTWVG.
Apesar da HWGUI ter poucos exemplos, a tstbrw.prg serviu pra isto.
Já na HMG Extended, não consegui identificar nenhum exemplo.
Como é salada, e vai interessar só pra quem usa console... acho que aqui pode ser interessante.
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
"Começando" com GUI
primeiro fonte, simples, não definido no fonte, mas vai usar GTWVG, o SET KEY chama o browse.
Até aqui, qualquer console/LIB é igual, qualquer aplicativo tem isto.
Até aqui, qualquer console/LIB é igual, qualquer aplicativo tem isto.
Código: Selecionar todos
#include "inkey.ch"
FUNCTION Main()
LOCAL nValor := 0, nValor1 := 0, nValor2 := 0, nQtCalc := 0, cTexto := Space(30)
SetKey( K_F9, { || Pesquisa( @cTexto ) } )
SetMode( 15, 80 )
CLS
@ 1, 0 SAY "Texto..:" GET cTexto PICTURE "@!"
@ 3, 0 SAY "Valor 1:" GET nValor1 PICTURE "999,999,999.99"
@ 5, 0 SAY "Valor 2:" GET nValor2 PICTURE "999,999,999.99"
@ 7, 0 SAY "Outro..:" GET nValor PICTURE "999,999,999.99"
@ 9, 0 SAY "Mais um:" GET nQtCalc PICTURE "999,999,999.99"
READ
RETURN NIL
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
"Começando" com GUI
Segundo fonte.... Um browse, mas em hwgui.
peguei o sample\tstbrw.prg como base pro teste.
Compilação, mas por preguiça vou colocar como faço na allgui.... rs
E o resultado, que até o papel de parede ficou olhando... rs
Um aplicativo texto, que já usa um browse GUI.
Teclou F9, abre o browse, e teclando ENTER, já preenche o GET, do jeito que faço com GTWVG, exceto pela janela em separado.
No ENTER fecha o browse, é que chamei novamente o browse pra deixar preenchido pra cópia da tela.
Pergunto:
Algum exemplo disponível pra poder um browse parecido com HMG Extended?
Queria fazer agora com HMG Extended, mas cansa procurar exemplo e testar exemplo com erro.
Se possível com a opção de digitar iniciais e já ir filtrando, que esse da hwgui vai permitir porque segue o padrão do tbrowse.
Só lembrando:
Dá pra misturar tudo, HWGUI, HMG Extended, etc.
Nem sei em que divisão poderia postar isto, já que mistura tudo.
Mas é Harbour: o Harbour não limita uso de LIB, a LIB é que pode limitar.
A única certeza é que isto só é interessante pra quem não usa LIB nenhuma, assim como eu ainda não uso.
peguei o sample\tstbrw.prg como base pro teste.
Código: Selecionar todos
#include "windows.ch"
#include "guilib.ch"
PROCEDURE Pesquisa( cText )
LOCAL oModDlg, oBrw1
LOCAL aSample1 := { { .T., "Alex", 17 }, { .T., "Victor", 42 }, { .T., "John", 31 } }
INIT DIALOG oModDlg TITLE "About" ;
AT 190, 10 SIZE 400, 240
@ 20, 30 BROWSE oBrw1 ARRAY SIZE 180, 110 ;
STYLE WS_BORDER + WS_VSCROLL + WS_HSCROLL
@ 80, 180 OWNERBUTTON ON CLICK { || hwg_EndDialog() } ;
SIZE 180, 35 FLAT ;
TEXT "Close" COLOR hwg_ColorC2N( "0000FF" )
hwg_CREATEARLIST( oBrw1, aSample1 )
oBrw1:bKeyDown := { | o, key | BrwKey( o, key, @cText ) }
ACTIVATE DIALOG oModDlg
RETURN NIL
STATIC FUNCTION BrwKey( oBrw, key, cText )
IF key == 13
cText := oBrw:aArray[ oBrw:nCurrent, 2 ]
hwg_EndDialog()
ENDIF
RETURN .T.
Código: Selecionar todos
hbmk2 test test2 gtwvg.hbc hwgui.hbc
E o resultado, que até o papel de parede ficou olhando... rs
Um aplicativo texto, que já usa um browse GUI.
Teclou F9, abre o browse, e teclando ENTER, já preenche o GET, do jeito que faço com GTWVG, exceto pela janela em separado.
No ENTER fecha o browse, é que chamei novamente o browse pra deixar preenchido pra cópia da tela.
Pergunto:
Algum exemplo disponível pra poder um browse parecido com HMG Extended?
Queria fazer agora com HMG Extended, mas cansa procurar exemplo e testar exemplo com erro.
Se possível com a opção de digitar iniciais e já ir filtrando, que esse da hwgui vai permitir porque segue o padrão do tbrowse.
Só lembrando:
Dá pra misturar tudo, HWGUI, HMG Extended, etc.
Nem sei em que divisão poderia postar isto, já que mistura tudo.
Mas é Harbour: o Harbour não limita uso de LIB, a LIB é que pode limitar.
A única certeza é que isto só é interessante pra quem não usa LIB nenhuma, assim como eu ainda não uso.
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
"Começando" com GUI
Só pra lembrar:
Tenho uma única rotina de browse para esse tipo de browse no aplicativo inteiro.
Basta alterar uma única rotina, e centenas de browses vão ficar gráficos.
É sobre isso que eu escrevo sempre sobre revisar, organizar e simplificar os fontes, antes de complicar.
Dá trabalho mudar pra LIB gráfica? depende dos fontes.
Dá trabalho trocar de Clipper pra Harbour? depende dos fontes.
Fonte organizado e padronizado é a resposta pra tudo.
Depois, só inventar cores, gráficos, etc. e melhorar mais ainda.
Falta testar a parte de arquivos, apesar que nesse caso não vai ser diferente do que normalmente a gente já usa, e deve funcionar sem problemas.
Acredito que isto vai despertar interesse.
Seria interessante ter exemplos em LIBs diferentes, antes que usem este em hwgui só porque foi o primeiro que apareceu.
Já que as LIBs não se juntam, vamos juntá-las. Quem sabe a gente não causa uma revolução nisso tudo, mostrando coisas que não tinham pensado antes.
Tenho uma única rotina de browse para esse tipo de browse no aplicativo inteiro.
Basta alterar uma única rotina, e centenas de browses vão ficar gráficos.
É sobre isso que eu escrevo sempre sobre revisar, organizar e simplificar os fontes, antes de complicar.
Dá trabalho mudar pra LIB gráfica? depende dos fontes.
Dá trabalho trocar de Clipper pra Harbour? depende dos fontes.
Fonte organizado e padronizado é a resposta pra tudo.
Depois, só inventar cores, gráficos, etc. e melhorar mais ainda.
Falta testar a parte de arquivos, apesar que nesse caso não vai ser diferente do que normalmente a gente já usa, e deve funcionar sem problemas.
Acredito que isto vai despertar interesse.
Seria interessante ter exemplos em LIBs diferentes, antes que usem este em hwgui só porque foi o primeiro que apareceu.
Já que as LIBs não se juntam, vamos juntá-las. Quem sabe a gente não causa uma revolução nisso tudo, mostrando coisas que não tinham pensado antes.
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/
"Começando" com GUI
Quintas,
No exemplo que está em C:\MiniGUI\SAMPLES\Applications\Super , tem a pesquisa que você quer, na tela de Produtos, opção Incluir, nos campos Categoria, Sub-Categoria e Impostos, pressionando ENTER aparece outra janela com um Browse e pesquisa letra-a-letra.
Abraços
No exemplo que está em C:\MiniGUI\SAMPLES\Applications\Super , tem a pesquisa que você quer, na tela de Produtos, opção Incluir, nos campos Categoria, Sub-Categoria e Impostos, pressionando ENTER aparece outra janela com um Browse e pesquisa letra-a-letra.
Abraços
Marcelo Neves
https://produto.mercadolivre.com.br/MLB ... 0067609615
whatsapp (41) 99786-3995
http://harbourdeveloper.blogspot.com
marcelo.souza.das.neves@gmail.com
https://produto.mercadolivre.com.br/MLB ... 0067609615
whatsapp (41) 99786-3995
http://harbourdeveloper.blogspot.com
marcelo.souza.das.neves@gmail.com
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
"Começando" com GUI
Valeu.
Como pude esquecer de olhar o aplicativo completo.... rs
Como pude esquecer de olhar o aplicativo completo.... rs
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/
"Começando" com GUI
Como você é um programador INOXIDÁVEL , com certeza vai sair coisa melhor !
Marcelo Neves
https://produto.mercadolivre.com.br/MLB ... 0067609615
whatsapp (41) 99786-3995
http://harbourdeveloper.blogspot.com
marcelo.souza.das.neves@gmail.com
https://produto.mercadolivre.com.br/MLB ... 0067609615
whatsapp (41) 99786-3995
http://harbourdeveloper.blogspot.com
marcelo.souza.das.neves@gmail.com
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
"Começando" com GUI
Quando se trata das LIBs GUI... sou principiante.
São só testes baseados em fontes existentes.
São apenas ajustes de código fonte Harbour, e nada adicional.
Repare bem que vai confirmar: apenas estou usando o conhecimento do Harbour, e não o conhecimento das LIBs.
Lógico... conforme o fonte/resultado for empolgando, aí dá pra se aprofundar cada vez mais.
Por enquanto estou fazendo apenas os testes superficiais, sem entrar fundo em nenhuma.
Agora vamos lá... está incompleto o da HMGE, justamente porque não sei o que poderia usar.
Uma importante é: SET WINDOW MAIN OFF, que não obriga Main() em HMGE.
O módulo principal foi alterado, mas só por causa de usar DBF. Continua do jeito console tradicional.
O fonte HMGE. Apenas usei um pronto, não sei dizer o que pode ser eliminado, ou se poderia ser usado o DBF diretamente.
Também não sei como detectar o ENTER, e obter o elemento atual do array. É mais pra mostrar que a mistura é possível.
Devido às cores, uma alteração prévia que eu tinha feito no superchief, eliminando variáveis e deixando em CH.
Compilação, parecida com a anterior, só altera a LIB.
E resultado com F9, aparecendo o browse GUI.
Coindidiu até de um papel de parede de olho no resultado.... rs
Acho que isso abre muitas possibilidades pra conversão de um aplicativo.
Permite a migração parcial, sempre deixando em uso no cliente.
Bom pra já testar na prática cada alteração.
Quanto à compilação, é o de sempre: indicar LIBs, indicar pastas de LIB, pastas de include, etc.
É que criei os HBCs de cada GUI, com essa informação.
Algo como usar os antigos LNK do Clipper, só altera a sintaxe de se fazer isso.
Algumas das LIBs até já tem isso pronto.
É pensar em modo Clipper/Harbour, e tentar fazer que a LIB trabalhe do jeito que você quer.
Deve ter jeito melhor, mas antes de entrar fundo já dá pra "sentir" como será o trabalho pra fazer, e o resultado.
São só testes baseados em fontes existentes.
São apenas ajustes de código fonte Harbour, e nada adicional.
Repare bem que vai confirmar: apenas estou usando o conhecimento do Harbour, e não o conhecimento das LIBs.
Lógico... conforme o fonte/resultado for empolgando, aí dá pra se aprofundar cada vez mais.
Por enquanto estou fazendo apenas os testes superficiais, sem entrar fundo em nenhuma.
Agora vamos lá... está incompleto o da HMGE, justamente porque não sei o que poderia usar.
Uma importante é: SET WINDOW MAIN OFF, que não obriga Main() em HMGE.
O módulo principal foi alterado, mas só por causa de usar DBF. Continua do jeito console tradicional.
Código: Selecionar todos
#include "inkey.ch"
FUNCTION Main()
LOCAL nValor := 0, nValor1 := 0, nValor2 := 0, nQtCalc := 0, cTexto := Space(30), GetList := {}
AbreArquivos()
SetKey( K_F9, { || Pesquisa( @cTexto ) } )
SetMode( 15, 80 )
CLS
@ 1, 0 SAY "Texto..:" GET cTexto PICTURE "@!"
@ 3, 0 SAY "Valor 1:" GET nValor1 PICTURE "999,999,999.99"
@ 5, 0 SAY "Valor 2:" GET nValor2 PICTURE "999,999,999.99"
@ 7, 0 SAY "Outro..:" GET nValor PICTURE "999,999,999.99"
@ 9, 0 SAY "Mais um:" GET nQtCalc PICTURE "999,999,999.99"
READ
CLOSE DATABASES
RETURN NIL
STATIC FUNCTION AbreArquivos()
IF ! File( "test.dbf" )
dbCreate( "test.dbf", { ;
{ "CODIGO", "C", 5, 0 }, ;
{ "NOME", "C", 30, 0 } } )
ENDIF
USE test
IF ! File( "test.ntx" )
INDEX ON test->NOME TO test
ENDIF
SET INDEX TO test
RETURN NIL
Também não sei como detectar o ENTER, e obter o elemento atual do array. É mais pra mostrar que a mistura é possível.
Código: Selecionar todos
#include 'hmg.ch'
#include 'super.ch'
FUNCTION Pesquisa( cText )
SET WINDOW MAIN OFF
GOTO TOP
DEFINE WINDOW form_Pesquisa ;
AT 000,000;
WIDTH 800;
HEIGHT 605;
TITLE 'Pesquisa';
MODAL ;
NOSIZE ;
ON INIT pesquisar()
DEFINE splitbox
DEFINE GRID grid_pesquisa
PARENT form_pesquisa
COL 000
ROW 105
WIDTH 795
HEIGHT 430
HEADERS { 'Código', 'Nome' }
WIDTHS { 100, 650 }
FONTNAME 'verdana'
FONTSIZE 010
FONTBOLD .T.
BACKCOLOR COLOR_YELLOW_1
FONTCOLOR COLOR_BLACK_1
ONDBLCLICK Seleciona( @cText )
END GRID
END SPLITBOX
DEFINE LABEL rodape_001
PARENT form_pesquisa
COL 005
ROW 545
VALUE 'Digite sua pesquisa'
AUTOSIZE .T.
FONTNAME 'verdana'
FONTSIZE 010
FONTBOLD .T.
FONTCOLOR COLOR_GRAY_1
TRANSPARENT .T.
END LABEL
@ 540,160 TEXTBOX tbox_pesquisa;
OF form_pesquisa ;
HEIGHT 027;
WIDTH 300;
VALUE '';
MAXLENGTH 040;
FONT 'verdana' SIZE 010;
BACKCOLOR _FUNDO_GET;
FONTCOLOR _LETRA_GET_1;
UPPERCASE ;
ON CHANGE pesquisar()
ON KEY ESCAPE ACTION thiswindow.release
END WINDOW
form_pesquisa.center
form_pesquisa.activate
RETURN NIL
STATIC FUNCTION Seleciona( ... )
RETURN NIL
STATIC FUNCTION pesquisar()
LOCAL cPesq := alltrim( form_pesquisa.tbox_pesquisa.value )
LOCAL lGridFreeze := .T.
LOCAL nTamNomePesq := len( cPesq )
SEEK cPesq
IF lGridFreeze
form_pesquisa.grid_pesquisa.disableupdate
ENDIF
DELETE ITEM ALL FROM grid_pesquisa OF form_pesquisa
DO WHILE ! Eof()
IF substr( field->nome, 1, nTamNomePesq ) == cPesq
ADD ITEM { temp->Codigo, alltrim( temp->Nome ) } TO grid_pesquisa OF form_pesquisa
ELSEIF substr( field->nome, 1, nTamNomePesq ) > cPesq
EXIT
ENDIF
SKIP
ENDDO
IF lGridFreeze
form_pesquisa.grid_pesquisa.enableupdate
ENDIF
RETURN NIL
FUNCTION atualizar()
DELETE ITEM ALL FROM grid_pesquisa OF form_pesquisa
GOTO TOP
DO WHILE ! Eof()
ADD ITEM { temp->Codigo, alltrim( temp->Nome ) } TO grid_pesquisa OF form_pesquisa
SKIP
ENDDO
RETURN NIL
Código: Selecionar todos
#define COLOR_WHITE_1 { 255, 255, 255 }
#define COLOR_BLACK_1 { 000, 000, 000 }
#define COLOR_BLUE_1 { 108, 108, 255 }
#define COLOR_BLUE_2 { 000, 000, 255 }
#define COLOR_BLUE_3 { 032, 091, 164 }
#define COLOR_BLUE_4 { 023, 063, 115 }
#define COLOR_BLUE_5 { 071, 089, 135 }
#define COLOR_BLUE_6 { 000, 073, 148 }
#define COLOR_ORANGE_1 { 255, 163, 070 }
#define COLOR_GREEN_1 { 000, 094, 047 }
#define COLOR_GREEN_2 { 000, 089, 045 }
#define COLOR_GRAY_1 { 128, 128, 128 }
#define COLOR_GRAY_2 { 192, 192, 192 }
#define COLOR_GRAY_3 { 229, 229, 229 }
#define COLOR_GRAY_4 { 226, 226, 226 }
#define COLOR_GRAY_5 { 245, 245, 245 }
#define COLOR_RED_1 { 255, 000, 000 }
#define COLOR_RED_2 { 160, 000, 000 }
#define COLOR_RED_3 { 190, 000, 000 }
#define COLOR_YELLOW_1 { 255, 255, 225 }
#define COLOR_YELLOW_2 { 255, 255, 121 }
#define COLOR_BROWN_1 { 143, 103, 080 }
#define COLOR_CYAN_1 { 215, 255, 255 }
#define _FUNDO_GET COLOR_ORANGE_1
#define _LETRA_GET_1 COLOR_YELLOW_1
Compilação, parecida com a anterior, só altera a LIB.
Código: Selecionar todos
hbmk2 *.prg gtwvg.hbc hmge.hbc
Coindidiu até de um papel de parede de olho no resultado.... rs
Acho que isso abre muitas possibilidades pra conversão de um aplicativo.
Permite a migração parcial, sempre deixando em uso no cliente.
Bom pra já testar na prática cada alteração.
Quanto à compilação, é o de sempre: indicar LIBs, indicar pastas de LIB, pastas de include, etc.
É que criei os HBCs de cada GUI, com essa informação.
Algo como usar os antigos LNK do Clipper, só altera a sintaxe de se fazer isso.
Algumas das LIBs até já tem isso pronto.
É pensar em modo Clipper/Harbour, e tentar fazer que a LIB trabalhe do jeito que você quer.
Deve ter jeito melhor, mas antes de entrar fundo já dá pra "sentir" como será o trabalho pra fazer, e o resultado.
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/
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
"Começando" com GUI
Veja um outro exemplo em MiniGui Extended:JoséQuintas escreveu:- Um browse com opção de ir digitando e filtrando (ou pelo menos a idéia de como isso pode ser feito), e ao teclar ENTER selecionar um conteúdo a ser especificado (código por exemplo)
https://pctoledo.org/forum/fileba ... t=c&page=1
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
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
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
"Começando" com GUI
Os dois exemplos anteriores em um único.
Criei esta rotina, além das já existentes.
É só pra exemplo.
A cada F9 pode aparecer a pesquisa ou em HMGE ou em HWGUI.
São as mesmas rotinas anteriores, e as mesmas telas anteriores, mas tudo no mesmo aplicativo/EXE, rodando ao mesmo tempo.
Necessita modificar levemente HWGUI e HMGE, deixando errorsys.prg única e renomeando algumas funções de LIB.
Acrescentei o EXE, porque não dá pra usar as LIBs normais neste.
Resumindo o projeto:
Aplicativo básico GTWVG, que faz uso de browse em HMGE e browse em HWGUI.
Não faz uso de multithread.
Aqui compilo usando:
hbmk2 *.prg hwgui.hbc hmge.hbc
Nota: Curioso que se acrescentar gtwvg.hbc dá conflito entre as LIBs.
Criei esta rotina, além das já existentes.
Código: Selecionar todos
FUNCTION Pesquisa( cText )
STATIC nCont := 1
DO CASE
CASE nCont == 1 ; PesquisaHWgui( @cText )
CASE nCont == 2 ; PesquisaHmge( @cText )
ENDCASE
nCont := iif( nCont == 1, 2, 1 )
RETURN NIL
A cada F9 pode aparecer a pesquisa ou em HMGE ou em HWGUI.
São as mesmas rotinas anteriores, e as mesmas telas anteriores, mas tudo no mesmo aplicativo/EXE, rodando ao mesmo tempo.
Necessita modificar levemente HWGUI e HMGE, deixando errorsys.prg única e renomeando algumas funções de LIB.
Acrescentei o EXE, porque não dá pra usar as LIBs normais neste.
Resumindo o projeto:
Aplicativo básico GTWVG, que faz uso de browse em HMGE e browse em HWGUI.
Não faz uso de multithread.
Aqui compilo usando:
hbmk2 *.prg hwgui.hbc hmge.hbc
Nota: Curioso que se acrescentar gtwvg.hbc dá conflito entre as LIBs.
- Anexos
-
test.zip- (787.83 KiB) Baixado 210 vezes
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
"Começando" com GUI
Pra quem estiver interessado nessas misturas:
Pra forçar entrar a GTWVG no aplicativo, independente se vai usar recursos dela ou não:
Pra não ter conflito com as demais, se não usar nada específico da GTWVG,, só indicar a LIB -lgtwvg ao invés de gtwvg.hbc
O ideal é criar pastas diferentes pros fontes em cada GUI pra não ter conflito dos CH.
A partir daí, pode usar as LIBs normalmente.
Numa explicação simples: GTWVG transforma seu aplicativo numa janela Windows.
Janelas são o que o Windows usa e o que as LIBs usam.
O principal detalhe sobre janelas Windows é que Main() comanda o encerramento do aplicativo.
Pode ser visível ou não.
Quando o aplicativo fica "zumbi", que precisa encerrar no gerenciador de tarefas, é porque Main() ainda está rodando.
Pode existir uma Main() em GTWVG, outra em HWGUI outra em minigui, e justamente isso pode gerar problemas.
A minigui deixa desativar a necessidade de Main(), isso resolve muito bem.
A HWGUI permite criar janelas de diálogos que não dependem de Main(), isso também ajuda.
Talvez exista algum parâmetro em HWGUI pra não obrigar Main() ou talvez possam criar isso, se for necessário, caso isso limite alguma coisa.
Deste jeito, qualquer um que tenha aplicativo console pode começar a se aventurar no mundo GUI de imediato.
E se for alguém que está sendo pressionado pra fazer uma versão Windows, já vai poder mostrar alguma janela GUI e aliviar a pressão, e voltar a trabalhar tranquilo.
Pra forçar entrar a GTWVG no aplicativo, independente se vai usar recursos dela ou não:
Código: Selecionar todos
PROCEDURE HB_GTSYS
REQUEST HB_GT_WVG_DEFAULT
RETURN
O ideal é criar pastas diferentes pros fontes em cada GUI pra não ter conflito dos CH.
A partir daí, pode usar as LIBs normalmente.
Numa explicação simples: GTWVG transforma seu aplicativo numa janela Windows.
Janelas são o que o Windows usa e o que as LIBs usam.
O principal detalhe sobre janelas Windows é que Main() comanda o encerramento do aplicativo.
Pode ser visível ou não.
Quando o aplicativo fica "zumbi", que precisa encerrar no gerenciador de tarefas, é porque Main() ainda está rodando.
Pode existir uma Main() em GTWVG, outra em HWGUI outra em minigui, e justamente isso pode gerar problemas.
A minigui deixa desativar a necessidade de Main(), isso resolve muito bem.
A HWGUI permite criar janelas de diálogos que não dependem de Main(), isso também ajuda.
Talvez exista algum parâmetro em HWGUI pra não obrigar Main() ou talvez possam criar isso, se for necessário, caso isso limite alguma coisa.
Deste jeito, qualquer um que tenha aplicativo console pode começar a se aventurar no mundo GUI de imediato.
E se for alguém que está sendo pressionado pra fazer uma versão Windows, já vai poder mostrar alguma janela GUI e aliviar a pressão, e voltar a trabalhar tranquilo.
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
"Começando" com GUI
Esqueci: Valeu pelos exemplos.
Tem também outro de hwgui usando DBF, que o Itamar postou no tópico hwgui.
É um exemplo simples, mas bom, porque comparando com o anterior, o funcionamento é igual ao tbrowse do Clipper, que todos estão acostumados (ou a maioria).
Esse vai ser meu ponto de partida, porque tbrowse é o que já uso, então à primeira vista se encaixa com meus fontes.
O desafio vai ser interessante, porque com multimonitor e 4k, começa em definir tamanho de janela e de fonte pra funcionar em qualquer lugar.
Vai ser mais interessante ainda se "trocar figurinha" entre gtwvg e hwgui.
Como a gtwvg redimensiona automático, seria só aproveitar os mesmos parâmetros na hwgui pra tamanho de janela e tamanho de fonte.
Tem também outro de hwgui usando DBF, que o Itamar postou no tópico hwgui.
É um exemplo simples, mas bom, porque comparando com o anterior, o funcionamento é igual ao tbrowse do Clipper, que todos estão acostumados (ou a maioria).
Código: Selecionar todos
FUNCTION J_A( ... )
LOCAL oDlg, oBrw
INIT DIALOG oDlg CLIPPER NOEXIT AT 0, 0 SIZE 300,200
@ 10, 10 BROWSE oBrw DATABASE OF oDlg SIZE 200,150 APPEND
ADD COLUMN FieldBlock( "CODIGO" ) TO oBrw EDITABLE Header "CODIGO" LENGTH 4
ADD COLUMN FieldBlock( "NOME" ) TO oBrw EDITABLE HEADER "NOME" LENGTH 30
oDlg:Activate(.T.)
RETURN NIL
O desafio vai ser interessante, porque com multimonitor e 4k, começa em definir tamanho de janela e de fonte pra funcionar em qualquer lugar.
Vai ser mais interessante ainda se "trocar figurinha" entre gtwvg e hwgui.
Como a gtwvg redimensiona automático, seria só aproveitar os mesmos parâmetros na hwgui pra tamanho de janela e tamanho de fonte.
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
"Começando" com GUI
As rotinas de browse pra HMG indicadas vão ser boas pra MySQL.
Pra DBF achei mais interessante este exemplo, que dá pra comparar um pouco com tbrowse, bem pouco... rs
https://github.com/PaulinhoBiaCao/AllGu ... H/demo.prg
Pra DBF achei mais interessante este exemplo, que dá pra comparar um pouco com tbrowse, bem pouco... rs
https://github.com/PaulinhoBiaCao/AllGu ... H/demo.prg
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
"Começando" com GUI
Agora entendi porque preferem fazer por arrray.
Nem parece que o browse de DBF foi feito pra Harbour....
Nem parece que o browse de DBF foi feito pra Harbour....
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
"Começando" com GUI
Esqueçam tudo que eu disse sobre misturar LIBs.
Aqui após chamar o browse da HMG Extended.
Simplesmente a codepage mudou.
Mas se não tem comando alterando a codepage.
Significa que a configuração do Harbour não vale nada pra LIB.
Além de problemas com tela, pode trazer problemas de índices corrompidos, bases de dados danificadas, problemas com API Windows, e outras coisas mais.
E nem adianta tirar dúvida no fórum do Harbour sobre isso, porque não tem a ver com o Harbour.....
Isso torna o mix perigoso.
Não sei dizer sobre Main() em HMG.
Estou me referindo a misturar LIBs, e não a LIB sozinha.
Nota:
A HMGE deve usar sua própria codepage pras chamadas à API do Windows funcionarem. Tudo bem, foi projetada pra funcionar sozinha, e com Harbour/xHarbour.
Talvez baste um save/restore da codepage, não sei dizer.
Aqui após chamar o browse da HMG Extended.
Simplesmente a codepage mudou.
Mas se não tem comando alterando a codepage.
Código: Selecionar todos
#include 'hmg.ch'
#include "i_winuser.ch"
MEMVAR cMe, cBrowseName, cWindowName, cSearchString, cWorkArea
FUNCTION HmgeBrowse( ... )
LOCAL nCont, aHeaders := {}, aFields := {}, aWidths := {}
STATIC nWindow := 0
PRIVATE cMe, cBrowseName, cWindowName, cSearchString := "", cWorkArea := Alias()
nWindow += 1
cMe := "Pesquisa" + StrZero( nWindow, 4 )
SET WINDOW MAIN OFF
SET BROWSESYNC ON
FOR nCont = 1 TO FCount()
AAdd( aHeaders, FieldName( nCont ) )
AAdd( aFields, FieldName( nCont ) )
AAdd( aWidths, FieldLen( nCont ) * 10 )
NEXT
DEFINE WINDOW &cMe ;
AT 0, 0 ;
WIDTH 800 ;
HEIGHT 605 ;
TITLE "Pesquisa em " + Alias() ;
MODAL ;
NOSIZE ;
ON INIT cWindowName := This.Name
ON KEY ESCAPE ACTION thiswindow.release
DEFINE STATUSBAR
STATUSITEM "ENTER Seleciona"
KEYBOARD
END STATUSBAR
END WINDOW
@ 5, 5 BROWSE grid_pesquisa ;
OF &cMe ;
WIDTH 795 ;
HEIGHT 430 ;
HEADERS aHeaders ;
WIDTHS aWidths ;
WORKAREA &cWorkArea ;
FIELDS aFields ;
; // JUSTIFY { BROWSE_JTFY_LEFT, BROWSE_JTFY_RIGHT, BROWSE_JTFY_LEFT, BROWSE_JTFY_LEFT } ;
ON GOTFOCUS cBrowseName := This.Name
CREATE EVENT PROCNAME BrowseKeys()
DoMethod( cMe, "center" )
DoMethod( cMe, "activate" )
RETURN NIL
FUNCTION BrowseKeys( hWnd, nMsg, wParam, lParam )
LOCAL nKey, cKey, cWindowName := cMe
HB_SYMBOL_UNUSED( hWnd )
HB_SYMBOL_UNUSED( wParam )
IF nMsg != WM_NOTIFY
RETURN NIL
ENDIF
IF ! _IsControlDefined( cBrowseName, cWindowName ) .OR. GetHwndFrom( lParam ) != GetProperty( cWindowName, cBrowseName, "Handle" )
RETURN NIL
ENDIF
IF ! GetNotifyCode( lParam ) == LVN_KEYDOWN
RETURN NIL
ENDIF
nKey := GetGridvKey( lParam )
DO CASE
CASE nKey == VK_UP
_BrowseUp( cBrowseName, cWindowName )
RETURN ClearSearch()
CASE nKey == VK_DOWN
_BrowseDown( cBrowseName, cWindowName )
RETURN ClearSearch()
CASE nKey == VK_HOME
_BrowseHome( cBrowseName, cWindowName )
RETURN ClearSearch()
CASE nKey == VK_END
_BrowseEnd( cBrowseName, cWindowName )
RETURN ClearSearch()
CASE nKey == VK_PRIOR
_BrowsePrior( cBrowseName, cWindowName )
RETURN ClearSearch()
CASE nKey == VK_NEXT
_BrowseNext( cBrowseName, cWindowName )
RETURN ClearSearch()
OTHERWISE
cKey := Chr( nKey )
IF IsAlpha( cKey ) .OR. IsDigit( cKey ) .OR. nKey == VK_BACK
RETURN IncrementalSearch( cKey, nKey )
ENDIF
ENDCASE
RETURN NIL
STATIC FUNCTION ClearSearch()
cSearchString := ""
SetProperty( cWindowName, "StatusBar", "Item", 1, "" )
RETURN 1
STATIC FUNCTION IncrementalSearch( cKey, nKey )
LOCAL nOldRec
IF nKey == VK_BACK
cSearchString := iif( Len( cSearchString ) > 1, Left( cSearchString, Len( cSearchString ) - 1 ), "" )
ELSE
cSearchString += cKey
ENDIF
nOldRec := RecNo()
IF dbSeek( Upper( cSearchString ), .T. )
SetProperty( cWindowName, cBrowseName, "Value", RecNo() )
ELSE
cSearchString := iif( Len( cSearchString ) > 1, Left( cSearchString, Len( cSearchString ) - 1 ), "" )
SetProperty( cWindowName, cBrowseName, "Value", nOldRec )
ENDIF
SetProperty( cWindowName, "StatusBar", "Item", 1, "Quicksearch: " + iif( Empty( cSearchString ), "", cSearchString ) )
DoMethod( cWindowName, cBrowseName, 'Setfocus' )
RETURN 1
Além de problemas com tela, pode trazer problemas de índices corrompidos, bases de dados danificadas, problemas com API Windows, e outras coisas mais.
E nem adianta tirar dúvida no fórum do Harbour sobre isso, porque não tem a ver com o Harbour.....
Isso torna o mix perigoso.
Não sei dizer sobre Main() em HMG.
Estou me referindo a misturar LIBs, e não a LIB sozinha.
Nota:
A HMGE deve usar sua própria codepage pras chamadas à API do Windows funcionarem. Tudo bem, foi projetada pra funcionar sozinha, e com Harbour/xHarbour.
Talvez baste um save/restore da codepage, não sei dizer.
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/
