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

Вниз

LVCustomDraw   Найти похожие ветки 

 
Егорка   (2009-11-24 20:33) [0]

здравствуйте !
подскажите пожалуйста как в листвью рисовать значки ? несколько
пробую
if (Stage=CDDS_ITEMPOSTPAINT)or(Stage=CDDS_POSTPAINT)then   ImageList_Draw(ImageList,10,dc,16,30,ILD_TRANSPARENT);
не получаецо :(


 
MTsv DN   (2009-11-25 07:52) [1]

А в чем конкретно проблема?
1. Устанавливаете у LV lvoOwnerDrawFixed
2. Отрисовываете элемент в OnDrawItem, а в OnMeasureItem устанавливаете размер элемента.


 
Егорка   (2009-11-25 12:21) [2]

эх ничего сибе
а зачем тогда LVCustomDraw ? я в нем цвета меняю, это вобще правильно ?
и при каких DrawAction и Stage (CDDS_PREPAINT,CDDS_ITEMPREPAINT и тд) что нужно делать\возвращать ?

> Отрисовываете элемент в OnDrawItem, а в OnMeasureItem устанавливаете
> размер элемента.

а каким образом вообще ,чет я вперся ,а метод тыка не работает


 
MTsv DN   (2009-11-25 18:28) [3]

Не обессудь, чейта придумывать было лень выдрал из своего проекта: http://ifolder.ru/15155296


 
Егорка   (2009-11-25 20:02) [4]

твой работает пока не растянеш форму
мой с твоей начинкой сразу такой становится,т.к. размер меняется при создании
и еще у меня виртуальный лист :) с такими вот опциями
[lvoEditLabel,lvoHeaderDragDrop,lvoRowSelect,lvoOneClickActivate,lvoInfoTip,lvoU nderlineHot,lvoOwnerData,lvoOwnerDrawFixed]
как быть, я задаю текст в LVData, а типерь ищо и в DrawItem писать ??? или что


 
Егорка   (2009-11-25 20:13) [5]

да и ищо , по "книге"

> lvoOwnerDrawFixed - список элементов одинаковой высоты,
> изображается пользовательским обработчиком OnDrawItem (этот
> стиль не следует использовать, если используется событие
> OnLVCustomDraw).

и еще утверждается

>  OnLVCustomDraw - вызывается для выполнения более детального
>  пользовательского рисования элементов и/или подэлементов
>  (а так же заголовка, и частей клиентской области, не содержащей
>  элементов). Этот обработчик будет работать, только если
>  в опциях отсутствует стиль lvsOwnerDrawFixed.
......
> ..........
> ...........................это самый гибкий и мощный инструмент
> для выполнения любого пользовательского управления процессом
> рисования в окне списка, с другой стороны - все так сложно,
>  что разобраться сразу во всех перипетиях довольно трудно

а по сути получается что кроме как сменить цвет,  OnLVCustomDraw нихрена больше ничо не может... или как ?
если он такой крутой ,фигли в нем нельзя рисовать ? или аффтар малясь ошибся ?


 
Егорка   (2009-11-25 20:51) [6]

у тебя ошибка в
function TForm1.lvMeasureItem(Sender: PObj; Idx: Integer): Integer;
begin
Result := MakeLong(250, 25);
end;

нафига там  MakeLong ??? просто  Result := 25;

вобщем работает,но вопрос остается, че делать с  LVData ?


 
Егорка   (2009-11-25 20:58) [7]

а также видимо не работает lvoUnderlineHot ?


 
MTsv DN   (2009-11-25 21:29) [8]

2 Егорка
Уважаемый, пост [3] читали? Вам наводку дали? Сказал же, выдрал из своего проекта. Курите мануалы.

А MakeLong, чтобы задать и ширину тоже.


 
MTsv DN   (2009-11-25 21:33) [9]

>но вопрос остается, че делать с  LVData ?
1. GetMem( p {: Pointer});
2. CopyMemory(P, @твои_данные, SizeOf(твои_данные));
3. LVData := P;
4. Когда с p "наигрался", FreeMem(p);


 
MTsv DN   (2009-11-25 21:36) [10]

> А MakeLong, чтобы задать и ширину тоже.
Погорячился. Из другого MeasureItem взял...


 
Егорка   (2009-11-25 22:03) [11]


> 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,пральна ?


 
Егорка   (2009-11-26 11:12) [12]

да и как рисовать в других столбцах ?


 
MTsv DN   (2009-11-26 12:00) [13]

Так же как и не в "других". У Вас же есть все необходимое?..


 
Егорка   (2009-11-26 13:51) [14]

ну так в
DrawItem(Sender: PObj; DC: HDC; const Rect: TRect;
 ItemIdx: Integer; DrawAction: TDrawAction;
 ItemState: TDrawState): Boolean;

нет столбцов , каким фигом это все происходит ?


 
MTsv DN   (2009-11-26 17:12) [15]

R_Name := PControl(Sender).LVSubItemRect(ItemIdx, 0);
S_Name := PControl(Sender).LVItems[ItemIdx, 0];

Что нибудь навевает?


 
Егорка   (2009-11-26 18:12) [16]

вроде как разобрался
гемороидальное занятие, не стоит того...
кстати LVSubItemRect(ItemIdx, 0) возвращает рект всей строки всех столбцов,что ни есть логично


 
MTsv DN   (2009-11-26 18:48) [17]

> кстати LVSubItemRect(ItemIdx, 0) возвращает рект всей строки всех столбцов,что ни есть логично
Ага. Где-то по форуму проскакивало, давным-давно...


 
L'Autour   (2009-11-27 06:53) [18]

Я выделял области отдельных элементов из общей строки используя ширину столбцов.


 
Егорка   (2009-11-27 10:08) [19]

есть проще вариант через LVItemRect



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

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

Наверх




Память: 0.51 MB
Время: 0.005 c
15-1406320203
Юрий
2014-07-26 00:30
2015.03.08
С днем рождения ! 26 июля 2014 суббота


3-1302683163
samalex2504
2011-04-13 12:26
2015.03.08
Фильтрация в TIBQuery


4-1271234220
QAZ
2010-04-14 12:37
2015.03.08
hook+service+uac+win7


15-1406193113
Vlad oshin pc_other
2014-07-24 13:11
2015.03.08
помогите с запросом..


15-1406406602
Юрий
2014-07-27 00:30
2015.03.08
С днем рождения ! 27 июля 2014 воскресенье