Página 1 de 1

Campo lógico no browse.

Enviado: 28 Nov 2023 10:34
por Itamar M. Lins Jr.
Olá!
Alguém que usa Hwgui do SVN, tem um exemplo de uso do campo lógico no browse ?
Eu tenho aqui, mas só vai no windows, usando BrowseEx, porém o BrowseEx só funciona no windows, tá engessado no windows e estou fazendo uns testes compilando meu sistema 100% no Linux.

O Alexander até me explicou, mas eu não entendi muito bem, tentei fazer aqui e deu erro.

Código: Selecionar todos

Hello,
there are, at least, two ways to do this.
The first one - using the HColumn():aBitmaps array of pairs { bCondition, oBmp } - if a result of bCondition is .t., the appropriate bitmap is drawn. See the example in samples/a.prg, Openabout() function.
The second - using of HPaintCB class, see the tutorial, "Advanced using of controls"/Browse:
oBrw:aColumns[1]:oPaintCB := HPaintCB():New()
oBrw:aColumns[1]:oPaintCB:Set( PAINT_LINE_ALL, bCol1 )

In that sample the bCol1 codeblock draws a gradient background only, but you can draw there all what you need, including the bitmap.

Código: Selecionar todos

Both options are intended to display the checkbox. To change it you may use few other ways. One of them, via the oBrw:bKeyDown, is in a.prg. If you want to change the field by mouse doubleclick or enter, you need to use the bEnter block, something like this:

Local bEnter := {|o,nc|
IF nc == 1 // nc is a column number
o:aArray[ o:nCurrent,1 ] := !o:aArray[ o:nCurrent,1 ]
// Or, for a dbf browse:
// ( o:alias ) -> (rlock()) // if in shared mode
// ( o:alias ) -> SomeField := !( o:alias ) -> SomeField
// ( o:alias ) -> (dbUnlock())
o:RefreshLine()
ENDIF
RETURN .T.
}
...
oBrw:bEnter := bEnter

What about displaying checkbox, using the HPaintCB, see the tutorial, "Advanced using of controls", "Browse of bitmaps", bCol2 codeblock. To change it, you may use the same trick with bEnter.
Saudações,
Itamar M. Lins Jr.

Campo lógico no browse.

Enviado: 28 Nov 2023 11:24
por JoséQuintas
Ele disse pra olhar o A.PRG, dialog ABOUT.

Código: Selecionar todos

   @ 160, 10 BROWSE oBrw ARRAY SIZE 180, 180 ;
        STYLE WS_BORDER + WS_VSCROLL + WS_HSCROLL
   oBrw:bColorSel    := 12507070  // 15149157449

   oBmp := HBitmap():AddStandard( OBM_CHECK )
   oBrw:aColumns[1]:aBitmaps := { ;
      { {|l|l}, oBmp } ;
   }
   oBrw:aColumns[2]:length := 6
   oBrw:aColumns[3]:length := 4
   oBrw:bKeyDown := { | o, key | BrwKey( o, key ) }
about.png

Campo lógico no browse.

Enviado: 28 Nov 2023 15:29
por Itamar M. Lins Jr.
Olá!
Primeira opção, não foi no Linux.
O problema é a complicação para o usuário final de uma coisa que deveria ser simples.
A segunda opção ainda estou estudando, não entendi...
ComboBox é fácil, CheckBox é essa novela.
Uso muito isso em um browse marcar rápido com o mouse as parcelas do cliente e aglutinar em 1(uma) só, para emitir boleto.
Mandei para ele o fonte do problema com a tela no Linux.
https://sourceforge.net/p/hwgui/support-requests/64/
Segunda opção é tanta coisa para colocar que me perco.

Código: Selecionar todos

#include "hwgui.ch"
FUNCTION Main()
local oDlg, oBrw

   aStructure := { { "idcontact" ,"+",04,0} ,; //Auto increment
                   { "mark"      ,"l",01,0} ,;
                   { "name"      ,"c",60,0} }

   If !hb_vfexists("contacts.dbf")      
      If dbcreate("contacts.dbf",aStructure,,.t.,"ctc") //Create and open with shared mode
         index on field->name tag tgName
         ctc->( dbappend() )
         ctc->name := "JOSÉ DE ASSUMPÇÃO"
         ctc->( dbappend() )
         ctc->name := "MARIA ANTONIETA"
         ctc->( dbappend() )
         ctc->name := "SNOOPY"
         ctc->( dbappend() )
         ctc->name := "POPEYE"
         ctc->(DbDelete())
          
         ctc->( dbCloseArea() )
      Else
         hwg_MsgStop("Error Creating DBF")
         cancel
      EndIf
   EndIf

Use contacts new shared alias "ctc"

INIT DIALOG oDlg TITLE "TEST" AT 0, 0  SIZE 800, 600 
   
   @ 10, 10 BROWSE oBrw DATABASE of oDlg SIZE 200, 200
   
   oBrw:Alias:="ctc"

   Add Column FieldBlock("mark") to oBrw Header "mark" Length 20
  
   Add Column FieldBlock("idcontact") to oBrw  Header "Cont_ID" Length 10

   Add Column FieldBlock("name") to oBrw Header "Name" length 100
   
   oBmp := HBitmap():AddStandard( "gtk_apply" ) //"gtk_ok"
   oBrw:aColumns[1]:aBitmaps := { { {|l|l}, oBmp } }

oDlg:Activate()

close all
hb_vferase("contacts.dbf")
Return nil
Saudações,
Itamar M. Lins Jr.

Campo lógico no browse.

Enviado: 28 Nov 2023 21:35
por Fernando queiroz
tente assim

Código: Selecionar todos

#include "hwgui.ch"
FUNCTION Main()
local oDlg, oBrw
LOCAL bCol1 := {|oBmp, h,x1,y1,x2,y2| oBmp:= HBitmap():AddStandard( "gtk_apply" ), ;
			hwg_Fillrect( h, x1, y1, x2, y2, oBrowse1:brush:handle ), ;
			hwg_Drawbitmap( h, oBmp:handle,, x1+5, y1+2, oBmp:nWidth, oBmp:nHeight ) }

   aStructure := { { "idcontact" ,"+",04,0} ,; //Auto increment
                   { "mark"      ,"l",01,0} ,;
                   { "name"      ,"c",60,0} }

   If !hb_vfexists("contacts.dbf")      
      If dbcreate("contacts.dbf",aStructure,,.t.,"ctc") //Create and open with shared mode
         index on field->name tag tgName
         ctc->( dbappend() )
         ctc->name := "JOSÉ DE ASSUMPÇÃO"
         ctc->( dbappend() )
         ctc->name := "MARIA ANTONIETA"
         ctc->( dbappend() )
         ctc->name := "SNOOPY"
         ctc->( dbappend() )
         ctc->name := "POPEYE"
         ctc->(DbDelete())
          
         ctc->( dbCloseArea() )
      Else
         hwg_MsgStop("Error Creating DBF")
         cancel
      EndIf
   EndIf

Use contacts new shared alias "ctc"

INIT DIALOG oDlg TITLE "TEST" AT 0, 0  SIZE 800, 600 
   
   @ 10, 10 BROWSE oBrw DATABASE of oDlg SIZE 200, 200
   
   oBrw:Alias:="ctc"

   Add Column FieldBlock("mark") to oBrw Header "mark" Length 20
  
   Add Column FieldBlock("idcontact") to oBrw  Header "Cont_ID" Length 10

   Add Column FieldBlock("name") to oBrw Header "Name" length 100
   
[color=#FF0000]oBrw:aColumns[1]:oPaintCB := HPaintCB():New()
oBrw:aColumns[1]:oPaintCB:Set( PAINT_LINE_ALL, bCol1 )[/color]

oDlg:Activate()

close all
hb_vferase("contacts.dbf")
Return nil

Campo lógico no browse.

Enviado: 28 Nov 2023 22:01
por Itamar M. Lins Jr.
Olá!
Deu erro.

Código: Selecionar todos

Error BASE/1004  No exported method: HANDLE
Called from (b)HWG_ERRSYS(19)
Called from HANDLE(0)
Called from (b)MAIN(47)
Called from HBROWSE:LINEOUT(1065)
Called from HBROWSE:PAINT(741)
Called from HBROWSE:ONEVENT(305)
Called from HWG_ACTIVATEDIALOG(0)
Called from HDIALOG:ACTIVATE(185)
Called from MAIN(56)

HWGUI 2.23 dev Build 7
Date:11/28/23
Time:22:23:58

Código: Selecionar todos

#include "hwgui.ch"
FUNCTION Main()
local oDlg, oBrw
LOCAL bCol1

   aStructure := { { "idcontact" ,"+",04,0} ,; //Auto increment
                   { "mark"      ,"l",01,0} ,;
                   { "name"      ,"c",60,0} }

   If !hb_vfexists("contacts.dbf")      
      If dbcreate("contacts.dbf",aStructure,,.t.,"ctc") //Create and open with shared mode
         ctc->( dbappend() )
         ctc->name := "JOSÉ DE ASSUMPÇÃO"
         ctc->( dbappend() )
         ctc->name := "MARIA ANTONIETA"
         ctc->( dbappend() )
         ctc->name := "SNOOPY"
         ctc->( dbappend() )
         ctc->name := "POPEYE"
         ctc->(DbDelete())
          
         ctc->( dbCloseArea() )
      Else
         hwg_MsgStop("Error Creating DBF")
         cancel
      EndIf
   EndIf

Use contacts new shared alias "ctc"

INIT DIALOG oDlg TITLE "TEST" AT 0, 0  SIZE 800, 600 
   
   @ 10, 10 BROWSE oBrw DATABASE of oDlg SIZE 200, 200
   
   oBrw:Alias:="ctc"

   Add Column FieldBlock("mark") to oBrw Header "mark" Length 20
  
   Add Column FieldBlock("idcontact") to oBrw  Header "Cont_ID" Length 10

   Add Column FieldBlock("name") to oBrw Header "Name" length 100
   

bCol1 := {|oBmp, h,x1,y1,x2,y2| oBmp:= HBitmap():AddStandard( "gtk_apply" ), ;
hwg_Fillrect( h, x1, y1, x2, y2, oBrw:brush:handle ), ;
hwg_Drawbitmap( h, oBmp:handle,, x1+5, y1+2, oBmp:nWidth, oBmp:nHeight ) }
   
oBrw:aColumns[1]:oPaintCB := HPaintCB():New()
oBrw:aColumns[1]:oPaintCB:Set( PAINT_LINE_ALL, bCol1 )

  // oBmp := HBitmap():AddStandard( "gtk_apply" )
   //oBrw:aColumns[1]:aBitmaps := { { {|l|l}, oBmp } }


oDlg:Activate()

close all
hb_vferase("contacts.dbf")
Return nil
Saudações,
Itamar M. Lins Jr.

Campo lógico no browse.

Enviado: 29 Nov 2023 07:13
por Itamar M. Lins Jr.
Olá!
Ele respondeu lá no SVN. Parece que é um erro meu.
"gtk_apply" para "gtk-apply" tem diferença.
Estou no notebook Windows... Em casa no meu desktop, eu vejo isso a tarde.

Saudações,
Itamar M. Lins Jr.

Campo lógico no browse.

Enviado: 29 Nov 2023 08:38
por Fernando queiroz
nas ultimas alteracoes da hwgui o que era:

51 // oBmp := HBitmap():AddStandard( "gtk_apply" )
52 //oBrw:aColumns[1]:aBitmaps := { { {|l|l}, oBmp } }

passou para:

48 oBrw:aColumns[1]:oPaintCB := HPaintCB():New()
49 oBrw:aColumns[1]:oPaintCB:Set( PAINT_LINE_ALL, bCol1 )
50

tive de mudar em todo meu APP

no meu caso eu coloco no BROWSE um espaco onde eu quero o BMP ex:

oBrowse1:AddColumn( HColumn():New( "",,"C",3,0,.F.,1,0, ) )

e um campo correspondente ao que eu quero mostrar BMP
oBrowse1:AddColumn( HColumn():New( "S",hwg_ColumnArBlock() ,"L",1,0,.F.,1,0, ) )

ai eu posso editar o campo logico , depois de encerrar a edicao ele refaz a tela para colocar o BMP,
nao sei se voce conseguiu entender

Campo lógico no browse.

Enviado: 29 Nov 2023 09:25
por Itamar M. Lins Jr.
Olá!
O que eu notei, é que no BrowseEx(apenas windows) ele vai de boa, inclusive com algumas "firulas" do ponteiro do mouse virar uma mãozinha no cabeçalho...
E o CheckBox aparece um quadrado e o sinal de "ticked" caso for verdadeiro(true) e no dele não aparece o quadrado apenas o sinal "ticked".
Talvez o Themed do windows ativado na compilação, não sei, vou verificar.

Saudações,
Itamar M. Lins Jr.

Campo lógico no browse.

Enviado: 29 Nov 2023 10:42
por Itamar M. Lins Jr.
Olá!
tive de mudar em todo meu APP
Não entendi essa parte.
Eu uso o BROWSE tradicional no exemplo dele "DRAWN BROWSE"(novo) funcionou.
Aqui com o Browse tradicional dá erro:
-> hwg_Fillrect( h, x1, y1, x2, y2, ob:handle )
...
Error BASE/1004 M‚todo nÆo exportado: HANDLE
Called from source\winapi\hsplit.prg->HANDLE(0)
...
No seu ai funciona no tradicional ?

Saudações,
Itamar M. Lins Jr.