Вверх ↑
Администрация
Ответов: 15295
Рейтинг: 1519
#1: 2008-08-05 16:07:22 ЛС | профиль | цитата
посмотрел повнимательнее:
- получать размер итема вот так

#pas
PControl(Sender).Canvas.TextExtent('W').cy
не хорошо - невозможно будет вывести пункт с двумя и более строками(как в публикаторе скажем). Этот параметр как и в VCL должен определяться пользователем(там оно ItemHeight) называется
- передавать в менеджер Sender - тоже не хорошо. При таком интерфейсе невозможно будет использовать их применительно к невизуальным контролам. Выводимый текст надо передавать в качестве одного из параметров.
- если хочется снабдить DrawManager знанием о рисуемых слева от текста картинок(т.е. константой SHIFT_PICTURE), то IconManager должен всетаки вставляться не в элемент, а в него.

Нужно всетаки постараться проникнуться идеей менеджеров(да и встраиваемых объектов вообще) и понять, что они(менеджеры) абсолютно ничего не должны знать о том, кто и зачем их будет использовать. У интерфейса отрисовки должна быть только одна функция:

#pas
function(DC: HDC; const Rect: TRect; row,col:integer; const text: string; ItemState: TDrawState; Flags:cardinal): Boolean
где
DC - контекст устройства вывода
Rect - координаты области вывода
row,col - номер строки и номер колонки выводимых данных
text - собственно данные
ItemState - состояние текущего пункта
Flags - прочие флаги.

ну не получается ни в какую обойтись существующим интерфейсом сделай флаги - FLG_LISTBOX, FLG_COMBOBOX, FLG_TRANSPARENT... еще какие-то... Хочется учесть отступ от левого края - ну добавь в интерфейс более общие прави, а не затачивайся под один конкретный случай:

#pas
function(DC: HDC; const DrawRect, DataRect: TRect; row,col:integer; const text: string; ItemState: TDrawState; Flags:cardinal): Boolean
DrawRect - область вывода всего пункта
DataRect - область вывода данных


В IconsManager тоже самое. Я правда не совсем понял смысловую значимость параметра Rect, который в метод отрисовки меняется по всем четырем направлениям....
------------ Дoбавленo:

Глюки с отрисовкой кстате появлялись при Transparent = True. Правда мигание зато пропадает в таком режиме...
карма: 27
0