Форум: "Media";
Текущий архив: 2003.03.27;
Скачать: [xml.tar.bz2];
ВнизПопадание курсором мыши на букву. Найти похожие ветки
← →
sergn (2002-12-16 17:26) [0]Вывожу на HDC текст функцией TextOut.
Как можно определить заполнена ли буквой та или иная точка на
HDC выведенным текстом?
← →
Anatoly Podgoretsky (2002-12-16 17:30) [1]Чем у тебя буквы отличаются от остального, случайно не цветом, он известен?
← →
MRB_SPB (2002-12-16 17:46) [2]во во если намёк слишком тонкий то получи значение пикселя под курсором и сравни с цветом шрифта
← →
MBo (2002-12-16 17:54) [3]на hdc нет понятия строчек
← →
sergn (2002-12-16 18:07) [4]Проблема следующая :
У меня есть несколько объектов моего класса TDrawTextObject.
Каждый из этих объектов выводит текст под некоторым углом.
Цвет текстов этих объектов может совпадать.
Плюс.
Цвет фона может совпасть с цветом буквы.
Пока вижу выход лишь в определении координат каждой выведенной буквы?
← →
MRB_SPB (2002-12-16 18:39) [5]так сделай ещё одну HDS в памяти нарисуй там свой текст но без фона и как я говорил выше найди по заданой координате цвет пикселя я думаю с совмещением систем координат на первой и второй ХДС вопросов не возникнет
← →
zavdim (2002-12-17 07:56) [6]Тут видимо надо объекты разделить. Так?
Можно цвета определять чтобы одинаковых не было.
Если есть, то меняешь допустим красную составлящую цвета у одного объекта на 1 - на видимости не отразится, а значения пикселов будут разные.
← →
sergn (2002-12-17 14:37) [7]>MRB_SPB
Если создать вторую HDC, например через
CreateCompatiableDC(0), то на эту HDC нужно еще выполнить select битмапы размером с окно редактора. А это меня не совсем устраивает. (лишнее время на create и resize битмапы + Лишие ресурсы)
← →
zavdim (2002-12-17 14:44) [8]Вы определитесь что Вам надо, и хотя бы обозначте что Вам не нравится в моем предложении.
← →
MRB_SPB (2002-12-17 19:26) [9]нехочешь ничего создавать, нарисуй на этом же HDC за областью отсечения окна ,хотя создать TBitmap размерам не с эту же ндс, а по размерам надписи, я думаю если надписей у тебя много с определением той рядом с которой нажали проблем не возникнет
← →
sergn (2002-12-17 21:33) [10]В общем поступаю так (вроде компактно и нормально работает):
function TTextObject.HitTextInLayerList(a_X, a_Y : integer):integer;
var
i : integer;
bmp : tbitmap;
begin
result := -1;
bmp := tbitmap.create(); bmp.pixelformat := pf24bit;
try
bmp.width := 3; bmp.height := 3;
for i := 0 to DrawedLayers.count - 1 do
if (tDrawObject(DrawedLayers[i]).LayerType = lttext)
then begin
//если i-ый объект текст , то смещаю координаты отрисовки
TTextDrawObject(DrawedLayers[i]).SetTestIndent(-a_X + 1, -a_Y + 1);
try
// рисую на bitmap, и проверяю цвет пиксела в точке(1,1);
if (TTextDrawObject(DrawedLayers[i]).HitText(bmp.canvas.handle,1, 1)) then
result := i ;
finally
// восстанавливаю координаты отрисовки
TTextDrawObject(DrawedLayers[i]).SetTestIndent(0, 0);
end;
if (result <> -1) then break;
end;
finally
bmp.free;
end;
end;
Т.е. не потребовалось создавать bitmap размером с экран
Спасибо всем за внимание
← →
__Alx__ (2002-12-17 22:39) [11]А не обязательно битмапы...
1. Можно сделать так:
создаешь патч, на ней рисуешь символ, преобразуешь патч в регион - затем проверяешь попал на регион или нет ( способ подходит, если символов много, и надо проверять по отдельности)
2. ПРи помощи битмапов. Создай битмап 1х1 пиксель и в относительных координата выведи на него сивол - затем проверь - этот пиксель закрашен или нет?
ПыСы. Все проврял - все работает. НО!!! В превом способе при шрифте Марлетт (извр. шрифт) неверно создается регион в 98 винде, то же самое в ИксПи - пашет
Удачи
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2003.03.27;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c