Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Как отсортировать ListView по столбцам


Автор: Alca 13.8.2006, 22:37
Как отсортировать ListView по столбцам (при клике по заголовку столбца)?

Автор: XAHbl4 14.8.2006, 03:58
У ListView есть функция 
ViewStyle там надо изменить на vsList

Автор: Vyacheslav 14.8.2006, 13:08
Смотрим хелп
Код

void __fastcall TForm1::ListView1ColumnClick(TObject *Sender, TListColumn *Column)

{
  ColumnToSort = Column->Index;
  ((TCustomListView *)Sender)->AlphaSort();
}


The OnCompare event handler causes the list view to sort on the selected column:

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]);
  }
}



Автор: Alca 14.8.2006, 22:13
Работает, спасиб. Как по второму клику (по той же колонке) отсортировать в обратном порядке?

Автор: Vyacheslav 15.8.2006, 09:16
И за одно написать всю программу за Вас? smile

Код


 void __fastcall TForm1::ListView1ColumnClick(TObject *Sender, TListColumn *Column)

{
  if (ColumnToSort == Column->Index) {
            Acsend  = - Acsend;
  } 
  else { 
            ColumnToSort = Column->Index;
            Acsend = 1;
  }

  ((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 = Acsend  * CompareText(Item1->SubItems->Strings[ix], Item2->SubItems->Strings[ix]);
  }
}
 

Автор: =Женек= 15.8.2006, 19:57
простите, что пишу здесь, но не могу создать новую тему.Я вроде зарегистрирован, но темна не создается. Появляется белый экран и все...

Пытаюсь подключить к Builder'у бибилотеку от Visual C.



Пишу #include "3ds.h"

В результате в файле 3ds.h, где есть код

Код

class CLoad3DS
{
public:
    CLoad3DS();                                // This inits the data members

    // This is the function that you call to load the 3DS
    bool Import3DS(t3DModel *pModel, char *strFileName);

private:
    // This reads in a string and saves it in the char array passed in
    int GetString(char *);

    // This reads the next chunk
    void ReadChunk(tChunk *);

    // This reads the next large chunk
    void ProcessNextChunk(t3DModel *pModel, tChunk *);

...........................



для строки    "bool Import3DS(t3DModel *pModel, char *strFileName);" выдается ошибка

3ds.h(520) E2293: ) expected...


Делаю хитро, вместо #include "3ds.h пишу #include "3ds.cpp"
ТОгда все компилится, но выдается ошибка Linker'a - что0то вроде "gbuffer declared in both - 3ds.obj and demo.obj"

Demo.obj - это от имени главного файла. ПРичем, мамой клянусь, никакого gbuffer там нет


Что делать и кто виноват?

Автор: Gordon 15.8.2006, 21:12
Ребята, а что с форумом твориться, в 12 ч по Москве было все OK, зашел сейчас и не узнал  smile ...

P.S. Я тоже не могу тему создать...

Автор: Gordon 15.8.2006, 22:22
Весело...

Автор: _hunter 16.8.2006, 10:44
инклюдить нужно таки .h-ник.
+ эти файлы нужно подобавлять к проекту (Project->Add to project)
++ может еще какой-то заголоаок (где t3DModel описівается)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)