Page 1 of 1

Problema con ajuste en pixels de controles

Posted: Mon Apr 17, 2006 8:07 pm
by jmartial
Antonio,

Me estoy volviendo loco con el tema de los pixels y debe haber algo raro.
Me explico:


Creo desde código: DEFINE DIALOG oDlg FROM 0,0 TO 400,300 PIXEL

y ahora necesito ajustar un control TGRoup, la manera más natural que se me ocurre es

@1, 1 GROUP oG1 TO oDlg:nHeight-10, oDlg:nWidth-10 PIXEL OF oDlg

Por ejemplo, eso debería funcionar, pero, no funciona, o los pixels de ancho y alto que dice tener el Diálogo son incorrectos, o el TGroup se pinta como le da la gana, pero para nada toma bien el tamaño.

Aparte, no sé seguir, porque si es el diálogo el que no es capaz de decir cuanto mide en pixels, ¿como coloco el resto de controles??



Un Saludo,
Joaquín

Posted: Mon Apr 17, 2006 8:21 pm
by Antonio Linares
Joaquín,

Créalo desde la claúsula ON INIT del diálogo, ya que antes son "dialog units" y no pixeles.

Posted: Mon Apr 17, 2006 8:35 pm
by jmartial
Antonio,

Estoy peor que antes, pongo como me dices lo siguiente:

Function InitDlgPideDat( oDlg )

@1, 1 GROUP oG1 TO oDlg:nHeight-50,;
oDlg:nWidth-10;
PROMPT "Seleccione datos" TRANSPARENT;
PIXEl OF oDlg

Return Nil


Y antes del ACTIVATE:

::oDlglist:bInit := {|| InitDlgPideDat( ::oDlglist ) }


Y ni siquiera me aparece el Tgroup, ha desaparecido del diálogo!!.

¿Podrías ponerme un pequeñísimo ejemplo autocontenido de un Diálogo y un Tgroup ajustado a él quitando algunos pixels por cada lado desde código fuente ??

Te lo agradecería muchísimo, gracias
Joaquín

Posted: Tue Apr 18, 2006 11:04 am
by jmartial
Antonio,


parece que oDLg:binit := {|| MiInit() } no lo ejecuta, hay que llamarla en es ON INIT, por eso no me iba.

Lo que no veo muy correcto es que necesite crear una nueva función sólo para definir los controles, si no, no va en pixels.


Un Saludo,
Joaquín

Posted: Tue Apr 18, 2006 11:30 am
by jmartial
Antonio,

La clase TIcon no tiene la clausula PIXEL ni la Data lPixel, por lo que no se puede trabajar en pixels, siempre en coordenadas simulando el sistema de filas y columnas del DOS.

Por lo que situarlos, se hace bastante complicado.


Un Saludo,
Joaquín

Posted: Tue Apr 18, 2006 11:52 am
by Antonio Linares
Joaquín,

Puedes usar números decimales en @ ..., ... con lo que puedes ajustarlo a la posición que quieras.

Posted: Tue Apr 18, 2006 12:22 pm
by jmartial
Antonio,


Lo de trabajar con decimales lo sabía y usar ICO_CHARPIX_H y ICO_CHARPIX_W para convertirlos también, lo que quería decir, es que para que fwh funcionara todo igual y no llevarara a confusiones, esa clase TIcon está a falta de la clausula PIXEL.

Además, creo que es un poco chapucero, y aparte desde que el usuario ve que no encuentra donde ha posicionado el icono, hasta que descubre que es lo que está pasando y como solucionarlo son una gran pérdida de tiempo.

Un Saludo y gracias,
Joaquín

Posted: Tue Apr 18, 2006 12:43 pm
by Antonio Linares
Joaquín,

Para eso estan los recursos, para no tener que posicionarlos a mano.

Posted: Tue Apr 18, 2006 4:27 pm
by jmartial
Antonio,

No sé si se habrá malinterpretado o no me he expresado bien, el término "chapucero" no iba referido a que la librería en sí fuera chapucera, sino que el TIcon queda incompleto sin la clausula pixel y que para que tenga ese comportamiento, el usuario tiene que dar muchas vueltas. He visto el código y pienso que no sería muy complicado de implementar. ¿Como lo ves?

Un Saludo
Joaquín

PD: Muchas veces escribiendo, al no escucharse la entonación, puede parecer que se dicen cosas con otras intenciones o en forma de desprecio, de ahí esta aclaración.

Posted: Wed Apr 19, 2006 12:57 pm
by Carlos G.
También podemos decir que:

Para eso existe FiveWiDi, para no tener que posicionarlos a mano.

Ya que lo he mencionado.

Alguién recuerda que es FiveWiDi? Saben para que sirve?

Alguién quiere continuar el desarrollo?

Actualmente la versión es del 2002 y bajo Fivewin 2.1c.

Saludos
Carlos G.

Posted: Wed Apr 19, 2006 9:21 pm
by Vikthor
Un problema similar tenía yo con todos los controles al crearlos desde código, resultaba que no siempre la coordenada :

@ 10 , 10 , era la misma para todos los controles.

Y había que ajustarlos a mano limpia.

Así que le hice una pequeñisma modificación a la clase TDialog y ahora ya puedo pintar todos los controles en la coordenadas que yo le indico.

Code: Select all

	 // Vikthor 21-Sep-2005
   AEVAL( ::aControls, { | o , n | IF( o:ClassName()=="TIMAGE" .OR. o:ClassName()=="TBITMAP" , ;
	                                                o:Move( o:nTop/2 , o:nLeft/2 , 0 , 0 , .T. ) , ;
																									o:Move( o:nTop/2 , o:nLeft/2 , o:nWidth/2 , o:nHeight/2,.T. ) ) } )
y listo el pollo.