Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

события ListView

9.0K
31 июля 2006 года
j_anna
45 / / 10.07.2006
какое событие использовать для раскрасски subitem у 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?
1
01 августа 2006 года
kot_
7.3K / / 20.01.2000
[QUOTE=j_anna]какое событие использовать для раскрасски subitem у 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?[/QUOTE]
Я в последний раз настоятельно прошу соблюдать правила форума и использовать форматирование для кода. Кроме того рекомендую читать личные сообщения.
По заданному вопросу - что значит: "почему не хочет после красного subitem делать белый" - в зависимости от введенного значения цвет шрифта subitem меняется с красного на белый вполне нормально. Тестировалось полностью на вашем коде.
9.0K
01 августа 2006 года
j_anna
45 / / 10.07.2006
видимо тогда дело в свойствах ListView, чем-то они у меня отличаются от тех, что у Вас...
1
01 августа 2006 года
kot_
7.3K / / 20.01.2000
[QUOTE=j_anna]видимо тогда дело в свойствах ListView, чем-то они у меня отличаются от тех, что у Вас...[/QUOTE]
Установите точку останова на функцию и проверьте какие данные на самом деле передаются в функцию - возможно проблема в этом. Может некорректно составлено условие? Вобщем стоит посмотреть в отладчике.
9.0K
01 августа 2006 года
j_anna
45 / / 10.07.2006
посмотрела в отладчике - всё происходит в соответствии с условием, но цвет не меняет на белый...
я поменяла стиль:
 
Код:
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]


эффект даёт тот-же - белый SubItem...

Теперь бы ещё отсортировать по 2-му столбцу, как это возможно?
246
01 августа 2006 года
GIZMO
1.8K / / 30.07.2004
[QUOTE=j_anna]
Теперь бы ещё отсортировать по 2-му столбцу, как это возможно?[/QUOTE]
см. TListView::CustomSort(...)
9.0K
02 августа 2006 года
j_anna
45 / / 10.07.2006
Получилось сортировать по превому столбцу:

Код:
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);
}


по событию 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]);
}
}


вся информация из хелпа и из форума. Спасибо.

Но хочется ещё знать, как программно кликнуть на столбце ListView? или может в CustomSortProc указать сразу столбец?
246
02 августа 2006 года
GIZMO
1.8K / / 30.07.2004
[QUOTE=j_anna]

Но хочется ещё знать, как программно кликнуть на столбце ListView?[/QUOTE]
Отправить WM_MOUSEDOWN?
9.0K
02 августа 2006 года
j_anna
45 / / 10.07.2006
может как-нибудь попроще ..
или можно поподробнее про WM_MOUSEDOWN
3.0K
02 августа 2006 года
Мerlin
267 / / 25.07.2006
[QUOTE=j_anna]может как-нибудь попроще ..
или можно поподробнее про WM_MOUSEDOWN[/QUOTE]Вызвать TForm1::ListView1ColumnClick(TObject *Sender, TListColumn *Column)
передав Sender == ListView1 и нужный Column.
9.0K
02 августа 2006 года
j_anna
45 / / 10.07.2006
я как раз про этот вариант думала, но затупилась, что Sender передавать )

ListView1ColumnClick(ListView1, ListView1->Column[1]);

всё получилось )
9.0K
03 августа 2006 года
j_anna
45 / / 10.07.2006
как при переборе Item-ов и столбцов узнать теперь цвет:

 
Код:
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)
как узнать цвет??
     }
}
3.0K
03 августа 2006 года
Мerlin
267 / / 25.07.2006
Лучше было бы при добавлении элементов в ListView, присвоить выводимое значение полю Values и по этому значению определять цвет.
Код:
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)
     ...
  }
}
9.0K
04 августа 2006 года
j_anna
45 / / 10.07.2006
то есть нельзя цвет так определить?

мне не хотелось бы второй раз делать анализ цвета по значению (если >, то красный, иначе белый), потому что там вычисления используются.

как всё-таки определить цвет SubItem?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог