Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-03-2005
Renees Renees is offline
Miembro
 
Registrado: feb 2005
Posts: 53
Poder: 20
Renees Va por buen camino
palabras con distintos colores en listbox

Hola buenas. Para todos.

Bueno mi consulta es para saber como puedo hacer para que en un lisbox tenga cada palabra con distintos colores Ej:


1 Rene - Contador
2 Pedro - Auxiliar credito
3 Juan - Piloto

Asi quisiera que me quede mi listbox. Bueno desde ya muchas gracias y hasta luego.
Responder Con Cita
  #2  
Antiguo 31-03-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.293
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Coloca en un Form un ListBox.
Añade a la propiedad item las cdenas que comentas.
Modifica la propiedad Style a lbOwnerDrawVariable
En el evento OnDrawItem programa lo siguiente.

Código Delphi [-]
 procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
   Rect: TRect; State: TOwnerDrawState);
 var
   Str, Str1, Str2:String;
   p:Integer;
   w1, w2:Integer;
   ARect:TRect;
 begin
 
   // Cadena
   Str := ListBox1.Items[Index];
   //  Posicion del Guión
   p := Pos('-', Str);
 
   // Si el guión no está => nada...
   if (p = 0) then begin
     ListBox1.Canvas.TextRect(Rect, 0, 0, Str);
   end
   else begin
     // Calculamos las subcadenas
     Str1 := Copy(Str, 1, P - 1);
     Str2 := Copy(Str, P, Length(Str));
   end;
 
   // Calcular dimensiones de ambas
   w1 := ListBox1.Canvas.TextWidth(Str1);
   w2 := ListBox1.Canvas.TextWidth(Str2);
 
   // pintamos la primera parte
   ListBox1.Canvas.Font.Color := clRed;
   ListBox1.Canvas.TextRect(Rect, Rect.Left, Rect.Top, Str1);
 
   // Dibujamos el segundo
   ARect := Rect;
   ARect.Left := aRect.Left + w1;
   ListBox1.Canvas.Font.Color := clBlue;
   ListBox1.Canvas.TextRect(aRect, aRect.Left, aRect.Top, Str2);
 end;

NOTA: Se basa en que hay un guión para separar ambas partes; Si no lo hay, no pintará nada.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 31-03-2005
Renees Renees is offline
Miembro
 
Registrado: feb 2005
Posts: 53
Poder: 20
Renees Va por buen camino
Item selecionado en Listbox en Color Verde

Hola Buenas para todos.

Queria Agradecer a Neftali, por la repuesta tan eficiente, muchas gracias. Anda a la perfeccion la combinacion de colores.

Una Consulta mas.
Como hago para que El item del Listbox Seleccionado en ves tener el color predeterminado (azul), salga un color verde.

Desde ya muchas Gracias.
Responder Con Cita
  #4  
Antiguo 31-03-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.293
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Añade éste cambio al pricipio del procedimiento:

Código Delphi [-]
 begin
   // Cambiar el color de los selccionados
   if (odSelected in State) then begin
     ListBox1.Canvas.Brush.Color := clGreen;
   end;
 
 ...
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 31-03-2005
Renees Renees is offline
Miembro
 
Registrado: feb 2005
Posts: 53
Poder: 20
Renees Va por buen camino
borde de Listbox seleccionado de otro color

Hola Neftaldi, La ultima Consulta si seria posible, Como Hago para El color del Borde del Item seleccionado del Listo, para cambiar color, Perdon por Abuzar de tu sabiduria, Y si seria posible de donde puedo conseguir manuales para enternder el canvas. Desde Millones de gracias
Responder Con Cita
  #6  
Antiguo 01-04-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.293
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Renees
Hola Neftaldi, La ultima Consulta si seria posible, Como Hago para El color del Borde del Item seleccionado del Listo, para cambiar color, Perdon por Abuzar de tu sabiduria, Y si seria posible de donde puedo conseguir manuales para enternder el canvas. Desde Millones de gracias
Creo que ese color, al igual que la forma de pintar el borde (discontinuo) ya no es tan sencillo ya que ese coge lo definido en el sistema, y habría que realizar el repintado cuando hay un elemento seleccionado, cosa que ya no es trivial.
En cuanto al canvas, puees echarle un vistazo a la ayuda de Delphi, o a cualquier manual en los capítulos que te hablen de gráficos.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #7  
Antiguo 01-04-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Inmediatamente después de

Código Delphi [-]
if (odSelected in State) then begin
  ListBox1.Canvas.Brush.Color := clGreen;
end;

intenta colocar este código

Código Delphi [-]
if odFocused in State then
begin
  ListBox1.Canvas.Brush.Style := bsClear;

  ListBox1.Canvas.Pen.Style := psDot;
  ListBox1.Canvas.Pen.Color := clRed;
  ListBox1.Canvas.Rectangle(Rect);

  DrawFocusRect(ListBox1.Canvas.Handle, Rect);
end;

Las tres líneas centrales pintarán un borde punteado de color rojo y la última línea borra el borde punteado por defecto.

Si omiten las líneas centrales simplemente evitarán el borde punteado que quizá es lo que se desee.

// Saludos
Responder Con Cita
  #8  
Antiguo 04-04-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.293
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Neftali
...ya no es tan sencillo...
Pues sí era sencillo.
Gracias Román.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #9  
Antiguo 05-04-2005
Elfoscuro Elfoscuro is offline
Miembro
 
Registrado: mar 2005
Posts: 59
Poder: 20
Elfoscuro Va por buen camino
Una duda...

¿Por qué no pinta nada cuando no hay guión?

Yo he modificado el código original incluyendo todo dentro del else (p=0), y así me pinta una vez, pero no las demás. Es decir:

Código:
   Str := ListBox1.Items[Index];
   p := Pos('-', Str);
   if (p = 0) then
	   begin
		 ListBox1.Canvas.TextRect(Rect, 0, 0, Str);
	   end
	 else
	   begin
		 Str1 := Copy(Str, 1, P - 1);
		 Str2 := Copy(Str, P, Length(Str));
		 w1 := ListBox1.Canvas.TextWidth(Str1);
		 w2 := ListBox1.Canvas.TextWidth(Str2);
		 ListBox1.Canvas.Font.Color := clRed;
		 ListBox1.Canvas.TextRect(Rect, Rect.Left, Rect.Top, Str1);
		 ARect := Rect;
		 ARect.Left := aRect.Left + w1;
		 ListBox1.Canvas.Font.Color := clBlue;
		 ListBox1.Canvas.TextRect(aRect, aRect.Left, aRect.Top, Str2);
	   end;
Además en el form tengo un edit y un button, y en el evento onclick del button pongo:

Código:
  ListBox1.Items.Add(Edit1.Text);
Vale, si en el edit dejo el text que sale (Edit1) y le doy al botón, me lo pinta en negro, pero solo la primera vez. Después salen líneas en blanco... Eso no es normal, ¿no? Al fin y al cabo la primera parte del if me lo pintaría si no hubiera guiones, ¿no?

No lo entiendo...

Saludos del elfo
Responder Con Cita
  #10  
Antiguo 05-04-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.293
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Elfoscuro
Una duda...¿Por qué no pinta nada cuando no hay guión?
Porque éste ejemplo pintaba lo de antes del guión en un color y lo de después del guión en otro color. Esa era la premisa.

Cita:
Empezado por Elfoscuro
...Yo he modificado el código original incluyendo todo dentro del else (p=0), y así me pinta una vez, pero no las demás...
Esa modificación creo que no es correcta.
¿Exactamente cómo quieres pintar letra de un color y de otro? ¿Cual es el criterio a seguir? En el ejemplo expuesto era utilizando el guión, en tu caso no me queda claro lo que necesitas.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #11  
Antiguo 05-04-2005
Elfoscuro Elfoscuro is offline
Miembro
 
Registrado: mar 2005
Posts: 59
Poder: 20
Elfoscuro Va por buen camino
Cita:
Citar:
Originalmente publicado por Elfoscuro
Una duda...¿Por qué no pinta nada cuando no hay guión?

Porque éste ejemplo pintaba lo de antes del guión en un color y lo de después del guión en otro color. Esa era la premisa.
Citar:
Originalmente publicado por Elfoscuro
...Yo he modificado el código original incluyendo todo dentro del else (p=0), y así me pinta una vez, pero no las demás...
Esa modificación creo que no es correcta.
¿Exactamente cómo quieres pintar letra de un color y de otro? ¿Cual es el criterio a seguir? En el ejemplo expuesto era utilizando el guión, en tu caso no me queda claro lo que necesitas.
Simplemente estaba jugando con el código que se puso. Intenté que si no había guión se pintara la string en tinta negra en lugar de tinta de dos colores. Para hacer eso, mi código es correcto, ¿no? El tema es que falla, me dibuja bien la primera línea, pero no las demás. Sin embargo si pongo un guión, si que pinta de colores como toca. Pero del color negro nunca más se supo. En su lugar consigo muchas líneas en blanco.

No se si me explico.

Saludos del elfo
Responder Con Cita
  #12  
Antiguo 05-04-2005
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cool

El error está aqui:

Código Delphi [-]
  ListBox1.Canvas.TextRect(Rect, 0, 0, Str);
  // el código correcto debiera ser:
  ListBox1.Canvas.TextRect(Rect, Rect.Left, Rect.Top, Str);

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #13  
Antiguo 06-04-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.293
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por jachguate
El error está aqui:
...
Ahí está, sí señor...
...se me adelantaron
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #14  
Antiguo 06-04-2005
Elfoscuro Elfoscuro is offline
Miembro
 
Registrado: mar 2005
Posts: 59
Poder: 20
Elfoscuro Va por buen camino
Ups!!!!!

Vaya fallo más capullo
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 14:41:17.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi