Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.059 c
1-84381
Maxx
2003-06-09 12:21
2003.06.26
Создание BMP


1-84402
kull
2003-06-09 11:09
2003.06.26
FormatDateTime...


6-84490
Shirson
2003-04-22 13:29
2003.06.26
OLE или Word + TWebBrowser


1-84332
Andrey02
2003-06-15 22:59
2003.06.26
Правильное прерывание потоков


8-84450
AM
2003-03-11 14:06
2003.06.26
Многоугольник по координатам в OpenGL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский