Page 1 of 1

Listbox multiselect. Cambio de estilo.

Posted: Mon Nov 13, 2006 9:13 am
by Carles
Hola,

Es posible cambiar en tiempo de ejecucion el estilo de un listbox ? Deseo pasar de multiselect a normal.

En la clase se define nStyle := nOr( ..., If( lMulti, LBS_MULTIPLESEL, 0 )...)

Gracias

Posted: Mon Nov 13, 2006 9:45 am
by Antonio Linares
Carles,

Prueba con:

SetWindowLong( oListBox:hWnd, GWL_STYLE, nStyle )

Posted: Mon Nov 13, 2006 10:02 am
by Carles
Hola Antonio,

La idea parece buena, pero no funciona :( . Ejemplo:

Code: Select all

#include "fivewin.ch"

STATIC oWnd, oLbx

FUNCTION Main()

   LOCAL oBar
   LOCAL aItems := { 'Primero', 'Segundo', 'Tercero' }
   LOCAL cVar   := ''

   DEFINE WINDOW oWnd

      DEFINE BUTTONBAR oBar OF oWnd
      DEFINE BUTTON OF oBar ACTION   TestStyle()

      @50, 50 LISTBOX oLbx VAR cVar ITEMS aItems PIXEL SIZE 100, 100 OF oWnd

   ACTIVATE WINDOW oWnd

RETU .T.

/*
 * Window field offsets for GetWindowLong()
 */

#define GWL_WNDPROC         (-4)
#define GWL_HINSTANCE       (-6)
#define GWL_HWNDPARENT      (-8)
#define GWL_STYLE           (-16)
#define GWL_EXSTYLE         (-20)
#define GWL_USERDATA        (-21)
#define GWL_ID              (-12)

STATIC FUNCTION TestStyle()

 LOCAL nStyle := nOr( GetWindowLong( oLbx:hWnd, GWL_STYLE ), LBS_MULTIPLESEL )

 SetWindowLong( oLbx:hWnd, GWL_STYLE, nStyle )

RETU NIL
Alguna idea mas ?

Posted: Mon Nov 13, 2006 10:21 am
by Antonio Linares
Carles,

Por lo visto no permite cambiar ese estilo dinamicamente.

La soluciĆ³n es reconstruir el control:

Code: Select all

   DEFINE BUTTON OF oBar ACTION ReBuild( oWnd, oLbx, aItems, @cVar ) 
   ...

function ReBuild( oWnd, oLbx, aItems, cVar )

   oLbx:End()

   @50, 50 LISTBOX oLbx VAR cVar ITEMS aItems PIXEL SIZE 100, 100 OF oWnd MULTISEL
   
return nil   

Posted: Mon Nov 13, 2006 10:38 am
by Carles
Antonio,

Era la ultima solucion a realizar :-)

Gracias