![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Отловить изменение ширины колонки ListView [D7, Win2k]
NikeOLD © (2004-08-13 15:18:00)Господа!
Возникла проблемка. Для корректной прорисовки изображений субствойств в ListView в режиме vsReport необходимо перерисовывать ListView когда пользователь изменяет размер ширины колонки (желательно все время пока пользователь таскает ее границу, как в Автокаде в редакторе слоев, например).
Как отловить сообщение (если оно есть) по изменению ширины колонки?
Спасибо.
NAlexey (2004-08-16 11:39:00) [1]>Dyn`alt © (16.08.04 11:13) [7]
HDN_TRACK - это событие вообще не вызывается для ListView. Автору правильно сказали что необходимо пользоваться методом OnCustomDraw. При изменении ширины колонки происходит перерисовка. В методе перерисовки надо рассчитывать размеры картинки и рисовать.
Dyn`alt (2004-08-16 11:13:00) [2]А если HDN_ENDTRACK заменить на HDN_TRACK?
NAlexey (2004-08-16 11:00:00) [3]>NAlexey © (16.08.04 10:55) [5]
Извиняюсь перед Dyn`alt ©, неправильно сформулировал пост, этот код не поможет решить автору его проблему. Потому как событие возникает после изменения ширины колонки, а автору надо во время.
NAlexey (2004-08-16 10:55:00) [4]>Dyn`alt © (16.08.04 10:33) [4]
Этот код не будет работать.
Dyn`alt (2004-08-16 10:33:00) [5]Придется подменить процедуру окна ListView и в ней отлавливать сообщение WM_NOTIFY
procedure TForm1.FormCreate(Sender: TObject);
begin
OldListWndProc := ListView1.WindowProc;
ListView1.WindowProc := ListWndProc;
end;
procedure TForm1.ListWndProc(var Msg: TMessage);
begin
if Assigned(OldListWndProc) then OldListWndProc(Msg);
if Msg.Msg = WM_NOTIFY then
if HD_NOTIFY(Pointer(Msg.LParam)^).Hdr.code = HDN_ENDTRACK then begin
...
end;
end;
Mim1 (2004-08-16 08:23:00) [6]OnCustomDrawItem, и возможно еще OnCustomDraw
NikeOLD (2004-08-13 15:56:00) [7]Использую OnCustomDrawSubItem
При изменении ширины колонки это событие не вызывается. Либо это глюк Дельфи, либо нужно что-то еще.
Mim1 (2004-08-13 15:41:00) [8]Можно обрабатывать WM_NOTIFY + LVN_ITEMCHANGED.
Судя по всему вы просто неправильно отрисовыаете таблицу. Отрисовывать его нужно в специальных собитиях, а windows сама вызовет их когда надо.