Campo lógico no browse.

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Campo lógico no browse.

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Campo lógico no browse.

Mensagem 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
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/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Campo lógico no browse.

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

Campo lógico no browse.

Mensagem 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
Editado pela última vez por Itamar M. Lins Jr. em 01 Dez 2023 14:52, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Campo lógico no browse.

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Campo lógico no browse.

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Fernando queiroz
Usuário Nível 4
Usuário Nível 4
Mensagens: 779
Registrado em: 13 Nov 2014 00:41
Localização: Porto Alegre/RS

Campo lógico no browse.

Mensagem 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
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Campo lógico no browse.

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Campo lógico no browse.

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Responder