Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
6-88116
Paco
2003-02-06 15:28
2003.03.27
Не могу отправить GET через Proxy. (IdHTTP)


14-88152
xxxCrazyManxxx
2003-03-13 02:13
2003.03.27
Help IPScaner


1-88033
BillyJeans
2003-03-14 08:07
2003.03.27
Как програмно вставить Frame в Form?


14-88134
DenKop
2003-03-06 00:08
2003.03.27
Free GSM


3-87872
ED
2003-03-11 13:06
2003.03.27
Позиционирование DBGrid при использовании Interbase 6





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский