Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 855

/ вопрос открыт /

Здравствуйте!
Помогите пожалуйста с TListView. Надо сделать сортировку на Листе! Я знаю что в самом компоненте есть это фунциа но он толка для итемов. А мне надо сделать это ортировку на Субитемов. Как это сделать дайте совет? Заранее спасибо!!!

Например я хочу сделать так :
________________________________________
| 1-column | 2-column | 3-column |
|тут числи | тут дата | а тут текст |<-- Кнопки сортов
|это итемы |это уже субитем| это тож субитем |
|-------------|-------------------|----------------------|
| 1 | 12.15.2008 | asd |
| 2 | 11.15.2008 | dsa |
|-------------|-------------------|----------------------|

Кажется вы меня поняли.

ElektrinO Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: ElektrinO (статус: Посетитель)
Вопрос отправлен: 27 августа 2008, 18:29
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Feniks

Здравствуйте, ElektrinO!
Если я вас правильно понял, вы пытаетесь сортировать по колонкам и у вас TListView имеет стиль vsReport, тогда держите в Приложении пример.

Приложение:
  1.  
  2.  
  3.  
  4. procedure(Sender: TObject; Item1, Item2: TListItem;Data: Integer; var Compare: Integer) of object;
  5.  
  6.  
  7. procedure TForm1.ListView1Compare(Sender: TObject; Item1,
  8. Item2: TListItem; Data: Integer; var Compare: Integer);
  9. var
  10. n1, n2: integer;
  11. begin
  12. n1 := StrToInt(Item1.SubItems[2]);
  13. n2 := StrToInt(Item2.SubItems[2]);
  14. if n1 > n2 then
  15. Compare := -1
  16. else if n1 < n2 then
  17. Compare := 1
  18. else
  19. Compare := 0;
  20. end;
  21.  
  22. ListView1.SortType := stBoth;
  23.  
  24. ListView1.SortType := stBoth;
  25. ListView1.SortType := stNone;
  26.  
  27. ListView1.CustomSort(nil, 0);
  28.  
  29.  
  30. function ByFourth(Item1, Item2: TListItem; Data: integer):
  31. integer; stdcall;
  32. var
  33. n1, n2: cardinal;
  34. begin
  35. n1 := StrToInt(Item1.SubItems[2]);
  36. n2 := StrToInt(Item2.SubItems[2]);
  37. if n1 > n2 then
  38. Result := -1
  39. else if n1 < n2 then
  40. Result := 1
  41. else
  42. Result := 0;
  43. end;
  44.  
  45. ListView1.CustomSort(@ByFourth, 0);
  46.  
  47.  
  48.  
  49. unit SortedListView;
  50.  
  51. interface
  52.  
  53. uses
  54. Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  55. ComCtrls;
  56.  
  57. type
  58. TSortedListView = class(TListView)
  59. private
  60. FSortColumn: Integer;
  61. procedure SetSortColumn(const Value: Integer);
  62. procedure SortedListViewCompare(Sender: TObject; Item1, Item2: TListItem;
  63. Data: Integer; var Compare: Integer);
  64. procedure SortedListViewColumnClick(Sender: TObject; Column: TListColumn);
  65. { Private declarations }
  66. protected
  67. { Protected declarations }
  68. public
  69. constructor Create(AOwner: TComponent); override;
  70. { Public declarations }
  71. published
  72. { Published declarations }
  73. property SortColumn: Integer read FSortColumn write SetSortColumn;
  74. end;
  75.  
  76. implementation
  77.  
  78. {==============================================================================}
  79. { TSortedListView }
  80. {==============================================================================}
  81. constructor TSortedListView.Create(AOwner: TComponent);
  82. begin
  83. inherited;
  84.  
  85. OnColumnClick := SortedListViewColumnClick;
  86. OnCompare := SortedListViewCompare;
  87. end;
  88. {==============================================================================}
  89.  
  90. procedure TSortedListView.SetSortColumn(const Value: Integer);
  91. begin
  92. FSortColumn := Value;
  93. AlphaSort;
  94. end;
  95. {==============================================================================}
  96.  
  97. procedure TSortedListView.SortedListViewColumnClick(Sender: TObject;
  98. Column: TListColumn);
  99. begin
  100. SortColumn := Column.Index;
  101. end;
  102. {==============================================================================}
  103.  
  104. procedure TSortedListView.SortedListViewCompare(Sender: TObject;
  105. Item1, Item2: TListItem; Data: Integer; var Compare: Integer);
  106. begin
  107. if SortColumn = 0 then
  108. Compare := CompareText(Item1.Caption, Item2.Caption)
  109. else
  110. Compare := CompareText(Item1.SubItems[SortColumn - 1], Item2.SubItems[SortColumn - 1]);
  111. end;
  112.  
  113. end.


Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 27 августа 2008, 19:03


Мини-форум вопроса

Всего сообщений: 3; последнее сообщение — 1 сентября 2008, 09:54; участников в обсуждении: 3.
Вадим К

Вадим К (статус: Академик), 27 августа 2008, 18:40 [#1]:

то есть сортировку по колонкам?, ну как к примеру в проводнике
Галочка "подтверждения прочтения" - вселенское зло.
ElektrinO

ElektrinO (статус: Посетитель), 31 августа 2008, 14:09 [#2]:

Feniks, Спс тебе ты мне очень помог !
Feniks

Feniks (статус: Бакалавр), 1 сентября 2008, 09:54 [#3]:

Ну так если помог, будьте так добры, не забывайте о благодарности. ;-)
Ведь ее не зря придумал Администратор портала.
Ваша благодарность - это единственное, что может получить Эксперт от вас за свой нелегкий труд. :-D

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:34
Выполнено за 0.04 сек.