Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.26;
Скачать: CL | DM;

Вниз

Сортировка   Найти похожие ветки 

 
Керик   (2003-04-25 20:47) [0]

Как сделать, чтобы ListView сортировал Item"ы по алфавиту и чтобы на Column"ах были стрелочки вверх, вниз, щёлкая по которым можно выполнить сортировку по любому Column"у в алфавитном и обратном алфавитному порядке (по возрастанию или убыванию)?


 
NetBreaker666 ©   (2003-04-26 19:41) [1]

COlumnClick=True
Дальше описываешь соответствующим образом OnCompare


 
Керик   (2003-04-26 22:09) [2]

Сортировку я уже сделал. Как сохранить её для последующего запуска программы.


 
Керик   (2003-04-27 13:03) [3]

Как мне сделать, чтобы сохранялась сортировка Item`ов (номер столбца, по которому сортировать и направление - вниз, вверх)? Вот так я обрабатываю OnCompare:

procedure TLogForm.NetListCompare(Sender: TObject; Item1, Item2: TListItem;
Data: Integer; var Compare: Integer);
var
ix: Integer;
begin
if (SortingColumn = 0) or (Item2.SubItems.Count = 0) then
begin
if Direction = drDown then
Compare := CompareText(Item1.Caption, Item2.Caption)
else Compare := CompareText(Item2.Caption, Item1.Caption);
end
else
begin
ix := SortingColumn - 1;
if Direction = drDown then
Compare := CompareText(Item1.SubItems.Strings[ix], Item2.SubItems.Strings[ix])
else Compare := CompareText(Item2.SubItems.Strings[ix], Item1.SubItems.Strings[ix]);
end;
end;

А вот так OnColumnClick:

procedure TLogForm.NetListColumnClick(Sender: TObject;
Column: TListColumn);
begin
NetList.Columns.Items[SortingColumn].ImageIndex := -1;
if SortingColumn <> Column.Index then
begin
SortingColumn := Column.Index;
Direction := drDown;
end
else
begin
if Direction = drDown then
Direction := drUp
else Direction := drDown;
end;
(Sender as TCustomListView).AlphaSort;
if Direction = drDown then
Column.ImageIndex := 0
else Column.ImageIndex := 1;
end;

Вот так выполняется загрузка параметров:

procedure LoadParams;
var R: TRegistry;
begin
R := TRegistry.Create;
R.RootKey := HKEY_LOCAL_MACHINE;
R.OpenKey(Key, True);
if R.ValueExists("LastColumn") then
SortingColumn := R.ReadInteger("LastColumn");
if R.ValueExists("Direction") then
begin
if R.ReadString("Direction") = "Down" then
Direction := drDown;
if R.ReadString("Direction") = "Up" then
Direction := drUp;
end;
end;

Вот так я описал тип TDirection:

type
TDirection = (drUp, drDown);

Вот так сохраняются параметры:

procedure SaveParams;
var R: TRegistry;
begin
R := TRegistry.Create;
with R do
begin
RootKey := HKEY_LOCAL_MACHINE;
OpenKey(Key, True);
WriteInteger("LastColumn", SortingColumn);
if Direction = drDown then
WriteString("Direction", "Down")
else WriteString("Direction", "Up");
CloseKey;
end;
R.Free;
end;

Вот константы:
const Key = "Software\MyProgram";

Перед созданием окон в самом проекте я ставлю вызов к LoadParams;
Затем после создания окна прога вызывает ошибку List index out of bounds (0). Я с помощью брейкпоинтов выследил как происходит ошибка. Вот как она получается: происходит она при обработке события OnCompare: причина в том, что у Item2 нет SubItems, хотя я точно знаю что на самом деле есть, так же как и у Item1, хотя там ошибки не возникает. Как с этим справиться, я не знаю...



 
Avenger [NhT] ©   (2003-04-27 13:30) [4]

Вобще-то эта конференция посвящена програмингу на ВыньАпи!
А на нем как это сделать?



Страницы: 1 вся ветка

Текущий архив: 2003.06.26;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.022 c
3-83876
ec
2003-05-29 18:57
2003.06.26
TDBImage


1-84160
Неплохой человек
2003-06-11 15:45
2003.06.26
Загрузка строк в объект типа TStringList - непонятные глюки


7-84780
Andrey007
2003-04-17 14:52
2003.06.26
Подскажите, пожалуйста, по поводу изменения разрешения экрана.


1-84102
pasha007
2003-06-10 15:53
2003.06.26
Как изменить цвет главного меню?


1-84397
YuraKiller
2003-06-07 22:18
2003.06.26
Как обнулить таймер?