Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

LVCustomDraw [Delphi, Windows]


Егорка ©   (2009-11-24 20:33:00) 

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


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

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


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

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


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

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


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

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


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

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

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


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

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

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


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

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


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

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


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


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


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

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


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

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


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

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

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


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

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


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

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

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

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


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

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

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

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

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

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


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

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


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

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


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

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

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

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


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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо