Clipper On Line • Ver Tópico - Meu modo de trabalho

Meu modo de trabalho

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

 

Meu modo de trabalho

Mensagempor JoséQuintas » 13 Set 2016 11:46

Voltando ao que o A Simões postou:
Talvez dê pra usar o gtwvg.hbc como exemplo, onde adiciona .ch
Mas acho que pra usar em aplicativo teria que deixar na pasta como .hbm

description=GTWVG (an extension of GTWVT, win-only)

skip={!allwin}

incpaths=.

headers=hbgtwvg.ch wvgparts.ch wvtwin.ch

gt=${_HB_DYNPREF}${hb_name}${_HB_DYNSUFF}

libs=hbwin.hbc

gui=yes
mt=yes
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Meu modo de trabalho

Mensagempor asimoes » 13 Set 2016 13:09

Quintas,

Com -u

Uso assim:

-u+hbcompat.ch
-u+stdsmf.ch //header de uso em toda aplicação
-u+ga.ch //header de uso em toda aplicação

Pode usar no hbp ou hbm

Assim, só no hbc

headers=hbgtwvg.ch wvgparts.ch wvtwin.ch
â–ºHarbour 3.x | Minigui xx-x | HwGuiâ—„
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar de usuário

asimoes
Colaborador

Colaborador
 
Mensagens: 4919
Data de registro: 26 Abr 2007 16:48
Cidade/Estado: RIO DE JANEIRO-RJ
Curtiu: 341 vezes
Mens.Curtidas: 258 vezes

Meu modo de trabalho

Mensagempor JoséQuintas » 14 Set 2016 11:43

Isso do mouse, será que não tem a ver com isto que retirei em 2012.
Usava #defines que existem no Harbour, mas não existiam no Clipper 5.2

2012.png


Se puder analisar a compilação do fonte usando -w3 -es2, poderemos identificar fácil quais as variáveis que precisa do jpa.ch, porque o atual não deve servir mais.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Meu modo de trabalho

Mensagempor JoséQuintas » 14 Set 2016 12:14

Comecei a usar o GIT em junho/2015.
Mas tinha ZIPs de backup antigos.
Com muita paciência, fui registrando um por um no GIT.

Isso me permitiu apagar alguns gigabytes do HD, sem perder os backups antigos.

Até deu trabalho fazer isso pra deixar registrado no GIT.
Mas foi pra fazer uma vez só.
Toda minha história de fontes está contida em 170MB, e não sei se algum dia vai chegar a 200MB.
O GIT economiza muito espaço em disco para controlar isso.
Bem melhor 170MB pra vida inteira, do que 100MB para cada dia de backup.

Recomendo a todos usar o GIT.
Nem que seja só pra usar de backup, enquanto não souber aproveitar mais os recursos.
Não sou expert nele, não conheço nem 1% dos recursos, mas o que conheço já ajuda muito.
Essa tela é da interface Windows, que é a que uso.

gitcontrol.png


Nota: Ao fazer o download do repositório do Harbour, também vém a vida inteira dele, desde a versão ZERO.
Por exemplo, o repositório do Vszakats, por ser um Fork, olha só o início do Harbour, em 1999, pelo menos a parte registrada no github
harbour.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Meu modo de trabalho

Mensagempor JoséQuintas » 16 Set 2016 09:44

Só a título de curiosidade.
Geralmente só acrescento mais coisas no EXE, então ele sempre aumenta de tamanho.
Mas de vez em quando simplifico algumas rotinas já existentes.
Então às vezes fica menor.

 Pasta de e:\backupd\cdrom\fontes\integra

08/09/2016  20:37         1.889.472 JPA.exe
               1 arquivo(s)      1.889.472 bytes
               0 pasta(s)   466.481.528.832 bytes disponíveis

d:\cdrom\fontes\integra>dir *.exe
O volume na unidade D é TRABALHO
O Número de Série do Volume é 640D-3E41

Pasta de d:\cdrom\fontes\integra

16/09/2016  09:02         1.883.840 JPA.exe
               1 arquivo(s)      1.883.840 bytes
               0 pasta(s)   469.194.063.872 bytes disponíveis


Depois de uma semana, mesmo tendo acrescentado recursos, o EXE está menor.
Só altero fontes pra ficar mais fácil de mexer neles.
O tamanho do EXE não é o motivo, é apenas uma consequência das alterações.

Eu apenas aproveito ao fazer uma alteração, pra ver se não tem fontes parecidos que poderia fazer a mesma coisa.
Como tudo é o mesmo EXE, vale a pena, mesmo sendo um pouquinho de cada vez.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Meu modo de trabalho

Mensagempor JoséQuintas » 18 Set 2016 11:23

Uma coisa que acostumei a usar, mas não é obrigatória no Harbour, é o ALIAS no replace.

   REPLACE ;
      jpcadas->cdEndereco WITH mcdEndereco, jpcadas->cdNumero   WITH mcdNumero,   jpcadas->cdCompl    WITH mcdCompl, ;
      jpcadas->cdBairro   WITH mcdBairro,   jpcadas->cdCidade   WITH mcdCidade,   jpcadas->cdUF       WITH mcdUf, ;
      jpcadas->cdCep      WITH mcdCep,      jpcadas->cdContato  WITH mcdContato,  jpcadas->cdTelefone WITH mcdTelefone, ;
      jpcadas->cdFax      WITH mcdFax,      jpcadas->cdEndCob   WITH mcdEndCob,   jpcadas->cdNumCob   WITH mcdNumCob, ;
      jpcadas->cdComCob   WITH mcdComCob,   jpcadas->cdBaiCob   WITH mcdBaiCob,   jpcadas->cdCidCob   WITH mcdCidCob, ;
      jpcadas->cdUFCob    WITH mcdUfCob,    jpcadas->cdCepCob   WITH mcdCepCob,   jpcadas->cdConCob   WITH mcdConCob, ;
      jpcadas->cdTelCob   WITH mcdTelCob,   jpcadas->cdFaxCob   WITH mcdFaxCob,   jpcadas->cdNomEnt   WITH mcdNomEnt, ;
      jpcadas->cdEndEnt   WITH mcdEndEnt,   jpcadas->cdNumEnt   WITH mcdNumEnt,   jpcadas->cdComEnt   WITH mcdComEnt, ;
      jpcadas->cdBaiEnt   WITH mcdBaiEnt,   jpcadas->cdCidEnt   WITH mcdCidEnt,   jpcadas->cdUfEnt    WITH mcdUfEnt, ;
      jpcadas->cdCepEnt   WITH mcdCepEnt,   jpcadas->cdConEnt   WITH mcdConEnt,   jpcadas->cdTelEnt   WITH mcdTelEnt, ;
      jpcadas->cdFaxEnt   WITH mcdFaxEnt


Isso vai me ajudar no MySql !!!
Por exemplo, se eu colocar pra atualizar simultâneo o JPCADAS no DBF e no MySql....
Vou ter que pesquisar todos os fontes que fazem replace no jpcadas.
Como todos tem o ALIAS, mais fácil.

Mas nessas horas faz falta um recurso que não encontrei em nenhum editor de texto: pesquisar no resultado de uma pesquisa, ou pesquisa combinada.
pesquisa combinada: Poderia procurar em todos os fontes a ocorrência das palavras JPCADAS e WITH na mesma linha.
ou pesquisar WITH no resultado da pesquisa de JPCADAS.

Primeiro passo: gravação simultânea DBF e MySQL - só o que for incluso/atualizado ficará no MySql
Segundo passo: gravar tudo dos DBFs no MySQL - tudo duplicado
Terceiro passo: buscar somente do MySQL
Quarto passo: gravar somente no MySql
Último passo: Mais e mais recursos do MySQL

Parece trabalhoso, mas não sei se perceberam:
Vou poder alterar um único fonte, e liberar para o cliente.
Alterar outro fonte, liberar para o cliente.
E por aí vai. Sempre alterando e instalando, nunca vai existir um fonte em espera.

Isso é diferente de: alterar tudo correndo pra tudo funcionar no MySQL, ficar sem relatórios até terminar, ficar sem instalar até terminar, criar duas versões de fonte pra trocar depois, etc.
E isso vai me dar tempo de ir tirando dúvidas do MySql, melhorar rotinas aproveitando novos recursos, etc.

Por enquanto a idéia que achei mais apropriada foi essa.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Meu modo de trabalho

Mensagempor JoséQuintas » 27 Out 2016 14:12

Tenho um relatório monstruoso de pedidos.
Preciso acrescentar opção de escolher um cliente, matriz e filiais, como fazer?

Simples: (nota: relatório é um dos poucos aonde ainda uso PRIVATE)

Primeiro as variáveis necessárias pra escolha: array de opções, variável com a opção selecionada, código do cliente
E a montagem de seleção, que como é sempre igual, tenho pronta.

MEMVAR acTxtCliente, nOpcCliente, mCliente
...
nOpcCliente := 1
      acTxtCliente := { "Todos", "Específico" }
      mCliente := Space(6)
...
   JPCADAS1Class():Intervalo( nOpcGeral + 3, 25, @nOpcCliente, @mCliente )


antes de emitir o relatório, pego a lista de códigos que corresponde ao mesmo prefixo de CNPJ

   IF nOpcCliente != 1
      acClienteList := PNOT0100FiliaisList( mCliente )
   ENDIF


E na escolha de pedidos, coloco o filtro, que só depende do código de cliente

     CASE nOpcCliente == 2 .AND. AScan( acClienteList, jppedi->pdCliFor ) == 0
         SKIP
         LOOP


E se fosse MySQL, seria só acrescentar esse filtro na cláusula WHERE.

Nem preciso me preocupar com o restante do relatório. Basta mexer aonde interessa.
Lógico, o programa do relatório estando organizado, cada coisa no seu lugar, já se sabe em que lugar mexer.

Nada de gênio, nada de expert, apenas solução simples no lugar correto.
Quer fazer igual? só deixar o fonte organizado, cada coisa no seu lugar.

Ah sim... as variáveis private.
É porque em certos casos quero aproveitar o array de seleção como complemento do titulo.
Apenas como exemplo:

acTitulo := { "RELATORIO X", "Cliente:" + acTxtCliente[ nOpcaoCliente ] + iif( nOpcaoCliente == 1,"",  " " + mCliente ) }


De repente o usuário escolhe um filtro, e esquece que colocou filtro, melhor mostrar pra ele exatamente o que pediu.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Meu modo de trabalho

Mensagempor JoséQuintas » 04 Nov 2016 12:45

Chegou hoje por email:

DEMO Erro em 2016-11-04 09:25:53

Folder: C:\Users\admin\Desktop\lixo\
MySQL local: NÃO
Windows: Windows 7 6.1 SP1
Computer Name: BARBOSA-DSK
Windows User: admin
Logon Server: \BARBOSA-DSK
User Domain: BARBOSA-DSK
Harbour: Harbour 3.4.0dev (e679c4a) (2016-10-28 20:57)
Compiler: Microsoft Visual C++ 16.0.40219 (32-bit)
GT: WVG

Error BASE/1005 No exported variable: ENUMINDEX
Called from _ENUMINDEX(0)
Called from BOXMENU(770)
Called from BOXMENU(839)
Called from MENUPRINC(707)
Called from SISTEMA(129)
Called from (b)MAIN(69)


Deve ser na máquina de alguém aqui do fórum.
No fonte, coloquei um underline a menos, _EnumIndex ao invés de __EnumIndex.
Curioso é que o erro só aconteceu na máquina dele.
Já fiz a correção.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Meu modo de trabalho

Mensagempor JoséQuintas » 04 Nov 2016 12:52

Erro executando comando:-2147217900 Duplicate column name 'ATDESCRI'


Este foi em cliente.
Minha rotina de testar campo existente precisou de ajuste.
Motivo: No Linux, a tabela de schemmas é case sensitive, e usei o nome do banco de dados em maiúsculas, quando está em minúsculas.
No Windows isso não é problema.
Como acusou que não existia o campo.... deu erro na hora de acrescentar.

A titulo de curiosidade:

METHOD FieldExists( cField, cTable ) CLASS ADOClass

   LOCAL nQtd

   ::cSql := "SELECT COUNT(*) AS QTD FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=" + StringSql( Lower( AppEmpresaApelido() ) ) + " AND TABLE_NAME=" + StringSql( cTable ) + ;
                   " AND COLUMN_NAME=" + StringSql( cField )
   ::Execute()
   nQtd := ::Value( "QTD" )
   ::CloseRecordset()

   RETURN nQtd > 0


Mas no post lembrei de um método que criei depois, e dá pra simplificar, pelo menos um pouquinho.

METHOD FieldExists( cField, cTable ) CLASS ADOClass

   ::cSql := "SELECT COUNT(*) AS QTD FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=" + StringSql( Lower( AppEmpresaApelido() ) ) + " AND TABLE_NAME=" + StringSql( cTable ) + ;
                   " AND COLUMN_NAME=" + StringSql( cField )
   RETURN ::ReturnValueAndClose(  "QTD"  )
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Meu modo de trabalho

Mensagempor Abel » 04 Mar 2017 11:09

Ola, JoseQuintas

Como voce fez para colocar esta imagem de fundo
com o menu sobreposto ?

pode dar um exemplo...?

Grato,
Abel
Abel
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 310
Data de registro: 14 Mar 2012 13:16
Cidade/Estado: sao paulo / sp
Curtiu: 1 vez
Mens.Curtidas: 2 vezes

Meu modo de trabalho

Mensagempor JoséQuintas » 04 Mar 2017 12:48

Com a GTWVG e menu normal, trata-se apenas de um quebra-galho.
O que fiz foi o seguinte: desenhar e colocar o menu por cima do desenho.
Não dá pra perceber a repintura, e dá a sensação de que o desenho se mantém.

Exemplo:

DO WHILE .T.
    DrawPicture( ... )
   @ 1, 0 PROMPT ...
   @ 2, 0 PROMPT ...
   # 3. 0 PROMPT ...
   MENU TO nOpc
ENDDO
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Meu modo de trabalho

Mensagempor Abel » 04 Mar 2017 16:49

ola,
não achei nada no forum sobre DrawPicture

Qual a Lib e quais parametros preciso passar ?

Grato,
ABEL
Abel
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 310
Data de registro: 14 Mar 2012 13:16
Cidade/Estado: sao paulo / sp
Curtiu: 1 vez
Mens.Curtidas: 2 vezes

Meu modo de trabalho

Mensagempor JoséQuintas » 04 Mar 2017 17:13

Desculpe, foi só exemplo.
Cada LIB tem uma opção, a que mencionei foi esta, da GTWVG:

https://github.com/JoseQuintas/AllInOne/blob/master/allinone/menu.prg#L160-L164
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Meu modo de trabalho

Mensagempor JoséQuintas » 08 Mar 2017 10:27

Fiz um teste agora, mas é um controle meu que não existe na GTWVG oficial.
Ainda não coloquei recurso no controle de redimensionar imagem, mas fica igual outras LIBs.

telajpa.png


Parece piada, mas é sério: até criei controles de uso em tela Windows, pra GTWVG, mas eu mesmo não uso.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Meu modo de trabalho

Mensagempor JoséQuintas » 16 Jul 2017 12:39

E agora José?

josequintas.png
josequintas.png (6.45 KiB) Visualizado 74752 vezes
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Anterior Próximo



Retornar para Contribuições, Dicas e Tutoriais

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 16 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro