Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.13;
Скачать: CL | DM;

Вниз

ListView + OwnerDraw   Найти похожие ветки 

 
Babenko Alexey   (2003-04-24 17:09) [0]

1. Как вызвать прорисовку строчки по умолчанию?
2. Можно ли включить режим OwnerDraw c переменной высотой строки средствами Кол, либо только через Api.


 
Gandalf ©   (2003-04-25 16:18) [1]


> 1. Как вызвать прорисовку строчки по умолчанию?


function TForm1.ListView2LVCustomDraw(Sender: PControl; DC: HDC;
Stage: Cardinal; ItemIdx, SubItemIdx: Integer; const Rect: TRect;
ItemState: TDrawState; var TextColor, BackColor: Integer): Cardinal;
begin
Result := CDRF_DODEFAULT;
end;



> 2. Можно ли включить режим OwnerDraw c переменной высотой
> строки средствами Кол, либо только через Api.


Не совсем понятно, что надо.


 
Babenko Alexey   (2003-04-25 18:28) [2]

>Result := CDRF_DODEFAULT;
Спасибо

Строчки в контроле имеют различную высоту. Их высота назначается в событии OnMeasurm (ну или похожем :) на это слово)


 
Кладов   (2003-04-25 20:25) [3]

> 2. Можно ли включить режим OwnerDraw c переменной высотой
> строки средствами Кол, либо только через Api.

А вы не пробовали? В MSDN написано, что WM_MEASUREITEM посылается как раз listview со стилем lvs_OwnerDrawFixed.



 
Babenko Alexey   (2003-04-28 12:05) [4]

Странно, чё-то не работает. Проверю ещё раз.


 
Gandalf ©   (2003-04-28 15:08) [5]

Значится так, чтобы все работало кидаем ListView на форму, у нее
lvs_OwnerDrawFixed. Потом ставим в Form.OnMessage:

var
f:PMeasureItemStruct;
Result:=false;
if (Msg.message=WM_MEASUREITEM) then
begin
f:=Pointer(Msg.lParam);
if f.CtlType=ODT_LISTVIEW then
begin
Rslt:=1;
f.itemWidth:=1;
f.itemHeight:=100;
Result:=true;
end;
end;


2Kladov: Использовать событие же MeasureItem не получится, поскольку событие присваетвается родителю, а приходит только при создании контрола. Вот и получается:

Result.ListView2 := NewListView( Result.Form, lvsIcon, [ ], nil, nil, nil ).SetPosition( 192, 296 ).SetSize( 65, 25 );
// тут создались и пошло сообщение.
Result.ListView2.OnMeasureItem := Result.ListView2MeasureItem;
// тут пытаемся его поймать.


Отсюда вывод - надо видимо запихнуть Measure в NewListView (мда и еще в Menu,ListBox,ComboBox). Т.е. Аля:

function NewListView( AParent: PControl; Style: TListViewStyle; Options: TListViewOptions;
ImageListSmall, ImageListNormal, ImageListState: PImageList ): PControl;
begin
Result := _NewCommonControl( AParent, WC_LISTVIEW, ListViewStyles[ Style ] or
LVS_SHAREIMAGELISTS or WS_CHILD or WS_VISIBLE or WS_TABSTOP or WS_CLIPCHILDREN,
True, @ListViewActions );

Result.OnMeasureItem := AMeasureItem;// ну или иначе, AMeasure передается параметром.
Result.fLVOptions := Options;
Result.fLVStyle := Style;


ЗЫ: Мда в kol.pas:

procedure TControl.SetOnMeasureItem(const Value: TOnMeasureItem);
begin
fOnMeasureItem := Value;
if Parent <> nil then
( {@}WndProc_MeasureItem ) [5]
Значится так, чтобы все работало кидаем ListView на форму, у нее
lvs_OwnerDrawFixed. Потом ставим в Form.OnMessage:

var
f:PMeasureItemStruct;
Result:=false;
if (Msg.message=WM_MEASUREITEM) then
begin
f:=Pointer(Msg.lParam);
if f.CtlType=ODT_LISTVIEW then
begin
Rslt:=1;
f.itemWidth:=1;
f.itemHeight:=100;
Result:=true;
end;
end;


2Kladov: Использовать событие же MeasureItem не получится, поскольку событие присваетвается родителю, а приходит только при создании контрола. Вот и получается:

Result.ListView2 := NewListView( Result.Form, lvsIcon, [ ], nil, nil, nil ).SetPosition( 192, 296 ).SetSize( 65, 25 );
// тут создались и пошло сообщение.
Result.ListView2.OnMeasureItem := Result.ListView2MeasureItem;
// тут пытаемся его поймать.


Отсюда вывод - надо видимо запихнуть Measure в NewListView (мда и еще в Menu,ListBox,ComboBox). Т.е. Аля:

function NewListView( AParent: PControl; Style: TListViewStyle; Options: TListViewOptions;
ImageListSmall, ImageListNormal, ImageListState: PImageList ): PControl;
begin
Result := _NewCommonControl( AParent, WC_LISTVIEW, ListViewStyles[ Style ] or
LVS_SHAREIMAGELISTS or WS_CHILD or WS_VISIBLE or WS_TABSTOP or WS_CLIPCHILDREN,
True, @ListViewActions );

Result.OnMeasureItem := AMeasureItem;// ну или иначе, AMeasure передается параметром.
Result.fLVOptions := Options;
Result.fLVStyle := Style;


ЗЫ: Мда в kol.pas:

procedure TControl.SetOnMeasureItem(const Value: TOnMeasureItem);
begin
fOnMeasureItem := Value;
if Parent <> nil then
Parent.AttachProc( {@}WndProc_MeasureItem ); // Вроде "собака" не нужна
end;



Страницы: 1 вся ветка

Текущий архив: 2004.01.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
6-37815
UNick
2003-11-14 16:14
2004.01.13
Как мне задать тему письма


14-37941
zzet
2003-12-19 22:54
2004.01.13
Share It - кто пользуется сервисом?


3-37512
Крутыш
2003-12-16 16:49
2004.01.13
Про AdoDataset .....


3-37580
MaxDDinc
2003-12-13 20:52
2004.01.13
Теряются данные в локальной БД после сбоя питания


1-37769
АМБ
2003-12-29 16:22
2004.01.13
TSimpleDataSet