Текущий архив: 2007.10.07;
Скачать: CL | DM;
Вниз
TListView про сортировку Найти похожие ветки
← →
newanat (2007-09-11 19:51) [0]Сделал в стандартном TListView сортировку при клике по Columns. Но захотелось всё это сделать, как делают другие умные дядя - а именно добавить в Columns Header при сортировке стрелку указывающую в каком направлении произведена сортировка и окрасить столбец, который был отсортирован в другой цвет.
Я конечно понимаю, что могу попытаться сделать, но возможно есть готовые примеры или решения?
← →
{RASkov} © (2007-09-11 20:15) [1]> [0] newanat (11.09.07 19:51)
> но возможно есть готовые примеры или решения?
Стандартных нет...... или если только в "левых" компонентах.... ищи. Или делай сам.
← →
Korneley © (2007-09-11 22:21) [2]Если не особо "лениво", и хочется быстро, то 2 переменные (по какой колонке сортируем и направление сортировки) + эвенты:
procedure TOperW.LV1ColumnClick(Sender: TObject; Column: TListColumn);
var i : integer;
begin
for i := 0 to LV1.Columns.Count - 1 do LV1.Columns[i].ImageIndex := -1;
if ColumnToSort = Column.Index
then DirectToSort := (DirectToSort xor 1)
else DirectToSort := 0;
Column.ImageIndex := DirectToSort + 10;// просто у меня 10 и 11 - стрелки вниз/вверх
ColumnToSort := Column.Index;
(Sender as TCustomListView).AlphaSort;
if LV1.Selected <> nil then LV1.Selected.MakeVisible(true);
end;
procedure TOperW.LV1Compare(Sender: TObject; Item1, Item2: TListItem;
Data: Integer; var Compare: Integer);
begin
if ColumnToSort = 0 then
Compare := CompareText(Item1.Caption,Item2.Caption)
else
if ColumnToSort > 0 then begin
Compare := CompareText(Item1.SubItems[ColumnToSort - 1],Item2.SubItems[ColumnToSort - 1]);
end;
if DirectToSort = 1 then Compare := -Compare;
end;
Column.ImageIndex назначается из ImageList, назначеных для ListView. Сумбурно, но работает...
← →
newanat (2007-09-12 08:50) [3]Да, спасибо, я этим я вроде разобрался.
Но остался вопрос, у меня при этом в первом Columns появляется отступ равный ширине картинки в ImageList"e. Хотя при создании записи в ListView, я указываю Items.....ImageIndex := -1; Самой картинки нет, но отступ появляется. Как этого избежать?
И как все же окрасить в другой цвет Columns который был отсортирован?
← →
Korneley © (2007-09-12 09:15) [4]Если просто фон изменить, то пользуй эвент TListView.OnCustomDrawSubItem, только DefaultDraw там не трогай. Просто измени Brush.Color на нужный тебе для нужной колонки (параметр Subitem). Если что-то посложнее, см.
http://delphimaster.net/view/2-1189508158/
там как раз про отрисовку сабитемов ветка.
← →
newanat (2007-09-12 09:26) [5]Ещё раз спасибо. Буду с этим работать.
Но у меня все ещё остается не решенным вопрос с отступом, в первой колонке. Я не придумал как этого избежать. ?
Может можно как-то назначить картинки для Column.ImageIndex, не через присвоенный SmallImages в ListView?
← →
newanat (2007-09-12 09:40) [6]И ещё вопрос по отрисовке как изменить расположение картинок в Column, хочу что бы картинка была показана после текста, а не до него.
← →
korneley © (2007-09-12 09:41) [7]
> Но у меня все ещё остается не решенным вопрос с отступом,
> в первой колонке
Может поможет совет из той же ветки?
"Я бы вообще посоветовал выставить ListView стиль OwnerDraw := true и выполнять отрисовку всего в OnDrawItem" (с)DVM
Страницы: 1 вся ветка
Текущий архив: 2007.10.07;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.037 c