Autoajuste de un label

Tus preguntas. Algoritmos o Grupos de Comandos formando Programas Escripts.
Responder
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

Autoajuste de un label

Mensaje por Jonny »

Hola:

Estoy intentando hacer un label, cuyo ancho y alto sean relativos al texto que contenga. O sea, que se autoajuste, según si contiene: "hola" u "hola que tal".

en la ayuda de GUICTRLCreateLabel() dice, que el tercer y cuarto parámetro (ancho y alto del control, respectivamente) por defecto son el autoajuste al tamaño del texto. Pero he probado con -1, ""... y no hay forma, con esos valores no se ve el label.

En los comentarios de esta función dice (en la ayuda traducida que tengo):
El reajuste por defecto es $GUI_DOCKAUTO tamaño y posición serán tomados.
No lo entiendo muy bien, porque bien, lo que se dice bien traducido... ¡no es que esté! :)
Pero entiendo, que esa constante, es la que hay que poner en el tercer y cuarto parámetro de la función, para que el tamaño del control se ajuste automáticamente al texto ¿no?.
He probado, y nada: No se ve el label...

¿Sabéis cual es ese "valor por defecto" de estos dos parámetros? ¿Cómo se hace, para que el label se ajuste en ancho y alto, según el texto que contenga, automáticamente?.

¡Thanks!

Salu2!
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

Re: Autoajuste de un label

Mensaje por Dany »

Si lo dejas por defecto

Código: Seleccionar todo

 $label=GUICtrlCreateLabel("Cadena", 10, 30); el label sera del largo que requiera tu palabra cadena

saludos
  • ............................................Imagen
    ......................................Imagen
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

Re: Autoajuste de un label

Mensaje por Jonny »

Gracias

Perdón, porque creo que no dije, que me refería a como hacerlo, si quería especificar el estilo del label. Como has indicado, sí que se tomaría el valor por defecto. Pero también se tomaría el estilo por defecto.
¿Cómo se haría, si quisiera dejar ese parámetro por defecto, pero indicar un estilo del label distinto al de por defecto?.

Salu2!
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

Re: Autoajuste de un label

Mensaje por Dany »

entonces es así:

Código: Seleccionar todo

#include <GDIPlus.au3>
#include <Misc.au3>

$gui = GUICreate("test", 400, 200)

$label = GUICtrlCreateLabel("old", 10, 10, 20, 15)

GUISetState()

updateTXT()

While 1
    Sleep(10)
WEnd

Func updateTXT()

    MsgBox(0, "", "please choose font and a larger font size")

    $font_attributes = _ChooseFont()

    If Not @error Then
        $aDim = GetStringSize("old", $font_attributes[2], $font_attributes[3], $font_attributes[1])
        GUICtrlSetPos($label, 10, 10, $aDim[0], $aDim[1])
        GUICtrlSetFont($label, $font_attributes[3], "", "", $font_attributes[2], 4)
;~         MsgBox(0, "", "font/size changed label size has not - how do i calculate what the new label size should be?")
        Sleep(2000)
        Exit
    EndIf

EndFunc   ;==>updateTXT


Func GetStringSize($string, $font, $fontsize, $fontstyle)
    Local $GDIp = False
    Local $iWidth = StringLen($string) * $fontsize
    Local $iHeight = 2 * $fontsize
    If Not $ghGDIPDll Then
        _GDIPlus_Startup()
        $GDIp = True
    EndIf
    Local $aResult = DllCall($ghGDIPDll, "uint", "GdipCreateBitmapFromScan0", "int", $iWidth, "int", $iHeight, "int", 0, "int",  0x0026200A, "ptr", 0, "int*", 0)
    Local $hBitmap = $aResult[6]
    Local $hGrphContext = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    Local $hFormat = _GDIPlus_StringFormatCreate()
    Local $hFamily = _GDIPlus_FontFamilyCreate($font)
    Local $hFont = _GDIPlus_FontCreate($hFamily, $fontsize, $fontstyle)
    Local $tLayout = _GDIPlus_RectFCreate(0, 0, 0, 0)
    Local $aInfo = _GDIPlus_GraphicsMeasureString($hGrphContext, $string, $hFont, $tLayout, $hFormat)
    _GDIPlus_FontDispose($hFont)
    _GDIPlus_FontFamilyDispose($hFamily)
    _GDIPlus_StringFormatDispose($hFormat)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_GraphicsDispose($hGrphContext)
    If $GDIp Then _GDIPlus_Shutdown()
    Local $aDim[2] = [Int(DllStructGetData($aInfo[0], "Width")), Int(DllStructGetData($aInfo[0], "Height"))]
    Return $aDim
EndFunc

saludos
  • ............................................Imagen
    ......................................Imagen
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

Re: Autoajuste de un label

Mensaje por Jonny »

¡La leche!

¿esa es la forma más sencilla? :)

Como para que me funcionara... ¡En la ayuda no pone nada de esto!. Y mucho menos, que haya que usar GDI ;)

¿este código lo has hecho tú, o de dónde lo has sacado?. Sólo es curiosidad, porque viéndolo por encima, se ve complicado.

Tendré que verlo con mucha calma y tiempo, porque GDI se me atraganta.
Pero creo, que únicamente lo usas para calcular el tamaño de la fuente y eso ¿no?. ¿No podría hacerse eso, de una forma más sencilla?. No sé, con alguna API de Windows para ello, o algo así.

Veo, que inicialmente, al label le das valores de ancho y alto (20 y 15 respectivamente).
¿Esos valores los has puesto al azar, o para que quepa bien "old"?.
De todas formas, veo que al menos inicialmente el label no tiene efinidos estilos, pero supongo que de definirlos, se haría todo igual ¿verdad?.

Thanks.

Salu2!
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

Re: Autoajuste de un label

Mensaje por Dany »

Muestra tu código con algo mas exacto de lo que quieres hacer a a ver si se puede hacer de una manera mas fácil.


el texto de la label cambiara en tiempo de ejecución? o solo quieres inicializar el label con x fuente?
  • ............................................Imagen
    ......................................Imagen
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

Re: Autoajuste de un label

Mensaje por Jonny »

En algunos casos, el texto siempre será el mismo: Con el que se inicialice el label. En otros, irá cambiando en tiempo de ejecución.

Código... No tengo gran cosa, relacionado con el label; me estuve mareando con el tercer y cuarto parámetros de GuiCtrlCreateLabel() y no conseguí nada, así que de momento lo dejé aparcado y me puse con otras cosas.

En realidad, lo que pretendo es, que el contenido de la interfaz sea dinámico: Que se ajuste a la resolución de la pantalla, pues quiero hacer una ventana, que ocupe toda la resolución horizontal y vertical, y en ella poner elementos GUI. Pero, la posición debe ser relativa, no absoluta, para que en cada pantalla se vea igual, no se trunquen los textos... Y bueno, los elementos GUI deben ajustar su tamaño también al contenido que poseen.

Salu2!
Avatar de Usuario
Dany
Profesional del Autoit
Mensajes: 651
Registrado: 28 Mar 2012, 22:49

Re: Autoajuste de un label

Mensaje por Dany »

  • ............................................Imagen
    ......................................Imagen
Jonny
Profesional del Autoit
Mensajes: 1042
Registrado: 30 Jun 2008, 20:08

Re: Autoajuste de un label

Mensaje por Jonny »

Gracias, voy a mirarlo.

Salu2!
Responder