Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Listbox con ultima linea añadida con diferente color (https://www.clubdelphi.com/foros/showthread.php?t=92715)

aguml 09-01-2018 16:02:39

Listbox con ultima linea añadida con diferente color
 
Hola amigos, estoy con una aplicacion la cual tiene un ListBox para mostrar una especie de log el cual si hay un error lo mostraria en rojo, si hay alguna alerta en naranja y si fue bien en verde. La idea es que vayan apareciendo lineas y cada una de su color pertinente y hasta ahora tengo esto:
Donde controlo el dibujado del listbox:
Código PHP:

void __fastcall TForm1::ListBoxLogDrawItem(TWinControl *Controlint Index,
      
TRect &RectTOwnerDrawState State)
{
    
// eliminate artifacts
    
ListBoxLog->Canvas->FillRect(Rect);

    
// Compruebo si es la ultima linea
    
if (Index == ListBoxLog->Items->Count 1) {
        
// Color del texto que deseo para la ultima linea
        
ListBoxLog->Canvas->Font->Color colorListBoxLog;
    }else{
    }
    
// dibujo el texto
    
ListBoxLog->Canvas->TextOut(Rect.Left 1Rect.Top,ListBoxLog->Items->Strings[Index]);


Uno de los que insertan una linea en el ListBox:
Código PHP:

void __fastcall TForm1::ButtonUpdateFirstLayerClick(TObject *Sender)
{
    
//Aqui ya habria que desencriptarlo
    
if(Actualizar()==-1){
        
colorListBoxLog clRed;
        
ListBoxLog->Items->Add("Hubo un error al actualizar.");
    }else{
        
colorListBoxLog clRed;
        
ListBoxLog->Items->Add("Se ha actualizado correctamente.");
        
ListBoxLog->TopIndex ListBoxLog->Items->Count 1;
    }


El problema que tengo es que me colorea bien el primero pero si inserto otra linea esa me la colorea bien pero el resto de lineas no me respeta el color que tenia y todas me las pone de negro. ¿como seria para que me respete el color de las que ya estaban?

_Leo 09-01-2018 23:30:16

Hola, aprovechando que se puede asociar un puntero TObject* a cada elemento, podrías hacer una chapucilla así para que cada elemento mantenga asociado su color:
Código PHP:

void __fastcall TForm1::ListBoxLogDrawItem(TWinControl *Controlint Index,
      
TRect &RectTOwnerDrawState State)
{
    
ListBoxLog->Canvas->FillRect(Rect);
    
ListBoxLog->Canvas->Font->Color = (TColor)ListBoxLog->Items->Objects[Index];
    
ListBoxLog->Canvas->TextOut(Rect.Left 1Rect.TopListBoxLog->Items->Strings[Index]);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ButtonUpdateFirstLayerClick(TObject *Sender)
{
    
// Al añadir un elemento especificamos el color:
    
ListBoxLog->Items->AddObject("Rojo",    (TObject*) clRed);
    
ListBoxLog->Items->AddObject("Naranja", (TObject*) RGB(255,165,0));
    
ListBoxLog->Items->AddObject("Verde",   (TObject*) clGreen);



aguml 10-01-2018 11:12:42

Muy interesante :eek: Actualmente me quedé sin pc pero en cuanto lo tenga funcionando lo probaré y te diré que tal va. Muchas gracias.

Angel.Matilla 10-01-2018 12:15:49

Una buena alternativa al uso de un TListBox es un TListView, aunque SEGURO que el código de Leo funciona a la perfección.

aguml 10-01-2018 14:07:27

Cita:

Empezado por Angel.Matilla (Mensaje 523991)
Una buena alternativa al uso de un TListBox es un TListView, aunque SEGURO que el código de Leo funciona a la perfección.

¿Que ventajas hay al usar un TListView? O sea me refiero a que qué me aporta el TListView que el TListBox no haga.

aguml 16-01-2018 13:35:00

Gracias _Leo, fue perfecto.


La franja horaria es GMT +2. Ahora son las 12:20:05.

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