Página 2 de 2

Modificando samples e bug(*) encontrado(*)

Enviado: 21 Abr 2025 15:23
por JoséQuintas
status.png
Pipino estranho.
Peguei a substituta da barra de status.
Coloquei nas duas dialogs.
Só tem configuração de altura, estão exatamente iguais.
Porque diferente ?

Código: Selecionar todos

   ADD STATUS PANEL ;
      TO     oDlg ;
      HEIGHT 30 ;
      PARTS  80, 200, 0

A imagem não está cortada, mostra só isso mesmo.

Modificando samples e bug(*) encontrado(*)

Enviado: 21 Abr 2025 15:45
por JoséQuintas
Eu ja tinha notado que ela tem problemas de atualização.
Se eu tentar mexer na janela com o mouse, a barra aparece, tentar aumentar o tamanho, mesmo sem aumentar..

Modificando samples e bug(*) encontrado(*)

Enviado: 21 Abr 2025 17:43
por JoséQuintas
O interessante disso tudo:

No final, todos os exemplos estão virando parte de uma única dialog, em tabpage.
Isso não chega a ser um aplicativo, mas está fazendo uso de tudo.
É um teste mais pesado do que usar cada controle isolado.
Podemos dizer que se tiver que dar defeito, vai ser aí mesmo.

Essa demonstração pode compilar e executar exemplos.
Acaba até nem dando pra perceber o que está dentro ou fora do demoall.
Mas o que aparecer na tab, está dentro.

Modificando samples e bug(*) encontrado(*)

Enviado: 21 Abr 2025 19:42
por JoséQuintas
democombobox.png
E não é que apareceu um.
O exemplo tem tab.
Ficou tab dentro de tab.

Modificando samples

Enviado: 22 Abr 2025 08:57
por JoséQuintas
Aqui o exemplo demotab.prg
Está mostrando uma tab dentro da tabpage browse.
Acho que o exemplo, que é de tab, ficou claro.

Código: Selecionar todos

   BEGIN PAGE "browse" ;
      OF oTab

      @ 30, 30 TAB oTab2 ;
         ITEMS {} ;
         SIZE  650, 450

         BEGIN PAGE "browse array" ;
            OF oTab2

            DemoBrowseArray( .F., oTab2 )

         END PAGE OF oTab2

         BEGIN PAGE "browse dbf" ;
            OF oTab2

            DemoBrowseDBF( .F., oTab2 )

         END PAGE OF oTab2

#ifdef __PLATFORM__WINDOWS
         BEGIN PAGE "browseado" ;
            OF oTab2

            DemoBrowseADO( .F., oTab2 )

         END PAGE OF oTab2
#endif

   END PAGE OF oTab
browse.png
O resultado é a tabpage browse, com a tab de cada browse.

Se ele quiser ver o bnrowse array, dbf ou ado, aí ele vai no fonte de cada um.
Tudo no mesmo fonte seria uma complicação maior.

Modificando samples

Enviado: 22 Abr 2025 09:03
por JoséQuintas
demoall.png
E aqui o demoall.prg, que parece o demotab.prg mas não é.

Como faz a tab?
É só olhar o demotab.prg, foi ele quem criou essa parte.

Como faz esse browse?
Seria olhar o demobrowsearray.prg, foi ele quem criou essa parte.
Esse fonte não está separado, senão mostraria o título do fonte.

Modificando samples

Enviado: 22 Abr 2025 14:18
por JoséQuintas
Aí eu pensei....

E se....

Trocar o SAY "nome" por um button ?
samp.png
Só falta poder mostrar o código fonte.
Mas isso vai multiplicar rotinas, e multiplicar rotinas não é bom.

Modificando samples

Enviado: 22 Abr 2025 16:40
por JoséQuintas
demohwgui.png
Ciclo completo.
Mostra tudo que é fonte.

Nem vão acreditar como é ridículo chegar nisso.

no exemplo:
se cria dialog ou não, e os dois botões.

Quando um exemplo usa o outro, já vão aparecendo os dois botões
O demoall usa várias tabpage, quando aproveita o fonte do exemplo, já vém com os botões, não precisa mais nada.

Só isso.

A única complicação nos fontes, não teve jeito, foram duas.

Chamar rotina

Código: Selecionar todos

   // do not remove button
   DemoCodeButton( "demobrowsedbf.prg", oDlg )
e pra não multiplicar fonte, um include

Código: Selecionar todos

#include "demo.ch"
Esse demo.ch vai multiplicar as rotinas, fazer o que.

Código: Selecionar todos

/*
  $Id: demo.ch

  Created to do not duplicate source code on all samples
*/

STATIC FUNCTION DemoCodeButton( cFileName, oDlg )

   LOCAL cRunName

   cRunName := StrTran( cFileName, ".prg", "" )

   @ 3, 30 OWNERBUTTON ;
      OF       oDlg ;
      SIZE     200, 24 ;
      TEXT     cFileName ;
      HSTYLES ;
         HStyle():New( {16759929,16772062}, 1 ), ;
         HStyle():New( {16759929}, 1,, 3, 0 ), ;
         HStyle():New( {16759929}, 1,, 2, 12164479 ) ;
      ON CLICK { || Do( cRunName ) }

   @ 220, 30 OWNERBUTTON ;
      OF oDlg ;
      SIZE 100, 24 ;
      TEXT "show code" ;
      HSTYLES ;
         HStyle():New( {16759929,16772062}, 1 ), ;
         HStyle():New( {16759929}, 1,, 3, 0 ), ;
         HStyle():New( {16759929}, 1,, 2, 12164479 ) ;
      ON CLICK { || ShowCode( cFileName ) }

   RETURN Nil

STATIC FUNCTION ShowCode( cFileName )

   LOCAL oDlg, oEdit, oFont

   IF ! File( cFileName )
      hwg_MsgInfo( cFileName + " not found" )
   ENDIF

   PREPARE FONT oFont ;
      NAME "Courier New" ;
      WIDTH 0 ;
      HEIGHT -13

   INIT DIALOG oDlg ;
      TITLE cFileName ;
      SIZE 800, 600 ;
      FONT oFont

   @ 10, 10 EDITBOX oEdit ;
      CAPTION MemoRead( cFileName ) ;
      SIZE    780, 580 ;
      ; // FONT    oFont
      STYLE   ES_MULTILINE + ES_AUTOVSCROLL + WS_VSCROLL + WS_HSCROLL

   ACTIVATE DIALOG oDlg CENTER

   RETURN Nil
criar dois botões, e uma dialog pra mostrar os fontes.

Se não fosse assim, eu teria que incluir manualmente em todos os fontes, ou criar fonte separado pra ser compilado, etc. etc. etc.
Pro usuário principiante, é só copiar o demo.ch.
Pro usuário interessado no código fonte, o que tem em demo.ch nem interessa, melhor que fique de fora.

Modificando samples

Enviado: 22 Abr 2025 17:37
por JoséQuintas
Oficializado.

Ao postar limitações fiquei pensando.....
Tab com abas na direita ou embaixo, e não encima
Botões talvez embaixo e não encima.

Seria bom definir isso antes de mexer em todos os samples.

Foi dada a partida.
Muito trabalho pela frente.

Idéias pra melhorar o visual são bem vindas.

Sei programar, mas mexer com GUI, sou bem principiante, nem sei direito quais recursos poderia usar pra melhorar isso.
Como sempre fiz desde os tempos do Clipper.... vou usando o que conheço...
E minhas idéias se limitam a fazer com o que conheço, do jeito que conheço.

Na hora de mostrar o fonte... o que usar ? lembrei que já tinha feito isso no dlgauto pra campos string maiores que 100 caracteres, e no preview de relatório, e peguei de lá.