Вверх ↑
Этот топик читают: Гость
Администрация
Ответов: 15295
Рейтинг: 1519
#1: 2008-10-28 23:33:31 ЛС | профиль | цитата
Есть желание сделать элемент типа палитры элементов в HiAsm или левой панели задач в проводнике Windows


в процессе приобщения элемента к BoxDrawManager появились вопросы к его автору
1) почему размер GUTTER никак не регулируется?
2) почему при передачи в draw области отрисовки текущего пункта появляется артефактная полоска после снятия выделения, как показано на рисунке? причем если в Draw передать область на 1 пиксель по высоте меноше реальной, то артефакты пропадают, но остается зазор неиспольозуемой области в 1 пиксель. Как это правильно делать?

пример на рисунке можно найти в FormsPalette.sha. Элемент есть на SVN, но в палитру пока не внесен
карма: 27
0
файлы: 1box_pal_manager.png [8.5KB] [344]
Разработчик
Ответов: 26170
Рейтинг: 2127
#2: 2008-10-28 23:42:30 ЛС | профиль | цитата
Dilma писал(а):
появились вопросы к его автору

Ты чего, прямо не можешь написать

1. Разве, вроде зависел от размера иконки по ширине. Но если регулировать, то как ? По высоте я не стал этого делать.
2. Вообще-то странные артефакты, никогда таких не видел. Надо разбираться в чем проблема.

карма: 22

0
Администрация
Ответов: 15295
Рейтинг: 1519
#3: 2008-10-29 00:03:06 ЛС | профиль | цитата
nesco писал(а):
Разве, вроде зависел от размера иконки по ширине.

неа. Глядя на код видим

#pas
dy := Rect.Bottom - Rect.Top;
gtRect.Left:= gtRect.Left + SHIFT_GUTTER;
gtRect.Right:= gtRect.Left + dy + SHIFT_PICTURE;
т.е. зависит он только от высоты итема и констант, а конкретнее всегда на 3 пикселя больше него. Но самое главное, что вывод гуттера заточен в расчете на то, что его габариты одинаковы, что не всегда как видишь может быть верно. Нужно видимо его длинну всеже вывести как параметр и дать пользователю самостоятельно управлять этой настройкой.

nesco писал(а):
Вообще-то странные артефакты, никогда таких не видел. Надо разбираться в чем проблема.

не факт, что менеджер используется должным образом. Хотя и не исключено, что в алгоритме отрисовки была случайно использована какая-то особенность отрисовки пунктов стандартных элементов...

Будем считать этот пример тестом на оправдание основного св-ва менеджеров, которое гласит: будучи раз написанным менеджер может использоваться совместно с любыми иными элементами, поддерживающуми регламентированный протокол общения с ним.
карма: 27
0
Разработчик
Ответов: 26170
Рейтинг: 2127
#4: 2008-10-29 00:48:26 ЛС | профиль | цитата
Dilma, поправил твой код, нормально все стало рисовать. Но это первое приближение.
Насчет Guttera надо подумать.
Dilma писал(а):
зависит он только от высоты итема и констант

Не совсем корректно -- константы это -- точно, но вот высота итема, расчитывается исходя из высоты иконки или текста (что больше), и в дальнейшем становится его шириной, те квадрат отрисовки будущей иконки
------------ Дoбавленo:

Dilma писал(а):
Нужно видимо его длинну

То бишь ширину, наверное надо, но привязать к размеру иконки надо обязательно.
------------ Дoбавленo:

Честно, я не думал, что ты прицепишь это менеджер еще куда-то, но скажу, что даже так, и то -- удачно.
карма: 22

0
Администрация
Ответов: 15295
Рейтинг: 1519
#5: 2008-10-29 01:03:29 ЛС | профиль | цитата
nesco писал(а):
То бишь ширину, наверное надо, но привязать к размеру иконки надо обязательно.

представь себе, что я DrawBoxManager использую для отрисовки редактора строк с подцветкой синтаксиса. Там ширина Gutter-a зависит от чего угодно, но только не от каких-то иконок. Поэтому делать его отрисовку заранее полагая, что там будет иконка - это не верно. Во всяком случае, если мы не ограничим данный элемент только таким функционалом...

nesco писал(а):
Честно, я не думал, что ты прицепишь это менеджер еще куда-то

ну так ради этого такие заморочки и делались. Важно понять то, что чем шире и обобщеннее делаешь интерфейс, тем в большем количестве мест он может быть использован.
карма: 27
0
Разработчик
Ответов: 26170
Рейтинг: 2127
#6: 2008-10-29 01:15:58 ЛС | профиль | цитата
Dilma писал(а):
Во всяком случае, если мы не ограничим данный элемент только таким функционалом...

Неее, думаю не оганичим, то было первое приближение. HiAsm, когда-то, с чего-то тоже начинался.

------------ Дoбавленo:


Dilma писал(а):
Там ширина Gutter-a зависит от чего угодно

Но минимальную ширину, все же, задать надо, иначе муть получится. Может высоту текста взять для расчета

------------ Дoбавленo:


Dilma писал(а):
Поэтому делать его отрисовку заранее полагая, что там будет иконка - это не верно

Ну так я и написал
nesco писал(а):
исходя из высоты иконки или текста (что больше)

Те без иконки привязка будет к высоте текста, а вот отступы надо сделать регулируемыми
------------ Дoбавленo:

Я думаю, всеже можно сделать ширину настраиваемой, но ограничить по минимуму
карма: 22

0
Администрация
Ответов: 15295
Рейтинг: 1519
#7: 2008-10-29 01:27:29 ЛС | профиль | цитата
nesco писал(а):
Я думаю, всеже можно сделать ширину настраиваемой, но ограничить по минимуму

да, только ограничителем можно взять константу

внес окончательные исправления на SVN - впринципе пользоваться можно.

кстате требовать то, чтобы вызывающая сторона была непременно предком PControl тоже не есть классно, как и пользование его Canvas и Font. Скажем почему я не могу захотеть рисовать не на элементе, а где-то в центре PBitmap И вот это еще не совсем понятно

#pas
SetBkMode(DC, Font.Color);
у SetBkMode вторым параметром не цвет задается, а прозрачность фона при выводе текста
карма: 27
0
Разработчик
Ответов: 26170
Рейтинг: 2127
#8: 2008-10-29 01:40:14 ЛС | профиль | цитата
Dilma писал(а):
у SetBkMode вторым параметром не цвет задается, а прозрачность фона при выводе текста

Сейчас точно не могу вспомнить где, но я встречал в кодах и установку цветом, а не кодом вывода. Но исправить не проблема.

Dilma писал(а):
кстате требовать то, чтобы вызывающая сторона была непременно предком PControl тоже не есть классно, как и пользование его Canvas и Font

Над этим надо подумать
карма: 22

0
Администрация
Ответов: 15295
Рейтинг: 1519
#9: 2008-10-29 11:24:54 ЛС | профиль | цитата
nesco писал(а):
Сейчас точно не могу вспомнить где, но я встречал в кодах и установку цветом, а не кодом вывода. Но исправить не проблема.

надо и там это будет поправить при встрече
карма: 27
0
Разработчик
Ответов: 26170
Рейтинг: 2127
#10: 2008-10-29 15:16:59 ЛС | профиль | цитата
Dilma писал(а):
надо и там это будет поправить при встрече

Все, что нашел у нас, все поправил
карма: 22

0
10
Сообщение
...
Прикрепленные файлы
(файлы не залиты)