| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Mar 24 Jun, 2003 9:08 am Asunto: Códigos de color para web |
|
|
Estoy haciendo una aplicación que al final al pulsar un botón me genera un documento .html, el usuario ha podido definir antes algunas características del documento generado como por ejemplo el color de fondo del documento .html. El problema es el siguiente:
El usuario elige un color de fondo para el documento mediante un TColorDialog luego con la función ColorToString() paso el color obtenido a la cadena necesaria para poderla escribir en el código fuente del documento, pero ninguna vez el color que me pinta en el documento es el mismo que he elegido en el programa. Tras mirar el código fuente del documento obtenido veo que muchas veces los códigos de color escritos no corresponden con los colores web necesarios.
Creo que lo que necesito es capturar los códigos de color en un string pero que me sirva para código fuente html.
Gracias. _________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mar 24 Jun, 2003 10:34 am Asunto: |
|
|
Puedes usar una función así por ejemplo:
| Código: | String Color2Html(TColor color)
{
COLORREF cr = ColorToRGB(color);
return String().sprintf("#%02X%02X%02X", cr&255, cr>>8&255, cr>>16&255);
} |
Lo que hace es devolver el color en formato #RrGgBb (Rojo, Verde, Azul) que te servirá para ponerlo directamente en el código html que generas. |
|
| Volver arriba |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Mar 24 Jun, 2003 11:25 am Asunto: |
|
|
Fantástico Leo , una vez más demuestras que eres el Rey.
Tu función ha funcionado a las mil maravillas, lo único que me tiene un poco preocupado es que no me gusta limitarme a copiar código y pegarlo en mis proyectos sin entender bien lo que hago, me gustaría que me indicaras dónde puedo incontrar información sobre estas conversiones que has hecho.
Gracias otra vez por sacarme de un apuro . _________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
Alejandro Invitado
|
Publicado: Mie 25 Jun, 2003 7:45 am Asunto: |
|
|
Aprovechando que _Leo aún duerme...
Acá va mi interpretación:
La String que representa el TColor es de tipo ABCDEF, mientras que en HTML sería EFCDAB, entonces, lo que necesitas es hacer ese trastrueque (¿qué tal la palabreja?). Y eso es lo que hace el código, de un modo muy eficiente, aunque no podriamos llamarlo "autoexplicado". Jé. |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mie 25 Jun, 2003 3:13 pm Asunto: |
|
|
Ya lo ha explicado muy bien Alejandro
Aquí va otro ejemplo quizás mas claro:
| Código: | String Color2Html(TColor color)
{
// Esto nos da el color en modo BBGGRR (Blue, Green, Red)
String s = IntToHex(ColorToRGB(color), 6);
// Aquí lo unico que hacemos es invertirlo para conseguir #RRGGBB
// que es como lo necesita el formato html
return "#" + s.SubString(5,2) + s.SubString(3,2) + s.SubString(1,2);
} |
|
|
| Volver arriba |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Mie 25 Jun, 2003 5:02 pm Asunto: |
|
|
OOOOOKKKKKK .
Captado amigos, ahora se mas o menos lo que he hecho.
Muchas gracias.
P.D. Mallorca hierve de calor . _________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Mie 25 Jun, 2003 5:53 pm Asunto: |
|
|
Creo que me alegré antes de tiempo .
Ante las últimas explicaciones recibidas y que me resultaron más claritas quise hacer otra prueba y no hay menera, me explico:
He creado un proyecto únicamente para hacer prácticas con este código, en el único formulario que hay tengo un ColorBox, un Edit y un botón.
//en un archivo de cabecera llamado kolor.h:
#include <vcl.h>
String Color2Html(TColor color);
//en el de implementación llamado kolor.cpp:
#include <vcl.h>
String Color2Html(TColor color)
{
String s = IntToHex(ColorToRGB(color), 6);
return "#" + s.SubString(5,2) + s.SubString(3,2) + s.SubString(1,2);
}
//En el Form1 he incluido el archivo de cabecera de la función:
#include "kolor.h"
//y en el Onclick del botón este código:
Edit1->Text = Color2Html(ColorBox1->Color);
/*Pues bien, sea caul sea el color seleccionado en el ColorBox1 el código que se muestra en el Edit1 siempre es el mismo :#FFFFFF
no sé dónde meto la pata*/
Gracias y perdonad mi tozudez. _________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Mie 25 Jun, 2003 6:10 pm Asunto: |
|
|
Bueno, algo he averiguado , si en lugar de coger el color de un TColorBox lo cojo de un TPanel funciona a la perfección, así que por mi no hace falta que os preocupeis más por este tema, prescindiré del ColorBox y utilizaré otros controles que me respondan mejor a las variables de color.
Saludos y gracias otra vez. _________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mie 25 Jun, 2003 6:10 pm Asunto: |
|
|
Bueno, de la mini-función no es el fallo y eso es fácilmente comprobable, para dos líneas que tiene como para que nos salga mal
El fallo es que estas usando la propiedad "Color" del combo de colores y esa propiedad no es la que nos da el color que hemos seleccionado. La propiedad que nos da el color seleccionado es ..Selected, por tanto tendrías que cambiar la línea en la que asignas la salida de la función al TEdit por:
Edit1->Text = Color2Html(ColorBox1->Selected); |
|
| Volver arriba |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Mie 25 Jun, 2003 6:25 pm Asunto: |
|
|
Sería imposible que fallo proviniera de un trozo de código tuyo , a quedado claro que ha sido de mi ignorancia. Ahora si que ya me funciona con el ColorBox. Nunca me cansaré de visitaros.
Gracias. _________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
|