Page 1 of 1

Alineameniento de Controles...

Posted: Wed Sep 20, 2006 12:07 pm
by Carlos Sincuir
Hola,
quiero preguntar si alguien sabe como cambiar la alineación (izquierda,derecha o centrado) de un control creado desde recursos (workShop), especificamente un Get ("Edit text style") desde tiempo de ejecución.
El problema es que tengo un dialogo con un get, que dependiendo un parametro puede ser númerico o texto, por lo que me gustaría poder cambiar su alineacion derecha o izquierda, ya que desde workshop solo puedo poner una de estas dos.

Espero me puedan ayuda con esto. Saludos.

Carlos Sincuir

Posted: Wed Sep 20, 2006 4:48 pm
by manuramos
Carlos, yo tuve ese mismo problema y obté por lo siguiente:

Redefino el dialogo con todos los controles salvo los Gets en cuestión. (lo que no recuerdo es si lo creéen el resource o no, creo que no, pues estoy cambiando el sistema y aún no he instalado el WorkShop, intentalo sin crearlos)

DEFINE DIALOG oDlg ....
...
...
REDEFINE BITMAP oBit[1] ID 600 NAME "IZQ1" OF oDlg CURSOR oCurH ;
ON CLICK QueMarg(oDlg,oFont,oBit,oGet,.T.,0) // BOTON ALINEAR A LA IZQUIERDA

REDEFINE BITMAP oBit[2] ID 601 NAME "CNT1" OF oDlg CURSOR oCurH ;
ON CLICK QueMarg(oDlg,oFont,oBit,oGet,.T.,2) // BOTON ALINEAR AL CENTRO

REDEFINE BITMAP oBit[3] ID 602 NAME "DCH1" OF oDlg CURSOR oCurH ;
ON CLICK QueMarg(oDlg,oFont,oBit,oGet,.T.,1) // BOTON ALINEAR A LA DERECHA
...
REDEFINE mas Controles...
...
...
ACTIVATE DIALOG oDlg ON INIT QueMarg(oDlg,oFont,oBit,oGet,.F.,0)

FUNCTION QueMarg(oDlg,oFont,oBt,Gt,lCtrl,nJust)
IF !lCtrl
oGt[1]:Destroy() // DESTRUYO LOS GETs SI ESTABAN CREADOS CON ANTERIORIDAD (LA PRIMERA VEZ NO LO ESTABAN)
oGt[2]:Destroy()
oGt[3]:Destroy()
oGt[1]:End()
oGt[2]:End()
oGt[3]:End()
oGt[1] := NIL
oGt[2] := NIL
oGt[3] := NIL
SysRefresh()
ENDIF
aVr[1] := ALLTRIM( aVr[1] ) // LE QUITO LOS ESPACIOS SOBRANTES A LAS VARIABLES DE LOS GETs DE CUANDO ESTAN JUSTIFICADAS A LA DERECHA O AL CENTRO
aVr[2] := ALLTRIM( aVr[2] )
aVr[3] := ALLTRIM( aVr[3] )

IF nJust = 0 // SE CREAN LOS GET's JUSTIFICADOS A LA IZQUIERDA
oBt[1]:SetBmp( "IZQ2" ) ; oBt[1]:Disable()
oBt[2]:SetBmp( "CNT1" ) ; oBt[2]:Enable() // BOTON JUSTIFICAR A LA IZQUIERDA PRESIONADO Y DESHABILITADO
oBt[3]:SetBmp( "DCH1" ) ; oBt[3]:Enable()
aVr[1]:= PADR(aVr[1],45)
aVr[2]:= PADR(aVr[2],45)
aVr[3]:= PADR(aVr[3],45)
@ 60,228 GET oGt[1] VAR aVr[1] OF oDlg PIXEL SIZE 350,20 PICTURE "@S45" ;
COLOR CLR_OBLUE FONT oFnt
@ 83,228 GET oGt[2] VAR aVr[2] OF oDlg PIXEL SIZE 350,20 PICTURE "@S45" ;
COLOR CLR_OBLUE FONT oFnt
@ 106,228 GET oGt[3] VAR aVr[3] OF oDlg PIXEL SIZE 350,20 PICTURE "@S45" ;
COLOR CLR_OBLUE FONT oFnt

ELSEIF nJust = 2 // SE CREAN LOS GET's JUSTIFICADOS AL CENTRO
oBt[1]:SetBmp( "IZQ1" ) ; oBt[1]:Enable()
oBt[2]:SetBmp( "CNT2" ) ; oBt[2]:Disable() // BOTON JUSTIFICAR AL CENTRO PRESIONADO Y DESHABILITADO
oBt[3]:SetBmp( "DCH1" ) ; oBt[3]:Enable()
aVr[1]:= PADR(aVr[1],45)
aVr[2]:= PADR(aVr[2],45)
aVr[3]:= PADR(aVr[3],45)
@ 60,228 GET oGt[1] VAR aVr[1] OF oDlg PIXEL SIZE 350,20 PICTURE "@S45" ;
COLOR CLR_OBLUE FONT oFnt CENTER
@ 83,228 GET oGt[2] VAR aVr[2] OF oDlg PIXEL SIZE 350,20 PICTURE "@S45" ;
COLOR CLR_OBLUE FONT oFnt CENTER
@ 106,228 GET oGt[3] VAR aVr[3] OF oDlg PIXEL SIZE 350,20 PICTURE "@S45" ;
COLOR CLR_OBLUE FONT oFnt CENTER

ELSE // SE CREAN LOS GET's JUSTIFICADOS A LA DERECHA
oBt[1]:SetBmp( "IZQ1" ) ; oBt[1]:Enable()
oBt[2]:SetBmp( "CNT1" ) ; oBt[2]:Enable()
oBt[3]:SetBmp( "DCH2" ) ; oBt[3]:Disable()BOTON JUSTIFICAR A DERECHA PRESIONADO Y DESHABILITADO
aVr[1]:= PADL(aVr[1],45)
aVr[2]:= PADL(aVr[2],45)
aVr[3]:= PADL(aVr[3],45)
@ 60,228 GET oGt[1] VAR aVr[1] OF oDlg PIXEL SIZE 350,20 PICTURE "@S45" ;
VALID(aVr[1] := PADL(ALLTRIM(aVr[1]),45),oGt[1]:cText(aVr[1]),.T.) ;
COLOR CLR_OBLUE FONT oFnt RIGHT
@ 83,228 GET oGt[2] VAR aVr[2] OF oDlg PIXEL SIZE 350,20 PICTURE "@S45" ;
VALID(aVr[2] := PADL(ALLTRIM(aVr[2]),45),oGt[2]:cText(aVr[2]),.T.) ;
COLOR CLR_OBLUE FONT oFnt RIGHT
@ 106,228 GET oGt[3] VAR aVr[3] OF oDlg PIXEL SIZE 350,20 PICTURE "@S45" ;
VALID(aVr[3] := PADL(ALLTRIM(aVr[3]),45),oGt[3]:cText(aVr[3]),.T.) ;
COLOR CLR_OBLUE FONT oFnt RIGHT
ENDIF
Ctl3dLook(oGt[1]:hWnd)
Ctl3dLook(oGt[2]:hWnd)
Ctl3dLook(oGt[3]:hWnd)
SysRefresh()
RETURN NIL
*

Como ves, a cada vez que pulso sobre el boton un boton de justificacion destruyo los GET's y los vuelvo a crear. Es la única solución que encontré, y me va de maravilla.

Espero que te sirva la ayuda.

Un saludo.

Posted: Wed Sep 20, 2006 5:36 pm
by joseluisysturiz
Si usas Pelles C o Visual C, lo puedes hacer directo en el recurso y es mas rapido y seguro...

Posted: Thu Sep 21, 2006 10:03 am
by Carlos Sincuir
Gracias Manuramos, no se me había ocurrido de esa manera, voy hacer la prueba de esa manera.

Saludos.

Carlos Sincuir