if (StrToInt(ListView1->Items->Item[Item->Index]->SubItems->Strings[SubItem-1])>=StrToInt(maxproc->Text))
ListView1->Canvas->Brush->Color = clRed;
else
[COLOR=blue]ListView1->Canvas->Brush->Style=bsClear;[/COLOR]
события ListView
У меня в CustomDrawSubItem такой код:
void __fastcall TForm1::ListView1CustomDrawSubItem(TCustomListView *Sender,
TListItem *Item, int SubItem, TCustomDrawState State,
bool &DefaultDraw)
{
//начиная с четвёртого столбца в ListView
if (SubItem>3)
{
if (StrToInt(ListView1->Items->Item[Item->Index]->SubItems->Strings[SubItem-1])>100)
ListView1->Canvas->Font->Color=clRed;
else
ListView1->Canvas->Font->Color=clWhite;
}
}
почему не хочет после красного subitem делать белый, если значение в нём не >100?
У меня в CustomDrawSubItem такой код:
void __fastcall TForm1::ListView1CustomDrawSubItem(TCustomListView *Sender,
TListItem *Item, int SubItem, TCustomDrawState State,
bool &DefaultDraw)
{
//начиная с четвёртого столбца в ListView
if (SubItem>3)
{
if (StrToInt(ListView1->Items->Item[Item->Index]->SubItems->Strings[SubItem-1])>100)
ListView1->Canvas->Font->Color=clRed;
else
ListView1->Canvas->Font->Color=clWhite;
}
}
почему не хочет после красного subitem делать белый, если значение в нём не >100?[/QUOTE]
Я в последний раз настоятельно прошу соблюдать правила форума и использовать форматирование для кода. Кроме того рекомендую читать личные сообщения.
По заданному вопросу - что значит: "почему не хочет после красного subitem делать белый" - в зависимости от введенного значения цвет шрифта subitem меняется с красного на белый вполне нормально. Тестировалось полностью на вашем коде.
видимо тогда дело в свойствах ListView, чем-то они у меня отличаются от тех, что у Вас...
Установите точку останова на функцию и проверьте какие данные на самом деле передаются в функцию - возможно проблема в этом. Может некорректно составлено условие? Вобщем стоит посмотреть в отладчике.
я поменяла стиль:
Код:
эффект даёт тот-же - белый SubItem...
Теперь бы ещё отсортировать по 2-му столбцу, как это возможно?
Теперь бы ещё отсортировать по 2-му столбцу, как это возможно?[/QUOTE]
см. TListView::CustomSort(...)
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ListView1->CustomSort(CustomSortProc, 0);
}
int __stdcall CustomSortProc(long Item1, long Item2, long ParamSort)
{
return -CompareText(((TListItem *)Item2)->Caption,
((TListItem *)Item1)->Caption);
}
{
ListView1->CustomSort(CustomSortProc, 0);
}
int __stdcall CustomSortProc(long Item1, long Item2, long ParamSort)
{
return -CompareText(((TListItem *)Item2)->Caption,
((TListItem *)Item1)->Caption);
}
по событию ListView1ColumnClick сортирую также по любому столбцу:
Код:
int ColumnToSort = 1;
void __fastcall TForm1::ListView1ColumnClick(TObject *Sender,
TListColumn *Column)
{
ColumnToSort = Column->Index; // на какой колонке кликнули
((TCustomListView *)Sender)->AlphaSort();
void __fastcall TForm1::ListView1Compare(TObject *Sender, TListItem *Item1,
TListItem *Item2, int Data, int &Compare)
{
if (ColumnToSort == 0)
Compare = CompareText(Item1->Caption,Item2->Caption);
else
{
int ix = ColumnToSort - 1;
Compare =
CompareText(Item1->SubItems->Strings[ix], Item2->SubItems->Strings[ix]);
}
}
void __fastcall TForm1::ListView1ColumnClick(TObject *Sender,
TListColumn *Column)
{
ColumnToSort = Column->Index; // на какой колонке кликнули
((TCustomListView *)Sender)->AlphaSort();
void __fastcall TForm1::ListView1Compare(TObject *Sender, TListItem *Item1,
TListItem *Item2, int Data, int &Compare)
{
if (ColumnToSort == 0)
Compare = CompareText(Item1->Caption,Item2->Caption);
else
{
int ix = ColumnToSort - 1;
Compare =
CompareText(Item1->SubItems->Strings[ix], Item2->SubItems->Strings[ix]);
}
}
вся информация из хелпа и из форума. Спасибо.
Но хочется ещё знать, как программно кликнуть на столбце ListView? или может в CustomSortProc указать сразу столбец?
Но хочется ещё знать, как программно кликнуть на столбце ListView?[/QUOTE]
Отправить WM_MOUSEDOWN?
или можно поподробнее про WM_MOUSEDOWN
или можно поподробнее про WM_MOUSEDOWN[/QUOTE]Вызвать TForm1::ListView1ColumnClick(TObject *Sender, TListColumn *Column)
передав Sender == ListView1 и нужный Column.
ListView1ColumnClick(ListView1, ListView1->Column[1]);
всё получилось )
Код:
for (int i=1; i<=ListView1->Items->Count-1;i++)//cторк кол-во {
//ListView1->Items->Item->Caption;
for (int j=0; j<=ListView1->Columns->Count-1;j++)
{
//if (ListView1->Canvas->Brush->Color == clRed)
как узнать цвет??
}
}
//ListView1->Items->Item->Caption;
for (int j=0; j<=ListView1->Columns->Count-1;j++)
{
//if (ListView1->Canvas->Brush->Color == clRed)
как узнать цвет??
}
}
Код:
void __fastcall TForm1::ListView1CustomDrawSubItem(TCustomListView *Sender,
TListItem *Item, int SubItem, TCustomDrawState State,
bool &DefaultDraw)
{
//начиная с четвёртого столбца в ListView
if (SubItem>3)
{
if(Item->SubItems->Values[SubItem] > 100)
ListView1->Canvas->Font->Color=clRed;
else
ListView1->Canvas->Font->Color=clWhite;
}
}
//////////////////////////////////////////////
int cCnt = ListView1->Columns->Count-1;
int rCnt = ListView1->Items->Count-1;
for (int i=1; i<=rCnt;i++)//cторк кол-во
{
TListItem *Item = ListView1->Items->Item;
for (int j=0; j<cCnt;j++)
{
if(Item->SubItems->Values[j] > 100)
...
}
}
TListItem *Item, int SubItem, TCustomDrawState State,
bool &DefaultDraw)
{
//начиная с четвёртого столбца в ListView
if (SubItem>3)
{
if(Item->SubItems->Values[SubItem] > 100)
ListView1->Canvas->Font->Color=clRed;
else
ListView1->Canvas->Font->Color=clWhite;
}
}
//////////////////////////////////////////////
int cCnt = ListView1->Columns->Count-1;
int rCnt = ListView1->Items->Count-1;
for (int i=1; i<=rCnt;i++)//cторк кол-во
{
TListItem *Item = ListView1->Items->Item;
for (int j=0; j<cCnt;j++)
{
if(Item->SubItems->Values[j] > 100)
...
}
}
мне не хотелось бы второй раз делать анализ цвета по значению (если >, то красный, иначе белый), потому что там вычисления используются.
как всё-таки определить цвет SubItem?