Page 1 of 1

Como excluir um estilo (style) de um objeto ?

Posted: Sat Jan 05, 2008 12:46 pm
by Rossine
Olá Antonio,

Mudando a classe xbrowse eu consegui inserir um novo estilo "style" usando resource, mas Como faço para Excluir um determinado estilo "style" de um objeto ?

Abaixo a mudança que fiz:

Code: Select all


//----------------------------------------------------------------------------//

METHOD CreateFromResource( nId ) CLASS TXBrowse

   if ::lCreated
      return Self
   endif

   #ifdef __XPP__
      DEFAULT ::lRegistered := .f.
   #endif

   ::nId := nId

   ::Register( nOr( CS_VREDRAW, CS_HREDRAW, CS_DBLCLKS ) )

   if ::lVScroll  && Rossine 05/01/08
      ::nStyle := nOr( ::nStyle, WS_VSCROLL )
   else
**    Tirar o Style WS_VSCROLL definido de dentro do arquivo .RC
      ::nStyle := tirar????( ::nStyle, WS_VSCROLL )
   endif

   if ::lHScroll  && Rossine 05/01/08
      ::nStyle := nOr( ::nStyle, WS_HSCROLL )
   else
**    Tirar o Style WS_VSCROLL definido de dentro do arquivo .RC
      ::nStyle := tirar????( ::nStyle, WS_HSCROLL )
   endif

   ::oWnd:DefControl( Self )

return Self

Gracias,

Rossine.

Posted: Sun Jan 06, 2008 5:11 am
by mmercado
Hola:

Podría ser:

::nStyle := nAnd( ::nStyle, nNot( WS_VSCROLL ) )

Saludos.

Manuel Mercado

Posted: Sun Jan 06, 2008 6:27 am
by Antonio Linares
Manuel,

En un sólo paso:

::nStyle := nXor( ::nStyle, WS_VSCROLL )

Posted: Mon Jan 07, 2008 11:52 am
by Rossine
Olá Maestros :D

Gracias por responderem, mas não funcionou.

Veja o programa que montei para teste:

Code: Select all


#include "FiveWin.ch"
#include "xbrowse.ch"

function main

   local oDlg, oBrw

   DEFINE DIALOG oDlg RESOURCE "TEST"

   oBrw := TXBrowse():New( odlg )

   oBrw:lHScroll := .f.
   oBrw:lVScroll := .t.

   oBrw:CreateFromResource( 101 )

   oBrw:SetArray( { { "first", "row" }, { "second", "row" } } )
   oBrw:aCols[ 1 ]:cHeader = "An array"
   oBrw:aCols[ 2 ]:cHeader = "test"
   oBrw:aCols[ 1 ]:bClrStd = { || { CLR_BLACK, CLR_WHITE } } 
   oBrw:aCols[ 2 ]:bClrStd = { || { CLR_BLACK, CLR_WHITE } } 

   ACTIVATE DIALOG oDlg ;
      ON INIT ( oBrw:lHScroll := .f., oBrw:SetColor( CLR_BLACK, CLR_WHITE ) )

RETURN NIL

Code: Select all

TEST DIALOG 6, 15, 306, 227
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "TXBrowse demo"
FONT 8, "MS Sans Serif"
{
 DEFPUSHBUTTON "OK", IDOK, 252, 211, 50, 14
 CONTROL "", 101, "TXBrowse", 0 | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP, 4, 5, 297, 202
}
Vejam que em .RC eu tenho "WS_VSCROLL | WS_HSCROLL" mas não quero que o scroll horinzontal "oBrw:lHScroll := .f." seja visível ao iniciar o programa.

Se eu não defino em .RC "WS_VSCROLL | WS_HSCROLL" mas defino "oBrw:lVScroll := .t." o scroll vertical é mostrado.

Gracias mais uma vez :wink:

Rossine.

Posted: Mon Jan 07, 2008 1:17 pm
by Antonio Linares
Rossine,

Prueba así:

Code: Select all

   ACTIVATE DIALOG oDlg ; 
      ON INIT ( oBrw:oHScroll:SetRange( 0, 0 ), oBrw:SetColor( CLR_BLACK, CLR_WHITE ) )

Posted: Mon Jan 07, 2008 1:26 pm
by karinha
OU, TENHA DUAS DIALOGS, UMA COM SCROLL E OUTRA SEM.

QUANDO ENTRAR NO PROGRAMA, ATIVE A DIALOG SEM SCROLL, DEPOIS DE FAZER O QUERES, TROQUE PELA QUE TEM SCROLL.

Posted: Mon Jan 07, 2008 3:47 pm
by Rossine
Olá Antonio,

Para funcionar tive que incluir também bPainted pois quando o browse é pintado, o scroll horizontal aparece na tela.

O exemplo abaixo funcionou:

Code: Select all

#include "FiveWin.ch"
#include "xbrowse.ch"

function main

   local oDlg, oBrw

   DEFINE DIALOG oDlg RESOURCE "TEST"

   oBrw := TXBrowse():New( odlg )

   oBrw:lHScroll := .f.
   oBrw:lVScroll := .t.

   oBrw:CreateFromResource( 101 )

   oBrw:SetArray( { { "first", "row" }, { "second", "row" } } )
   oBrw:aCols[ 1 ]:cHeader = "An array"
   oBrw:aCols[ 2 ]:cHeader = "test"
   oBrw:aCols[ 1 ]:bClrStd = { || { CLR_BLACK, CLR_WHITE } } 
   oBrw:aCols[ 2 ]:bClrStd = { || { CLR_BLACK, CLR_WHITE } } 
 
   oDlg:bInit    := { || oBrw:SetColor( CLR_BLACK, CLR_WHITE ) }

   oDlg:bpainted := { || ( iif( !oBrw:lHScroll, oBrw:oHScroll:SetRange( 0, 0 ), NIL ), ;
                           iif( !oBrw:lVScroll, oBrw:oVScroll:SetRange( 0, 0 ), NIL ), ) }

   ACTIVATE DIALOG oDlg

RETURN NIL
Gracias,

Rossine.