Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Перерисовка в 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 ???


Наверх

Титульная страница Поиск, карта сайта Написать письмо