Shordi   01-06-2023, 18:51
#1
Vale a raíz de otro hilo os presento hoy un control, shodial Cool Cool , que muestra un dial diverso en pantalla.
En el mentado hilo se presentan un montón de ejemplos y modos de hacerlo, y de todos ellos el que más me gustó y menos problemas me presentó es el que usaba el gran GianLuigi del foro italiano. No usa imágenes vectoriales y sí imágenes .png, que elegidas y retocadas por alguien menos patoso que yo puede dar mucho juego al controlito.

El aspecto del formulario de test que he creado es éste:

[Imagen: ySmzPoz.png]
O este
[Imagen: rBH5rip.png]
O este
[Imagen: 4ni8JXp.png]

O el que queráis. Estos tres y alguno más los he cargado sólo de ejemplo, no teniendo el control "per se" ningún aspecto en absoluto.
Las imágenes usadas como fondo del dial deben ser cuadradas y las que se usan como agujas también, con la aguja apuntando a las 3 en punto del reloj.
Fuera de esos límites, lo que ustedes quieran y puedan.
Se pueden establecer valores mínimos y máximos y se puede establecer la posición de la aguja tanto como la de la leyenda, vía ratón (Click= establecer valor, botón derecho= establecer valor mínimo;  mayuscula+botón derecho= Establecer Valor máximo y Control+Click=establecer posición de la leyenda.) o vía propiedad Value. También se puede obtener este valor en Grados, Radianes o porcentajes. Según lo que más convenga a nuestra aplicación y a la imagen elegida para el Dial.

En el ejemplo, una vez establecida una configuración para un fondo, se puede salvar, vía Settings, de forma que se recupera automáticamente al elegir el fondo.

He subido una pequeña demo a youtube y lo podéis descargar desde gitlab.

Ahora la mala noticia:                NO FUNCIONA BIEN Y NO ESTÁ TERMINADO.
(No siempre devuelve el valor deseado ni reconoce bien el ámbito Minimo-Máximo y cosas así. )

¿Entonces pa qué lo subes, so gilipollas?, pensaréis. Pues lo subo porque voy a estar unos días fuera y, con mi cerebro medio comido por los zombies, no sé qué ganas tendré a la vuelta de retomar el proyecto ni si me acordaré de todo lo que no me llega a gustar. Por otra parte seguro que tendréis mejoras, correcciones y sugerencias que hacerle y así, con suerte, tendré las tareas más enfocadas a la vuelta.

Espero que os sea útil.

Saludos
Última modificación: 14-06-2023, 11:17 por Shordi.

No podemos regresar
tincho   05-06-2023, 11:13
#2
(01-06-2023, 18:51)Shordi escribió: a raíz de otro hilo os presento hoy un control, shodial

Muy bueno, esto promete.

1 Saludo.
Shordi   06-06-2023, 11:53
#3
Retornado a mi ordenata, estoy cambiando muchas cosas, o sea que no os rompáis el coco cambiando mucho que lo mismo trabajamos en paralelo o, peor aún, en direcciones contrarias... (nótese el optimismo de pensar que hay cientos de gamberos currando en esto como locos) Cool Cool Tongue

Saludos

No podemos regresar
tincho   07-06-2023, 00:10
#4
(06-06-2023, 11:53)Shordi escribió: (nótese el optimismo de pensar que hay cientos de gamberos currando en esto como locos) Cool Cool Tongue

Si, eso es ! El optimismo nunca esta de mas.

1 Saludo.
Shordi   14-06-2023, 11:42
#5
Acabo de subir a gitlab la versión 0.0.2 del shodial. Está acabada, en el sentido de que lo que hace (hasta donde lo he probado) funciona correctamente (aunque ya se sabe que uno no puede probar sus propios programas, eso lo tienen que hacer manos, ojos y cerebros nuevos).
Como Novedad las propiedades Background, Foreground, y Font son relativas a la etiqueta donde se muestra el valor del control. Así mismo, esa etiqueta está declarada como Pública con el nombre de ValueLabel, por lo que podéis manipularla a gusto (tamaño, ubicación, borde, etc) desde fuera del propio control.

Confesar que hay algo que me disgusta enormemente dejándome un regusto a fracaso en la boca y es que no he sido capaz de implementarle las propiedades Relative e Invert.
Relative pretendía, en el caso de los porcentajes, permitir que los valores a introducir y a devolver fuesen restringidos al rango manejado (fuera de offsetFrom y offSetTo). Es decir que si el control sólo maneja 45 grados (como es el caso del amperímetro) al establecer un valor del 50% se estableciese el valor interno en 90+45/2 grados y se mostrase 50 en la etiqueta del valor. Así contado es sencillo, pero llevo demasiado tiempo estrellándome con los cálculos necesarios para toda casuística posible (a saber: que haya offset o no, que el PffsetFrom sea mayor que el OffsetTo o no, que la aguja esté ubicada aquí o allá, etc.
He probado todo lo que a mi cerebro de jubileta se le ha ocurrido y lo que mis conocimientos de matemáticas, equivalentes a los del calamar común, me han permitido y no he sido capaz. Si alguno es capaz de hacerlo, se lo agradeceré eternamente.

Así los valores son todos (tanto en radianes, como en grados, como en porcentajes) relativos a los 360 grados del círculo completo. Eso sí, si el valor está fuera del rango, la aguja no se mueve (¿Sería conveniente una propiedad InRange de tipo boolean para facilitar el control del valor?).

Invert pretendía eso, invertir la dirección de la aguja, que normalmente es aumenta en sentido anti-horario, para que fuese en sentido horario. Eso sí lo tenía... hasta que caí en la cuenta que eso no es algo que deba hacer el propio control, sino el formulario que lo maneja, así que se lo suprimí.

En fin. Aquí lo tenéis. Espero que os sea útil.

Saludos

No podemos regresar
tincho   14-06-2023, 22:32
#6
(14-06-2023, 11:42)Shordi escribió: Acabo de subir a gitlab la versión 0.0.2 del shodial.

En .project dice "Version=0.0.1"
(14-06-2023, 11:42)Shordi escribió: Es decir que si el control sólo maneja 45 grados (como es el caso del amperímetro) al establecer un valor del 50% se estableciese el valor interno en 90+45/2 grados y se mostrase 50 en la etiqueta del valor. Así contado es sencillo, pero llevo demasiado tiempo estrellándome con los cálculos necesarios para toda casuística posible (a saber: que haya offset o no, que el PffsetFrom sea mayor que el OffsetTo o no, que la aguja esté ubicada aquí o allá, etc.

Estoy intentando seguir el código y para ello estoy haciendo un proyecto de estudio con los eventos de un DrawingArea y solo con un "Print" de salida para ver la salida del angulo, ya comentare lo que sale.
Última modificación: 14-06-2023, 22:32 por tincho.

1 Saludo.
Shordi   15-06-2023, 10:44
#7
Cita:Estoy intentando seguir el código y para ello estoy haciendo un proyecto de estudio con los eventos de un DrawingArea y solo con un "Print" de salida para ver la salida del angulo, ya comentare lo que sale.
El Drawingarea trabaja con grados y funciona correctamente y no me pareció el sitio apropiado para las conversiones. El meollo, a mi entender está en el value_Read y value_write, que pueden hacer las transformaciones pertinentes, dejando al control que opere internamente en grados.

Saludos

Cita:En .project dice "Version=0.0.1"
Es raro, lo he revisado y es 0.0.2, a ver si al clonarlo ha pasado algo raro.

Saludos
Última modificación: 15-06-2023, 10:47 por Shordi.

No podemos regresar
  
Usuarios navegando en este tema: 4 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.