-
здравствуйте ! подскажите пожалуйста как в листвью рисовать значки ? несколько пробую if (Stage=CDDS_ITEMPOSTPAINT)or(Stage=CDDS_POSTPAINT)then ImageList_Draw(ImageList,10,dc,16,30,ILD_TRANSPARENT); не получаецо :(
-
А в чем конкретно проблема? 1. Устанавливаете у LV lvoOwnerDrawFixed 2. Отрисовываете элемент в OnDrawItem, а в OnMeasureItem устанавливаете размер элемента.
-
эх ничего сибе а зачем тогда LVCustomDraw ? я в нем цвета меняю, это вобще правильно ? и при каких DrawAction и Stage (CDDS_PREPAINT,CDDS_ITEMPREPAINT и тд) что нужно делать\возвращать ?
> Отрисовываете элемент в OnDrawItem, а в OnMeasureItem устанавливаете > размер элемента.
а каким образом вообще ,чет я вперся ,а метод тыка не работает
-
-
твой работает пока не растянеш форму мой с твоей начинкой сразу такой становится,т.к. размер меняется при создании и еще у меня виртуальный лист :) с такими вот опциями [lvoEditLabel,lvoHeaderDragDrop,lvoRowSelect,lvoOneClickActivate,lvoInfoTip,lvoU nderlineHot,lvoOwnerData,lvoOwnerDrawFixed] как быть, я задаю текст в LVData, а типерь ищо и в DrawItem писать ??? или что
-
да и ищо , по "книге"
> lvoOwnerDrawFixed - список элементов одинаковой высоты, > изображается пользовательским обработчиком OnDrawItem (этот > стиль не следует использовать, если используется событие > OnLVCustomDraw).
и еще утверждается
> OnLVCustomDraw - вызывается для выполнения более детального > пользовательского рисования элементов и/или подэлементов > (а так же заголовка, и частей клиентской области, не содержащей > элементов). Этот обработчик будет работать, только если > в опциях отсутствует стиль lvsOwnerDrawFixed....... > .......... > ...........................это самый гибкий и мощный инструмент > для выполнения любого пользовательского управления процессом > рисования в окне списка, с другой стороны - все так сложно, > что разобраться сразу во всех перипетиях довольно трудно
а по сути получается что кроме как сменить цвет, OnLVCustomDraw нихрена больше ничо не может... или как ? если он такой крутой ,фигли в нем нельзя рисовать ? или аффтар малясь ошибся ?
-
у тебя ошибка в function TForm1.lvMeasureItem(Sender: PObj; Idx: Integer): Integer;
begin
Result := MakeLong(250, 25);
end; нафига там MakeLong ??? просто Result := 25; вобщем работает,но вопрос остается, че делать с LVData ?
-
а также видимо не работает lvoUnderlineHot ?
-
2 Егорка Уважаемый, пост [3] читали? Вам наводку дали? Сказал же, выдрал из своего проекта. Курите мануалы.
А MakeLong, чтобы задать и ширину тоже.
-
>но вопрос остается, че делать с LVData ? 1. GetMem( p {: Pointer}); 2. CopyMemory(P, @твои_данные, SizeOf(твои_данные)); 3. LVData := P; 4. Когда с p "наигрался", FreeMem(p);
-
> А MakeLong, чтобы задать и ширину тоже. Погорячился. Из другого MeasureItem взял...
-
> 1. GetMem( p {: Pointer}); > 2. CopyMemory(P, @твои_данные, SizeOf(твои_данные)); > 3. LVData := P; > 4. Когда с p "наигрался", FreeMem(p);
а это зачем ?у меня виртуальный лист в OnLVData запрашиваются вполне конкретные данные var Txt: KOL_String; var ImgIdx: Integer; var State: Cardinal;var Store: Boolean
я про то что если один фиг все рисуется с нуля то и OnLVData не нужно использовать а сразу все делать в OnDrawItem,пральна ?
-
да и как рисовать в других столбцах ?
-
Так же как и не в "других". У Вас же есть все необходимое?..
-
ну так в DrawItem(Sender: PObj; DC: HDC; const Rect: TRect;
ItemIdx: Integer; DrawAction: TDrawAction;
ItemState: TDrawState): Boolean; нет столбцов , каким фигом это все происходит ?
-
R_Name := PControl(Sender).LVSubItemRect(ItemIdx, 0);
S_Name := PControl(Sender).LVItems[ItemIdx, 0]; Что нибудь навевает?
-
вроде как разобрался гемороидальное занятие, не стоит того... кстати LVSubItemRect(ItemIdx, 0) возвращает рект всей строки всех столбцов,что ни есть логично
-
> кстати LVSubItemRect(ItemIdx, 0) возвращает рект всей строки всех столбцов,что ни есть логично Ага. Где-то по форуму проскакивало, давным-давно...
-
Я выделял области отдельных элементов из общей строки используя ширину столбцов.
-
есть проще вариант через LVItemRect
|