Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

**Устранение проблем с сортировкой в `TListView` в Delphi 11 Alexandria на Windows 10**

Delphi , Компоненты и Классы , TListView

Проблема с отображением стрелок сортировки в TListView в приложениях VCL для 32-битных систем под Windows 10 в среде разработки Delphi 11 Alexandria заключается в том, что при клике по заголовку второго столбца, стрелка сортировки в первом столбце не исчезает, пока пользователь не изменит размер TListView. Это происходит из-за того, что при смене столбца для сортировки не происходит явно снятие флагов сортировки с предыдущего столбца.

Вот шаги, которые помогут решить эту проблему:

  1. Инициализация переменных: В методе FormCreate инициализируйте переменные, которые хранят состояние сортировки для каждого столбца и текущий индекс сортируемого столбца.

    ```pascal private FColumnSortedUp: array[0..1] of Boolean; FSortedColumn: Integer;

    ...

    procedure TFormMain.FormCreate(Sender: TObject); begin FSortedColumn := -1; end; ```

  2. Обработка клика по заголовку столбца: В обработчике события OnColumnClick TListView необходимо сначала снять флаги сортировки с предыдущего столбца, если таковой имеется, а затем установить флаги для нового столбца.

    ```pascal procedure TFormMain.ListView1ColumnClick(Sender: TObject; Column: TListColumn); begin if FSortedColumn <> -1 then SetListHeaderSortArrow(FSortedColumn, False);

    if FSortedColumn = Column.Index then FColumnSortedUp[FSortedColumn] := not FColumnSortedUp[FSortedColumn] else FSortedColumn := Column.Index;

    SetListHeaderSortArrow(FSortedColumn, True);

    // Сортировка элементов ListView, как это необходимо... end; ```

  3. Установка флагов сортировки: В методе SetListHeaderSortArrow сначала снимите все флаги сортировки, а затем установите флаги для нужного столбца в зависимости от текущего состояния сортировки.

    ```pascal procedure TFormMain.SetListHeaderSortArrow(const AColumnIndex: Integer; const AEnabled: Boolean); var Header: HWND; Item: THDItem; begin Header := ListView_GetHeader(ListView1.Handle); ZeroMemory(@Item, SizeOf(Item)); Item.Mask := HDI_FORMAT; Header_GetItem(Header, AColumnIndex, Item); Item.fmt := Item.fmt and not (HDF_SORTUP or HDF_SORTDOWN); // Снимаем оба флага

    if AEnabled then begin if FColumnSortedUp[AColumnIndex] then Item.fmt := Item.fmt or HDF_SORTUP // Включаем флаг сортировки по возрастанию else Item.fmt := Item.fmt or HDF_SORTDOWN; // Включаем флаг сортировки по убыванию end;

    Header_SetItem(Header, AColumnIndex, Item); end; ```

  4. Обработка изменения размера столбца: Используйте обработчик HDN_ENDTRACK для обнаружения момента, когда пользователь закончил изменять размер столбца, и обновите отображение стрелок сортировки.

    ```pascal private OldWndProc: TWndMethod;

    ...

    procedure TFormMain.FormCreate(Sender: TObject); begin ... OldWndProc := ListView1.WindowProc; ListView1.WindowProc := ListViewWndProc; end;

    procedure TFormMain.ListViewWndProc(var Message: TMessage); begin OldWndProc(Message); if Message.Msg = WM_NOTIFY then begin if TWMNotify(Message).NMHdr.code = HDN_ENDTRACK then begin if PHDNotify(TWMNotify(Message).NMHdr).Item = FSortedColumn then SetListHeaderSortArrow(FSortedColumn, True); end; end; end; ```

Применение этих шагов поможет устранить проблему с отображением стрелок сортировки в TListView при смене столбца сортировки.

Создано по материалам из источника по ссылке.

Проблема заключается в том, что в приложениях VCL под Delphi 11 Alexandria на 32-битных системах Windows 10 некорректно отображаются стрелки сортировки в `TListView`, когда меняется столбец для сортировки, из-за чего необходимо явно снимать флаги сортиро


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TListView ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2024-12-26 15:20:24/0.0033068656921387/0