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

Вниз

Попадание курсором мыши на букву.   Найти похожие ветки 

 
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 вся ветка

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

Наверх




Память: 0.49 MB
Время: 0.015 c
7-88260
tulen
2003-02-02 14:01
2003.03.27
Ребята помогите пожалуйста какой код у ШИФТА


3-87864
SVA
2003-03-11 09:48
2003.03.27
Помогите с Select


14-88194
Alexsys
2003-03-11 08:55
2003.03.27
Литература по TCP, портам и т.д.


3-87827
PrettyFly
2003-03-10 10:46
2003.03.27
NULL


3-87837
Pat
2003-03-08 11:23
2003.03.27
Переезжаем с Paradox a на Access :-))