Форум: "Начинающим";
Текущий архив: 2008.09.21;
Скачать: [xml.tar.bz2];
ВнизTListView + MultiLine ??? Найти похожие ветки
← →
tytus (2008-08-12 12:11) [0]Доброго дня мастера.
Вот нужно в компоненте ListView выводить в строке несколько линий.
Но у него нету события OnMeasureItem как TListBox... к примеру.
Подскажите в какую сторону копать...
← →
Rouse_ © (2008-08-12 12:44) [1]Пример выставления стиля Tile с многострочностью.
На форму размещаешь ListView, у него создаешь 3 колонки, можно еще положить ImageList с размерами изображений 48 на 48 - для красоты но это не главное. Не забываешь добавить в приложение манифест.
Вписываешь такой код:uses
CommCtrl;
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;
tagLVTILEVIEWINFO = packed record
cbSize: UINT;
dwMask: DWORD;
dwFlags: DWORD;
sizeTile: SIZE;
cLines: Integer;
rcLabelMargin: TRect;
end;
TLVTILEVIEWINFO = tagLVTILEVIEWINFO;
tagLVTILEINFO = packed record
cbSize: UINT;
iItem: Integer;
cColumns: UINT;
puColumns: PUINT;
// piColFmt: PInteger; // if _WIN32_WINNT >= 0x0600
end;
LVTILEINFO = tagLVTILEINFO;
const
LVTVIM_TILESIZE = $00000001;
LVTVIM_COLUMNS = $00000002;
LVTVIM_LABELMARGIN = $00000004;
LVM_SETSELECTEDCOLUMN = LVM_FIRST + 140;
LVM_INSERTGROUP = LVM_FIRST + 145;
LVM_MOVEITEMTOGROUP = LVM_FIRST + 154;
LVM_ENABLEGROUPVIEW = LVM_FIRST + 157;
LVM_SETTILEVIEWINFO = LVM_FIRST + 162;
LVM_SETTILEINFO = LVM_FIRST + 164;
LVIF_GROUPID = $0100;
LVGF_HEADER = $00000001;
LVGF_FOOTER = $00000002;
LVGF_ALIGN = $00000008;
LVGF_GROUPID = $00000010;
LVGA_HEADER_LEFT = $00000001;
LVGA_HEADER_CENTER = $00000002;
LVGA_HEADER_RIGHT = $00000004;
LV_VIEW_TILE = $0004;
LVTILEColumns: array[0..1] of UINT = (1, 2);
procedure TForm1.FormCreate(Sender: TObject);
var
LvGroup: TLVGROUP;
LvItemA: TLVITEMA;
LvTileViewInfo: TLVTILEVIEWINFO;
LvTileInfo: TLVTILEINFO;
begin
// Включаем группы
SendMessage(ListView1.Handle, LVM_ENABLEGROUPVIEW, 1, 0);
// Заполняем структуру для первой группы
FillChar(LvGroup, SizeOf(TLVGROUP), 0);
with LvGroup do
begin
cbSize := SizeOf(TLVGROUP);
// указываем какие элементы структуры необходимо учитывать
mask := LVGF_HEADER or LVGF_ALIGN or LVGF_GROUPID;
// заголовок
pszHeader := "ЛВС или высокоскоростной интернет";
// и его размер
cchHeader := Length(LvGroup.pszHeader);
// ID группы
iGroupIdL := 1;
// выравнивание заголовка
uAlign := LVGA_HEADER_LEFT;
end;
// добавляем группу
SendMessage(ListView1.Handle, LVM_INSERTGROUP, 0, Longint(@LvGroup));
// выставляем стиль "плитка"
SendMessage(ListView1.Handle, LVM_SETVIEW, LV_VIEW_TILE, 0);
// заполняем структуру для указания параметров стиля
FillChar(LvTileViewInfo, SizeOf(TLVTILEVIEWINFO), 0);
with LvTileViewInfo do
begin
cbSize := SizeOf(TLVTILEVIEWINFO);
// указываем что заполнено только кол-во дополнительных строк
dwMask := LVTVIM_COLUMNS;
// коих количество равно двум (в сумме с заголовком = 3)
cLines := 2;
end;
// выставляем дополнительные настройки стиля "плитка"
SendMessage(ListView1.Handle, LVM_SETTILEVIEWINFO, 0, LPARAM(@LvTileViewInfo));
// заполняем структуру для стиля "плитка" для элементов
// в которой указывается, какие сабитемы будут участвовать в отображении
LvTileInfo.cbSize := SizeOf(TLVTILEINFO);
// количество подэлементов
LvTileInfo.cColumns := 2;
// указатель на массив индексов подэлементов
LvTileInfo.puColumns := @LVTILEColumns;
// добавляем первый элемент
with ListView1.Items.Add do
begin
Caption := "1394-соединение";
SubItems.Text := "Подключено" + sLineBreak + "Сетевой адаптер 1394";
end;
// заполняем структуру для переноса элемента в группу
FillChar(LvItemA, SizeOf(TLvItemA), 0);
with LvItemA do
begin
// указываем что учитывать нужно только ID группы
mask := LVIF_GROUPID;
// который равен единице
iGroupId := 1;
// указываем ID элемента с которым хотим произвести действие
iItem := ListView1.Items.Count - 1;
end;
// переносим элемент в группу
SendMessage(ListView1.Handle, LVM_SETITEM, 0, Longint(@LvItemA));
// настраеваем его изображение в соответствии со стилем
// а именно, указываем ID элемента с которым хотим произвести действие
LvTileInfo.iItem := ListView1.Items.Count - 1;
// и выставляем параметры
SendMessage(ListView1.Handle, LVM_SETTILEINFO, 0, LPARAM(@LvTileInfo));
// второй элемент по аналогии с первым
with ListView1.Items.Add do
begin
Caption := "Подключение по локальной сети";
SubItems.Text := "Подключено" + sLineBreak + "";
end;
FillChar(LvItemA, SizeOf(TLvItemA), 0);
with LvItemA do
begin
mask := LVIF_GROUPID;
iItem := ListView1.Items.Count - 1;
iGroupId := 1;
end;
SendMessage(ListView1.Handle, LVM_SETITEM, 0, Longint(@LvItemA));
LvTileInfo.iItem := ListView1.Items.Count - 1;
SendMessage(ListView1.Handle, LVM_SETTILEINFO, 0, LPARAM(@LvTileInfo));
end;
Будет тебе несколько линий на каждый элемент.
← →
tytus (2008-08-12 13:12) [2]> Rouse_ © (12.08.08 12:44) [1]
спасибо, хороший пример.
Я так понял, что все subitem-ы контрола собираются в группы.
но это пока... еще разбираюсь в коде...
Хотя мне нужно было немножко другое. Как в ListBox-е,
там можно для каждого элемента применить свою высоту.
← →
Rouse_ © (2008-08-12 13:23) [3]
> Я так понял, что все subitem-ы контрола собираются в группы.
Да.
> там можно для каждого элемента применить свою высоту.
Эмн, SysListView32 конечно хорошо кастомизируется, но насколько мне известно, такой функциональности, как произвольное изменение ректа элемента, у него нет.
← →
tytus (2008-08-12 13:33) [4]>Rouse_ © (12.08.08 13:23) [3]
Эмн, SysListView32 конечно хорошо кастомизируется... ну и ладно, мне он пока не нужен...
Повторюсь - пример супер!
Давно такое искал... Сейчас нужно немного другое, но сей код обязательно заюзаю ).
Спасибо!
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.09.21;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c