Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Текст в Label1 с контуром, подскажите решение 
V
    Опции темы
ilnurgi
Дата 5.7.2007, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 29.6.2007

Репутация: нет
Всего: нет



всем привет. 
как сделать текст в лейбле с контуром. вот как на скриншоте чтоб было
user posted image
PM MAIL   Вверх
mr.Anderson
Дата 5.7.2007, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Можно разработать довольно сложное решение в плане алгоритмизации. Если не будет других предложений, то могу попробовать сделать.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
mr.Anderson
Дата 5.7.2007, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Алгоритм примерно такой.

1. Имеем "оцифрованную" надпись с шириной пера 1 пиксел. То есть, толщина линий букв равна 1 пикселу. Хотя это не обязательно, в принципе.
2. Пробегаемся по всей получившейся двумерной матрице в поисках "единичек", т.е. мест, где есть черные точки - части буквы.
3. Найдя эту точку, ставим точки другим цветом вокруг нее, но при условии, что текущая точка, где предполагается поставить точку другим цветом, уже не является точкой черного цвета, т.е. не принадлежит букве.

Примерно так. Если нужно код, попробую сделать, но не факт, что смогу.

У алгоритма есть минус - мы должны иметь оцифрованную надпись. Хотя и эта проблема решаема вполне.

Это сообщение отредактировал(а) mr.Anderson - 5.7.2007, 22:12


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
mr.Anderson
Дата 5.7.2007, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Получилось!  smile  smile  smile 

Держи архив. В архиве лежит DLL, которая содержит процедуру Stroke(). Процедура первым параметром принимает указатель на метку (TLabel), вторым - цвет окантовки (TColor).
Данная процедура создает контур толщиной в 1 пиксел вокруг текста метки.

Это сообщение отредактировал(а) mr.Anderson - 5.7.2007, 22:31

Присоединённый файл ( Кол-во скачиваний: 22 )
Присоединённый файл  StrokeLabel.rar 153,51 Kb


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Klin
Дата 5.7.2007, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



И кто-то недавно говорил про библиотеки smile Может лучше просто через CopyRect и Canvas.




--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
Klin
Дата 6.7.2007, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



К примеру можно так (для более точного эфекта ставьте "ровный" шрифт и желательно жирный):

Код

 Label1->Canvas->Font->Color = clRed;
 Label1->Canvas->TextOutA(0,0,Label1->Caption);
 const &scale = Label1->Font->Size/10; 
Canvas->CopyRect(TRect(Label1->Left-scale,Label1->Top-scale,Label1->Left+Label1->Width+scale,Label1->Top+Label1->Height+scale),Label1->Canvas,TRect(0,0,Label1->Width,Label1->Height));
 Label1->Canvas->Font->Color = clBlack;
 Label1->Canvas->TextOutA(0,0,Label1->Caption);


ps. потом более точно сделаю


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
mr.Anderson
Дата 6.7.2007, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



Цитата
И кто-то недавно говорил про библиотеки

А? smile Вы о чем?

Алгоритмов можно придумать несколько, разумеется. smile Каждая задача имеет много решений.

Цитата
для более точного эфекта ставьте "ровный" шрифт и желательно жирный

Кстати, просто интересно, а мое решение вы смотрели? Там не важно, жирный/не жирный, моноширинный или нет. smile Мое имхо. smile


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
ilnurgi
Дата 7.7.2007, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 29.6.2007

Репутация: нет
Всего: нет



что то совсем ничего не получилось. нашёл что-то подобное в компоненте RxLib. буду использовать его
всем спасибо за внимание
PM MAIL   Вверх
mr.Anderson
Дата 7.7.2007, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 3
Всего: 128



ilnurgi, странно. Оба варианта работоспособные. Ну да ладно.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Klin
Дата 7.7.2007, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Цитата(ilnurgi @  7.7.2007,  11:12 Найти цитируемый пост)
что то совсем ничего не получилось. 

??? Ну ладно у меня вариант "кривой", а вариант mr.Anderson? У RxLabel есть только эффект тени, а не обводки.

ps. Вот вариант чуть "получше"

Код

 Label1->Canvas->Font->Assign(Label1->Font);
 Label1->Canvas->Font->Color = clRed;
 Label1->Canvas->TextOutA(0,0,Label1->Caption);
 StretchBlt(
  GetDC(Handle),Label1->Left-1,Label1->Top-3,Label1->Width+1,Label1->Height+5,
  GetDC(Handle),Label1->Left,Label1->Top,Label1->Width,Label1->Height,SRCCOPY);
 Label1->Canvas->Font->Color = clBlack;
 Label1->Canvas->TextOutA(0,0,Label1->Caption);


Добавлено через 1 минуту и 37 секунд
А если надпись изначально сделать красной, то можно так:

Код

StretchBlt(
  GetDC(Handle),Label1->Left-1,Label1->Top-3,Label1->Width+1,Label1->Height+5,
  GetDC(Handle),Label1->Left,Label1->Top,Label1->Width,Label1->Height,SRCCOPY);
 Label1->Canvas->Font->Assign(Label1->Font);
 Label1->Canvas->Font->Color = clBlack;
 Label1->Canvas->TextOutA(0,0,Label1->Caption);



--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0841 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.