Главная страница
    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.009 c
1-37671
Amadeus
2003-12-19 00:45
2004.01.13
Функция форматирования текста в Stringgrid


1-37720
ikivio
2003-12-30 17:33
2004.01.13
Multilanguage Interface


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


3-37500
Dmitriy
2003-12-17 11:11
2004.01.13
Проблема при переходе на Oracle c MSSQL


3-37585
gestern
2003-12-13 18:20
2004.01.13
Надо быстрее.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский