![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перерисовка в TListView [D5, WinXP]
Kastusik © (2005-07-07 23:12:00)Мастера, такой трабл. В TListView установлен свой обработчик OnDrawItem и когда изменяешь размеры заголовка (стоит ViewStyle = vsReport) данные заново не прорисовываются и получается, что заголовки по новому стоят а данные по старому и только когда начинаешь выделять эти записи тогда они прорисовываются. Вопрос: можно ли сделать так, чтоб перерисовывалось окно сразу во время изменения размеров заголовка?)
Кастусик (2005-07-12 18:41:00) [1]очень нужно узнать с изменением размеров, чтобы возникало такое событие.
Kastusik (2005-07-11 23:51:00) [2]Со скрол баром все ок. осталось, чтоб кто-нить подсказал как сдеалть, чтоб HDN_TRACK заработало. а то Spy++ на передвижение заголовка показывает WM_USER.
Kastusik (2005-07-11 14:34:00) [3]отлично. InvalidateRect(); + HDN_ENDTRACK суперски работает.
осталось выяснить, как сдеалть, чтоб HDN_TRACK заработало и как узнать что пользователь скролбар двигает?
Kastusik (2005-07-11 14:20:00) [4]HDN_STARTTRACK говорит, что неизвестная переменная,
HDN_TRACK - не работает ???
B-S-G (2005-07-10 16:56:00) [5]Функция InvalidateRect();
Игорь Шевченко (2005-07-08 17:51:00) [6]
> вообще, как узнать, что пользователь изменяет размеры заголовков?
> if (Message.Msg = WM_NOTIFY) and
> (PNMHDR(Message.Lparam)^.Code = HDN_ENDTRACK) then
или HDN_STARTTRACK или HDN_TRACK.
Kastusik (2005-07-08 16:44:00) [7]Неа, оба не подходит. да все это про Update верно, но у меня в OnDrawItem все рисуется в зависимости от ширины заголовков. и возможно получается, что когда изменяется размер то ЭТО НЕ ОТОБРАЖАЕТСЯ НЕКОТОРОЕ ВРЕМЯ В ПЕРЕМЕННЫХ. вообще, как узнать, что пользователь изменяет размеры заголовков?
Игорь Шевченко (2005-07-08 13:17:00) [8]
unit main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls;
type
TForm1 = class(TForm)
ListView: TListView;
procedure FormCreate(Sender: TObject);
private
FListViewInstance: Pointer;
FOldListViewProc: Pointer;
procedure ListViewWndProc (var Message: TMessage);
end;
var
Form1: TForm1;
implementation
uses
CommCtrl;
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
FListViewInstance := MakeObjectInstance(ListViewWndProc);
FOldListViewProc := Pointer(SetWindowLong (ListView.Handle, GWL_WNDPROC,
LongInt(FListViewInstance)));
end;
procedure TForm1.ListViewWndProc(var Message: TMessage);
begin
Message.Result := CallWindowProc(FOldListViewProc, ListView.Handle,
Message.Msg, Message.Wparam, Message.Lparam);
if (Message.Msg = WM_NOTIFY) and
(PNMHDR(Message.Lparam)^.Code = HDN_ENDTRACK) then
ListView.Update;
end;
end.
isasa (2005-07-08 12:43:00) [9]Updatemethod (TWinControl) - Forces the control to update.
Kastusik (2005-07-08 11:48:00) [10]фишка вся в том, что после изменения размеров заголовка новая информация не сразу попадает в ColWidth, а только тогда, когда начинается работа с самим TListView окном там где строки
Kastusik (2005-07-08 11:40:00) [11]2GanibalLector
ListView1.Refresh ???
не помогает
2Sergeich
Invalidate
объясни? не поянл.
Sergeich (2005-07-08 10:32:00) [12]Invalidate
GanibalLector (2005-07-08 00:59:00) [13]ListView1.Refresh ???