Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2004.01.13;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "KOL";
Текущий архив: 2004.01.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.01 c
1-37744
Beginner
2003-12-31 02:32
2004.01.13
Динамическое создание потока.


11-37600
Centronix
2003-04-24 14:45
2004.01.13
Создание диалогового окна


3-37531
mva
2003-12-16 10:16
2004.01.13
Формат даты


8-37805
Элл
2003-09-10 09:43
2004.01.13
Компоненты для работы с Jpeg


3-37522
Sandman25
2003-12-16 17:33
2004.01.13
Insert и Autoincrement





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский