Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Cambiar colore a las lineas de un TListBox (https://www.clubdelphi.com/foros/showthread.php?t=12060)

bustio 04-07-2004 00:23:20

Cambiar colore a las lineas de un TListBox
 
Hola a todos!!!

Mi problema es el siguiente.... tengo una lista con las tareas que quiero que mi aplicacion realice. Yo necesito que una vez que una sea terminada se le pueda cambiar el color en la lista, o sea, que cuando una tarea sea completada cambie el color del FONT de la linea con el nombre de la tarea de rojo a negro, por ejemplo.

Gracias....

roman 04-07-2004 04:14:15

No hay forma directa de manipular la fuente de cada ítem por separado de manera que debes dibujarlos tú mismo poniendo la propiedad Style del ListBox en lbOwnerDrawFixed y dibujando el texto en el evento OnDrawItem:

Código Delphi [-]
procedure TForm1.ListBox1DrawItem(
  Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
  with ListBox1.Canvas do
  begin
    FillRect(Rect);
    if Terminada(Index) and not (odSelected in State) then
      Font.Color := clGreen;
    TextOut(Rect.Left + 2, Rect.Top, ListBox1.Items[Index])
  end;
end;

Aquí Terminada vendría siendo una función que determine si la tarea está acabada. En tal caso, y suponiendo que el ítem no está seleccionado en esos momentos, le cambias el color. La última condición no es necesaria pero resulta un poco difícil leer un color que no sea blanco sobre el fondo azul de la selección.

Si quieres hacer algo más osado leete el ejemplo que viene en la ayuda de Delphi sobre el evento OnDrawItem para que veas que puedes incluso colocar bitmaps al lado del texto con lo cual obtendrías algo mucho mejor para indicar el estátus de la tarea.

// Saludos

bustio 04-07-2004 05:21:00

NO me funciona
 
Parece que hay algo que no trabaja aqui.. me da una excepcion cuando trato de annadir una nueva entrada al ListBox.
Parece que hay algo que no funciona. Puede alguien explicarme como hacer para por ejemplo, pintar una linea cualqueira de un color diferente en un TLISTBOX? Yo le paso el numero de lal inea y que me lo pinte de rojo.. por ejemplo.

GRACIAS NUEVAMENTE

roman 04-07-2004 05:41:32

Cita:

Empezado por bustio
Puede alguien explicarme como hacer para por ejemplo, pintar una linea cualqueira de un color diferente en un TLISTBOX? Yo le paso el numero de lal inea y que me lo pinte de rojo.. por ejemplo.

Parece que no entendiste muy bien: no hay manera de cambiar los atributos de fuente de elementos en particular. Si quieres que los elementos aparezcan con colores diversos debes establecer el estilo lbOwnerDrawFixed para dibujarlos tú mismo.

Si el código te presenta algún problema entonces escribe aquí cuál es exactamente el código que estás usando y cuál es exactamente la excepción que ocurre y en qué linea del código.

Yo probé el código que te puse antes de mi mensaje anterior y funcionó correctamente. Lo volví a probar ahora haciendo inserciones de elementos y no presentó problemas. También probé borrando elementos y nada, ninguna excepción.

Claro está que puede haber alguna situación que no esté previendo pero sin ver el código que usas no hay manera de saberlo.

// Saludos


La franja horaria es GMT +2. Ahora son las 13:52:10.

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