Форум: "WinAPI";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];
ВнизСортировка Найти похожие ветки
← →
Керик (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 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.06.26;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.043 c