С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.74/58: Рейтинг темы: голосов - 58, средняя оценка - 4.74
 Аватар для Deimon
35 / 35 / 6
Регистрация: 29.08.2009
Сообщений: 183

Canvas->TextOut() Без Рамки

29.10.2011, 20:05. Показов 11532. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите как на канве можно вывести текст так, чтобы он не был обрамлен на фоне белой рамки.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.10.2011, 20:05
Ответы с готовыми решениями:

В выпадающем списке подсказок для Canvas нет метода TextOut
В выпадающем списке методов и свойств канвы нет метода TextOut. Что нужно сделать, чтобы он появился?

Перетаскивать форму без рамки
Как перетащить форму без рамки в C++ BUILDER 6.0 ??? На форме есть компонент Image и при нажатии на него и перетаскивании должна...

Изменение размеров формы без рамки (bsnone)
как правельно изменить размер формы ? вобщем код: bool hit = false; void __fastcall TForm1::Image1MouseDown(TObject...

12
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
29.10.2011, 20:09
C++
1
SetBkMode(hdc, 0); // прозрачный фон
Координаты по кругу
Вывести текст в Image c тенью на полотне
2
 Аватар для Deimon
35 / 35 / 6
Регистрация: 29.08.2009
Сообщений: 183
29.10.2011, 20:38  [ТС]

Не то. Надо чтобы текст накладывался без фона. А так получилось что наложилось с фоном .. и окно насквозь видно
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
29.10.2011, 20:46
А так не получится?
C++
1
2
3
  StatusBar1->Canvas->Font->Style = TFontStyles() << fsBold;
  StatusBar1->Canvas->Font->Color = clRed;
  StatusBar1->Canvas->TextOutA(5, 3, L"Текст");
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
29.10.2011, 20:50
самое то, я не знаю, что и куда вы распихали.
смотрите картинки по ссылкам.
ну да... в тех примерах, видимо, нет
C++
1
SetBkMode(hdc, 0); // прозрачный фон
1
 Аватар для Deimon
35 / 35 / 6
Регистрация: 29.08.2009
Сообщений: 183
29.10.2011, 22:06  [ТС]
Вообщем понятно.
Надо создать Graphics::TBitmap с прозрачным фоном и на нем писать. А затем этот созданный объект TBitmap отрисовывать на итоговой картинке. Только вокруг букв остаются немного белые пиксели. Какбудто TextOut возвращяет JPG или масштабированное изоражение (что скорее вероятнее)

впринципе сойдет =(
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
29.10.2011, 22:17
не должно там быть точек (пример для РАД ХЕ)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <tchar.h>
// исползуется канва Image1
void __fastcall TForm1::FormCreate(TObject *Sender)
}
  Form1->DoubleBuffered = true;
  Image1->Canvas->Rectangle(0,0,Image1->ClientWidth,Image1->ClientHeight);
  char *s1 = "Привет,";
// String s1 = "Hellow,";
  String s2 = "Win32 API!";
  Image1->Canvas->Brush->Style = bsClear;
  HDC hdc = Image1->Canvas->Handle;
 
  LOGFONT lf;
  ZeroMemory(&lf, sizeof(LOGFONT));
  lf.lfHeight = 20; // высота шрифта
  lf.lfWidth = 20; // ширина символов
  lf.lfWeight = 800; // толщина, "жирность" шрифта
  lf.lfItalic = 1; // если это поле не равно 0, шрифт будет курсивный
  lf.lfUnderline = 0; // если это поле не равно 0, шрифт будет подчёркнутый
  lf.lfEscapement = 90; // 0; //шрифт без поворота
  lf.lfCharSet = DEFAULT_CHARSET;
  lf.lfPitchAndFamily = FIXED_PITCH; // DEFAULT_PITCH;
  wcscpy(lf.lfFaceName, _T("Courier New")); //    #include <tchar.h>
// wcscpy(lf.lfFaceName, UnicodeString("Courier New").c_str()); // "Times New Roman"
// wcscpy(lf.lfFaceName, String("Courier New").c_str()); // "Times New Roman"
// strcpy(lf.lfFaceName, "Times New Roman");
  Image1->Canvas->Font->Handle = CreateFontIndirect(&lf);
  Image1->Canvas->Brush->Color = clBlue;
  Image1->Canvas->FillRect(Image1->Canvas->ClipRect);
//
  SetTextAlign(hdc, TA_LEFT); // |TA_BASELINE|TA_UPDATECP);
  int WidthOfString = Image1->Canvas->TextWidth(s1);
  int HeightOfString = Image1->Canvas->TextHeight(s1);
  int WidthOfString2 = Image1->Canvas->TextWidth(s2);
  int HeightOfString2 = Image1->Canvas->TextHeight(s2);
  SetTextColor(hdc, 0x00ff00); //
//  SetBkColor(hdc, 0xff00ff); // RGB(255,0,255)); //второй параметр задаёт цвет
  SetBkMode(hdc, 0); // прозрачный фон
//
  TextOut(hdc, Image1->ClientWidth/2-WidthOfString2/2,
          Image1->ClientHeight/1.5-HeightOfString2/2, // отступ строк
          s2.c_str(), s2.Length());
}
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
29.10.2011, 22:34
не поленился - просто на канве формы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
void __fastcall TForm1::FormPaint(TObject *Sender)
{
  Form1->DoubleBuffered = true;
  Canvas->Rectangle(0,0,ClientWidth,ClientHeight);
  char *s1 = "Привет,";
// String s1 = "Hellow,";
  String s2 = "Win32 API!";
  Canvas->Brush->Style = bsClear;
  HDC hdc = Canvas->Handle;
 
  LOGFONT lf;
  ZeroMemory(&lf, sizeof(LOGFONT));
  lf.lfHeight = 20; // высота шрифта
  lf.lfWidth = 20; // ширина символов
  lf.lfWeight = 800; // толщина, "жирность" шрифта
  lf.lfItalic = 1; // если это поле не равно 0, шрифт будет курсивный
  lf.lfUnderline = 0; // если это поле не равно 0, шрифт будет подчёркнутый
  lf.lfEscapement = 0; // 0; //шрифт без поворота
  lf.lfCharSet = DEFAULT_CHARSET;
  lf.lfPitchAndFamily = FIXED_PITCH; // DEFAULT_PITCH;
  wcscpy(lf.lfFaceName, _T("Courier New")); //    #include <tchar.h>
// wcscpy(lf.lfFaceName, UnicodeString("Courier New").c_str()); // "Times New Roman"
// wcscpy(lf.lfFaceName, String("Courier New").c_str()); // "Times New Roman"
// strcpy(lf.lfFaceName, "Times New Roman");
  Canvas->Font->Handle = CreateFontIndirect(&lf);
//  Canvas->Brush->Color = clBlue;
  Canvas->FillRect(Canvas->ClipRect);
//
  SetTextAlign(hdc, TA_LEFT); // |TA_BASELINE|TA_UPDATECP);
  int WidthOfString = Canvas->TextWidth(s1);
  int HeightOfString = Canvas->TextHeight(s1);
  int WidthOfString2 = Canvas->TextWidth(s2);
  int HeightOfString2 = Canvas->TextHeight(s2);
  SetTextColor(hdc, 0xff0000); //
//  SetBkColor(hdc, 0xff00ff); // RGB(255,0,255)); //второй параметр задаёт цвет
  SetBkMode(hdc, 0); // прозрачный фон
//
  TextOut(hdc, ClientWidth/2-WidthOfString2/2,
          ClientHeight/1.5-HeightOfString2/2, // отступ строк
          s2.c_str(), s2.Length());
}
Миниатюры
Canvas->TextOut() Без Рамки   Canvas->TextOut() Без Рамки  
1
 Аватар для Deimon
35 / 35 / 6
Регистрация: 29.08.2009
Сообщений: 183
29.10.2011, 23:25  [ТС]
переменная _Т не определена
#define _T wchar_t не помогает

У тебя в примере не понятен результат. формат PNG, не понятно что было изначально.
впринципе если найти "прямоугольный" шрифт, и подогнать размер шрифта, то можно максимально избавиться от этих косячков
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
29.10.2011, 23:29
Цитата Сообщение от Deimon Посмотреть сообщение
1. переменная _Т не определена
#define _T wchar_t не помогает
2. У тебя в примере не понятен результат.
3. формат PNG, не понятно что было изначально.
1. я говорил - это для юникодного билдера
для билдера 6, 2007 пишите что-нибудь типа
C++
1
strcpy(lf.lfFaceName, "Courier New");
2. результат на картинке
3. картинка полностью соотвествует тому, что на форме
1
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
30.10.2011, 20:30
Эм... как бы:
C++
1
2
3
4
5
6
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Image1->Canvas->Brush->Style=bsClear; //Убираем фон
Image1->Canvas->TextOutA(2,4,"fadsafasfas");
}
//---------------------------------------------------------------------------
2
 Аватар для Deimon
35 / 35 / 6
Регистрация: 29.08.2009
Сообщений: 183
31.10.2011, 23:14  [ТС]
NiTan, то что и хотел. Спасибо!
Всем спасибо=)
0
 Аватар для Deimon
35 / 35 / 6
Регистрация: 29.08.2009
Сообщений: 183
01.04.2012, 17:08  [ТС]
LK, Спасибо, все понял, адаптировал под себя и все отлично работает... то что надо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.04.2012, 17:08
Помогаю со студенческими работами здесь

Canvas.TextOut не работает под Android
Неработает этот код вывод текста под андроид: Canvas.TextOut(10, 10, Edit1.Text); Как его переделать?

Canvas.TextOut отрисовка текста относительно центра
Доброго времени суток. Подскажите какое свойство Font нужно отредактировать, что бы текст отрисовывался относительно цента. По умолчанию...

Canvas выходит за рамки div
Подскажите почему canvas выходит за рамки div'a? вот код: https://jsfiddle.net/0z84j6cL/1/ Добавлено через 23 часа 28 минут ...

Canvas выходит за рамки div
Подскажите почему canvas выходит за рамки div'a? вот код: https://jsfiddle.net/0z84j6cL/1/

Окно без рамки
Народ, кто знает как сделать окно без рамки. Вообще без. Или с прозрачной рамкой. Помогите!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru