Отображать элементы TListView как группу XPDelphi , Компоненты и Классы , TListViewОтображать элементы TListView как группу XP
Оформил: DeeCo // declarations from commctrl.h type TLVGROUP = record cbSize: UINT; mask: UINT; pszHeader: LPWSTR; cchHeader: Integer; pszFooter: LPWSTR; cchFooter: Integer; iGroupIdL: Integer; stateMask: UINT; state: UINT; uAlign: UINT; end; tagLVITEMA = packed record mask: UINT; iItem: Integer; iSubItem: Integer; state: UINT; stateMask: UINT; pszText: PAnsiChar; cchTextMax: Integer; iImage: Integer; lParam: lParam; iIndent: Integer; iGroupId: Integer; cColumns: UINT; puColumns: PUINT; end; TLVITEMA = tagLVITEMA; const LVM_ENABLEGROUPVIEW = LVM_FIRST + 157; LVM_MOVEITEMTOGROUP = LVM_FIRST + 154; LVM_INSERTGROUP = LVM_FIRST + 145; LVIF_GROUPID = $0100; LVGF_HEADER = $00000001; LVGF_ALIGN = $00000008; LVGF_GROUPID = $00000010; LVGA_HEADER_LEFT = $00000001; LVGA_HEADER_CENTER = $00000002; LVGA_HEADER_RIGHT = $00000004; procedure TForm1.Button1Click(Sender: TObject); var LvGroup: TLVGROUP; LvItemA: TLVITEMA; ListItem: TListItem; I: Byte; begin // Fill listview with random data Randomize; for i := 1 to 10 do begin ListItem := ListView1.Items.Add; ListItem.Caption := IntToStr(Random(100)); end; SendMessage(ListView1.Handle, LVM_ENABLEGROUPVIEW, 1, 0); // Create Group1 FillChar(LvGroup, SizeOf(TLVGROUP), 0); with LvGroup do begin cbSize := SizeOf(TLVGROUP); mask := LVGF_HEADER or LVGF_ALIGN or LVGF_GROUPID; pszHeader := 'Group 1'; cchHeader := Length(LvGroup.pszHeader); iGroupIdL := 0; uAlign := LVGA_HEADER_CENTER; end; SendMessage(ListView1.Handle, LVM_INSERTGROUP, 0, Longint(@LvGroup)); // Create Group2 FillChar(LvGroup, SizeOf(LvGroup), 0); with LvGroup do begin cbSize := SizeOf(TLVGROUP); mask := LVGF_HEADER or LVGF_ALIGN or LVGF_GROUPID; pszHeader := 'Group 2'; cchHeader := Length(LvGroup.pszHeader); iGroupIdL := 1; uAlign := LVGA_HEADER_LEFT end; SendMessage(ListView1.Handle, LVM_INSERTGROUP, 1, Longint(@LvGroup)); // Assign items to the groups for I := 0 to ListView1.Items.Count - 1 do begin with LvItemA do begin FillChar(LvItemA, SizeOf(TLvItemA), 0); mask := LVIF_GROUPID; iItem := I; iGroupId := Random(2); end; SendMessage(ListView1.Handle, LVM_SETITEM, 0, Longint(@LvItemA)) end; end; // XPManifest needed! Программа на Delphi, которая отображает элементы в TListView как группу, аналогично тому, как это делается в Windows XP. Когда вы кликайте на кнопку "Button1", она включает режим группировки для ListView, создает два группы ("Group 1" и "Group 2"), случайно назначает элементы этим группам и finally отображает элементы, группируя их по своим назначенным группам. Разбивка кода:
Результатом этого кода является ListView, которая отображает ее элементы группируя их по своим назначенным группам, аналогично поведению ListView в Windows XP. В статье описывается способ отображения элементов TListView в виде группы XP с помощью функций из commctrl.h и SendMessage для управления ListView. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |