Текущий архив: 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.47 MB
Время: 0.008 c