![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#106
|
||||
|
||||
|
Думаю по готовому примеру будет легче разобраться.
|
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
sariman (10.12.2012)
| ||
|
#107
|
||||
|
||||
|
Спасибо! Ваш пример хорошо работает, а вот с моим что-то не так. Посмотрите. Да и как убрать заголовки в ListView и третью колонку (из-за неё появляется долбанный скроллинг)?
|
|
#108
|
||||
|
||||
|
Подправил.
|
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
sariman (11.12.2012)
| ||
|
#109
|
||||
|
||||
|
Спасибо! Но всплывающее меню не отображается
![]() |
|
#110
|
||||
|
||||
|
У меня нормально отображается. Ресурсный файл пересоздал?
|
|
#111
|
||||
|
||||
|
Точно! Спасибо. Еще вопрос: как выделить строку в ListView?
|
|
#112
|
||||
|
||||
|
Программно?
Код:
LV_SetFocused(PlayList, Index, True); LV_SetSelected(PlayList, Index, True); |
|
#113
|
||||
|
||||
|
Блин не правильно сформулировал вопрос. Я имел ввиду как сделать шрифт элемента жирным?
|
|
#114
|
||||
|
||||
|
Создать ListView со стилем LVS_OWNERDRAWFIXED и обрабатывать сообщение WM_DRAWITEM.
|
|
#115
|
||||
|
||||
|
А дальше..?))
|
|
#116
|
||||
|
||||
|
Дальше отрисовывать все итемы вручную. Так понимаю нужен пример?
|
|
#117
|
||||
|
||||
|
Разумеется. Это же не VCL
![]() |
|
#118
|
||||
|
||||
|
Ну понятно.
в Util.pas добавить Код:
procedure DSFillRect(DC : HDC; const Rect : TRect; Color : TColorRef);
...
procedure DSFillRect(DC : HDC; const Rect : TRect; Color : TColorRef);
var
Brush : HBRUSH;
begin
Brush := CreateSolidBrush(Color);
try
Windows.FillRect(DC, Rect, Brush);
finally
DeleteObject(Brush);
end;
end;Код:
procedure ListViewDrawItem(lpdis : PDRAWITEMSTRUCT);
var
aRect : TRect;
begin
aRect := lpdis.rcItem;
DSFillRect(lpdis.hDC, aRect, clWhite);
if Integer(lpdis.itemID + 1) > LV_GetTopIndex(PlayList) + LV_GetVisibleRowCount(PlayList) then
Exit;
if ((lpdis.itemState and CDIS_SELECTED) = CDIS_SELECTED) then
begin
DSFillRect(lpdis.hDC, aRect, clLime);
SetTextColor(lpdis.hDC, clWhite);
SetBkColor(lpdis.hDC, clLime);
end
else
SetTextColor(lpdis.hDC, clBlack);
aRect := LV_GetSubItemRect(PlayList, lpdis.itemID, 0, lvLabel);
DrawText(lpdis.hDC, PChar(Format('%d.', [lpdis.itemID + 1])), -1, aRect, DT_RIGHT or DT_VCENTER);
aRect := LV_GetSubItemRect(PlayList, lpdis.itemID, 1, lvLabel);
aRect.Left := aRect.Left + 4;
DrawText(lpdis.hDC, PChar(LV_GetItemText(PlayList, lpdis.itemID, 1)), -1, aRect, DT_VCENTER or DT_END_ELLIPSIS);
end;
...
function WindowProc(Wnd: HWND; Msg, wParam, lParam: Integer): Integer; stdcall;
...
case Msg of
...
WM_DRAWITEM :
begin
if PDRAWITEMSTRUCT(lParam)^.CtlType = ODT_LISTVIEW then
ListViewDrawItem(PDRAWITEMSTRUCT(lParam));
end;
...Здесь нет выделения жирным шрифтом, выделяется цветом. |
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
sariman (11.12.2012)
| ||
|
#119
|
||||
|
||||
|
Добавил выделение жирным шрифтом, ну и, как обычно, сам пример.
|
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
sariman (11.12.2012)
| ||
|
#120
|
||||
|
||||
|
Огромное спасибо! Есть одна проблемка: при добавлении файлов не все элементы отрисовываются, как исправить?
|