Page 1 of 1

ComboBox mas amcho que el definido....

Posted: Fri Oct 05, 2007 5:01 pm
by dbzap
hola a todos...
me gustaria desplegar una lista desde el combobox, pero que fuera mas ancha que el espacio fisico en el cual pongo dicho combobox.

Tengo una lista para desplegar y su ancho soporta por ejemplo 10 caracteres...pero me gustraria que desplegara una lista con mayor cantidad de caracteres, sin que estos queden bajo la barra de desplazamiento

Agradecido de antemano.

Posted: Fri Oct 05, 2007 6:01 pm
by QAZWSX2K
la amigo no entiendo tu pregunta, uno modifica el ancho del combobox a como uno quiera, de todos modos te pongo un ejemplo de como yo los uso, espero te sirva

SOCIEDADES={}
AADD(SOCIEDADES,"COMPAÑIA ANONIMA ")
AADD(SOCIEDADES,"RESPONSABILIDAD LIMITADA ")
AADD(SOCIEDADES,"ASOCIACION ")
AADD(SOCIEDADES,"COMANDITA ")
AADD(SOCIEDADES,"FUNDACION ")
AADD(SOCIEDADES,"CORPORACION ")
AADD(SOCIEDADES,"COMUNIDAD ")
AADD(SOCIEDADES,"SOCIEDAD ANONIMA ")
AADD(SOCIEDADES,"SOCIEDAD COLECTIVA ")
AADD(SOCIEDADES,"COOPERATIVA ")
@ 175, 60 COMBOBOX OBOX VAR xTSOCIE ITEMS SOCIEDADES OF FICHA:ADIALOGS[1] size 100,100 PIXEL

Posted: Fri Oct 05, 2007 6:07 pm
by Antonio Linares
Julio,

Prueba con:

#define CB_SETDROPPEDWIDTH 0x0160

oCombo:SendMsg( CB_SETDROPPEDWIDTH, nWidth )

Posted: Fri Oct 05, 2007 6:38 pm
by dbzap
Maestro :
El parametro nWidth ... a que corresponderia ?
Saludos

Posted: Fri Oct 05, 2007 7:04 pm
by Antonio Linares
Al ancho que deseas darle en pixeles

Posted: Fri Oct 05, 2007 7:13 pm
by dbzap
y alguna funcion que comvierta caracteres en pixels ?
o algun ejemplo que me lo demuestre ?
gracias

Posted: Fri Oct 05, 2007 8:53 pm
by dbzap
no resulta....
la imagen queda recortada y el item mayor queda bajo el vscroll....
tengo la imagen ( en pequeño ) pero no se como adjuntarla
gracias

este es el codigo :

Code: Select all

...
Local aTipos := { "Producto Estándar",;
                  "Producto Seriado/Activo Fijo",;
                  "Producto Multipropósito",;
                  "Servicios",;
                  "Productos Genéricos",;
                  "Productos Crías de Genéricos" }
...
REDEFINE BTNGET   oDescri VAR cDescri ID 91 Of oDlg
[b]
REDEFINE COMBOBOX oTipo   VAR cTipo ITEMS aTipos ID 92 Of oDlg ;
         VALID ( If( oTipo:nAt<>0,;
                     cTipoReal := aTipoReal[oTipo:nAt],;
                     NIL ),;
                 .T. )
oTipo:SendMsg( CB_SETDROPPEDWIDTH, 280 )
[/b]

REDEFINE BTNGET   oFami   VAR cFami   ID 93 Of oDlg
( con el define que me indicaste en el top del PRG )

Posted: Fri Oct 05, 2007 8:59 pm
by Antonio Linares
Julio,

El mensaje tienes que enviarlo desde la claúsula ON INIT ya que antes el control no tiene un handle de ventana válido:

ACTIVATE DIALOG oDlg ;
ON INIT oTipo:SendMsg( CB_SETDROPPEDWIDTH, 280 )

Posted: Fri Oct 05, 2007 9:10 pm
by dbzap
Perfecto !!!

Pero para terminarla, existira una funcion que convierta de caracteres a pixeles ?

Mil gracias

Posted: Fri Oct 05, 2007 11:18 pm
by Antonio Linares
GetTextWidth( 0, cTexto, oFont:hFont ) --> nPixels

Posted: Sat Oct 06, 2007 9:13 pm
by FiveWiDi
Antonio,
Antonio Linares wrote:GetTextWidth( 0, cTexto, oFont:hFont ) --> nPixels
Viendo estas líneas, no sería posible crear una cláusula AUTOWIDTH para los SAY?

Algo así como:
"METHOD New( nRow, nCol, bText, oWnd, cPicture, oFont,;
lCentered, lRight, lBorder, lPixels, nClrText, nClrBack,;
nWidth, nHeight, lDesign, lUpdate, lShaded, lBox, lRaised, lAutoWidth ) CLASS TSay
.../...

if lAutoWidth
::nRight = ::nLeft + GetTextWidth( 0, ::cCaption, ::oFont:hFont ) - 1
EndIf

if ::lDrag
::CheckDots()
endif

return Self"


Saludos
Carlos G.