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