![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не приходит LB_GETITEMRECT [D7, Win95/98, WinME, NT4, Win2k, WinXP]
_Seldon_ © (2005-08-12 22:10:00)делаю так:
TMyListBox = class(TListBox)
private
procedure LBGetItemRect(var Msg:TMessage); message LB_GETITEMRECT;
end;
implementation
procedure TMyListBox.LBGetItemRect(var Msg: TMessage);
begin
inherited; {!}
Beep
end;
end.
в {!} управление не приходит ни разу за всё время жизни листбокса. Судя по Spy++ LB_GETITEMRECT вообще не приходит листбоксу. Почему?
Ученик (2005-08-13 20:54:00) [1]>_Seldon_ (13.08.05 12:17) [5]
LB_GETITEMRECT, насколько я понимаю, посылает приложение для определения координат элемента списка, а не система для отображения.
CN_DRAWITEM посылается из
procedure TCustomListBox.WMPaint(var Message: TWMPaint);
_Seldon_ (2005-08-13 12:17:00) [2]
> [4] Ученик (13.08.05 10:12)
> Borland\Delphi7\Source\Vcl\checklst.pas
>
> procedure TCheckListBox.CNDrawItem(var Message: TWMDrawItem);
спасибо, то что надо.
а почему всё-таки не приходит LB_GETITEMRECT?
и в каких случаях окну посылается CN_DRAWITEM? я так понимаю, что это сообщение Delphi а не Windows? но результат его обработки должен как-то передаваться Windows, ведь она сдвигает элементы в листбоксе....
Ученик (2005-08-13 10:12:00) [3]Borland\Delphi7\Source\Vcl\checklst.pas
procedure TCheckListBox.CNDrawItem(var Message: TWMDrawItem);
_Seldon_ (2005-08-13 01:18:00) [4]
> [1] Piter © (12.08.05 22:57)
а что сдесь похожего на форму? :)
> [2] Ученик (12.08.05 23:45)
мне надо не высоту изменить, а сдвинуть некоторые элементы вправо...
Ученик (2005-08-12 23:45:00) [5]>_Seldon_ (12.08.05 22:10)
TListBox.OnMeasureItem
Style = lbOwnerDrawVariable
Piter (2005-08-12 22:57:00) [6]_Seldon_ (12.08.05 22:10)
procedure LBGetItemRect(var Msg:TMessage); message LB_GETITEMRECT;
что-то я не понял. Сообщение вроде как ListBox'у должно приходить, а ловишь ты его, как будто оно приходит форме.
Ы?