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

Отображать элементы TListView как группу XP

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

Отображать элементы TListView как группу XP

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

// 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 отображает элементы, группируя их по своим назначенным группам.

Разбивка кода:

  1. Он заполняет ListView случайными данными (числами от 0 до 100).
  2. Он отправляет сообщение LVM_ENABLEGROUPVIEW для включения режима группировки для ListView.
  3. Он создает две группы ("Group 1" и "Group 2") с помощью записи TLVGROUP.
  4. Для каждой группы он устанавливает различные свойства, такие как текст заголовка, выравнивание и ID. ID используется при назначении элементов группам позднее.
  5. Он отправляет сообщение LVM_INSERTGROUP для вставки этих групп в ListView.
  6. Затем для каждого элемента в ListView он создает запись TLVITEMA, которая описывает элемент в ListView.
  7. Для каждого элемента он устанавливает различные свойства, такие как текст, индекс изображения и ID группы (который случайно назначается из 0 до 1).
  8. Наконец, он отправляет сообщение LVM_SETITEM для установки этих элементов в свои соответствующие группы.

Результатом этого кода является ListView, которая отображает ее элементы группируя их по своим назначенным группам, аналогично поведению ListView в Windows XP.

В статье описывается способ отображения элементов TListView в виде группы XP с помощью функций из commctrl.h и SendMessage для управления ListView.


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

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




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


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


реклама


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

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:13:58/0.0037360191345215/0