Пустой TListView. Текст "Список пуст".
От: NikSmol Россия  
Дата: 07.02.06 11:18
Оценка:
Достаточно часто у ListView (или имитаций под него?) вижу такое поведение:
если ни одного элемента в ListView нет, то в клиентской области ListView пишется некоторая строка, выровненная по центру: "Список сообщений пуст", "Нет данных для отображения", и т.д.
Причем это не элемент ListView — его невозможно выделить, да и текст пересекает границы колонок.
Как правильнее отобразить такую строку в пустом ListView?

Заранее спасибо, Смолянинов Никита.
Re: Пустой TListView. Текст "Список пуст".
От: Аноним  
Дата: 07.02.06 11:34
Оценка:
Здравствуйте, NikSmol, Вы писали:

NS>Достаточно часто у ListView (или имитаций под него?) вижу такое поведение:

NS>если ни одного элемента в ListView нет, то в клиентской области ListView пишется некоторая строка, выровненная по центру: "Список сообщений пуст", "Нет данных для отображения", и т.д.
NS>Причем это не элемент ListView — его невозможно выделить, да и текст пересекает границы колонок.
NS>Как правильнее отобразить такую строку в пустом ListView?

NS>Заранее спасибо, Смолянинов Никита.


Перерисовывай элементы самостоятельно
Re: Пустой TListView. Текст "Список пуст".
От: Danchik Украина  
Дата: 07.02.06 11:59
Оценка:
Здравствуйте, NikSmol, Вы писали:

NS>Достаточно часто у ListView (или имитаций под него?) вижу такое поведение:

NS>если ни одного элемента в ListView нет, то в клиентской области ListView пишется некоторая строка, выровненная по центру: "Список сообщений пуст", "Нет данных для отображения", и т.д.
NS>Причем это не элемент ListView — его невозможно выделить, да и текст пересекает границы колонок.
NS>Как правильнее отобразить такую строку в пустом ListView?

NS>Заранее спасибо, Смолянинов Никита.


Нужно породится от TListView и перекрыть WM_PAINT. Можно конечно подменить WndProc у уже созданного ListView, но я не приветствую такой подход.
Получится приблизительно так (на коленках написано ):
type
  TMyListView = class (TListView)
  private
    procedure WMPaint(var Message: TWMPaint); message WM_PAINT;
  protected
  end;

implementation
uses
  CommCtrl;

procedure TMyListView.WMPaint(var Message: TWMPaint);
var
  aRect : TRect;
  aStr : string;
  aHeaderHandle : HWND;
  aHeaderRect : TRect;
begin
  inherited;

  if Items.Count = 0 then begin
    aRect := ClientRect;
    Inc (aRect.Top, 10);

    if (ViewStyle = vsReport) and ShowColumnHeaders then
    begin
      aHeaderHandle := ListView_GetHeader(Handle);
      if aHeaderHandle <> 0 then begin
        GetWindowRect (aHeaderHandle, aHeaderRect);
        Inc (aRect.Top, aHeaderRect.Bottom - aHeaderRect.Top);
      end;
    end;

    Canvas.Brush.Style := bsClear;

    aStr := 'Ничего нету :)';
    DrawText (Canvas.Handle, PChar (aStr), Length (aStr), aRect, DT_CENTER);
  end;
end;


Удачи!
Re[2]: Пустой TListView. Текст "Список пуст".
От: Аноним  
Дата: 08.02.06 02:33
Оценка:
Здравствуйте, Danchik, Вы писали:

NS>>...

NS>>Как правильнее отобразить такую строку в пустом ListView?
NS>>...

D>Нужно породится от TListView и перекрыть WM_PAINT. Можно конечно подменить WndProc у уже созданного ListView, но я не приветствую такой подход.

D>Получится приблизительно так (на коленках написано ):
D>...

Спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.