Hola.
La situación no me termina de quedar clara... Cuando el valor de la columna LITERAL es
NULL, ¿ Deseas que el ítem del CheckListBox incluya algún texto como sugiere la imágen de tu primer mensaje ?
Si no te interpreté mal y es así, creo que lo mas simple es hacerlo con la sugerencia de
Casimiro, ejemplo :
Código PHP:
...
void __fastcall TForm1::FormCreate(TObject *Sender)
{
TIBQuery *qy = static_cast<TIBQuery*>(IBQuery1);
qy->Close();
qy->SQL->Clear();
qy->SQL->Add( "SELECT DISTINCT A.SITUACION," );
qy->SQL->Add( "COALESCE(UPPER(B.LITERAL), 'NULO') AS LITERAL" );
qy->SQL->Add( "FROM PERSONA A LEFT JOIN INSTALACION" );
qy->SQL->Add( "B ON A.SITUACION = B.VALOR ..." );
...
for ( qy->Open(); !qy->Eof; qy->Next() )
CheckListBox1->Items->Add(qy->FieldByName("LITERAL")->AsString );
CheckListBox1->Style = lbOwnerDrawFixed;
}
void __fastcall TForm1::CheckListBox1DrawItem(TWinControl *Control,
int Index, TRect &Rect, TOwnerDrawState State)
{
TCheckListBox *lb = static_cast<TCheckListBox*>(Control);
AnsiString str = lb->Items->Strings[Index];
if ( str == "NULO" ) {
lb->Canvas->Font->Color = clRed;
lb->Canvas->Font->Style = TFontStyles() << fsBold << fsUnderline;
}
lb->Canvas->FillRect( Rect );
lb->Canvas->TextOut( Rect.left, Rect.top, str );
}
Muestra:
Saludos
