Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.10.2019, 16:36   #1
Женя32
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 621
Счастье Canvas.TextOut вывод текста от средины к краям

Здравствуйте!
Подскажите, пожалуйста, можно ли сделать так, чтобы средина текста, выводимого с помощью Canvas.TextOut, всегда была в одной точке?
Женя32 вне форума Ответить с цитированием
Старый 02.10.2019, 17:16   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

старый тест стирать, но новый выводить, при этом попробуйте взять ширину
ww := Canvas.TextWidth("Тут Ваш текст");
и дальше вычисляете позицию вывода
думаю что с моноширным шрифтом будет выглядеть более естественно.

p.s. я не профи в рисовании на канве, пишу чисто умозрительно.

примерчик набросал: Project1.rar

test1.jpg

Последний раз редактировалось Serge_Bliznykov; 02.10.2019 в 17:53.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.10.2019, 18:28   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

api-шный DrawText хендл канвас передается параметром, последний параметр регулирует расположение текста как по высоте, так и по ширине без всяких вычислений
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.10.2019, 21:07   #4
Женя32
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 621
Счастье

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
старый тест стирать, но новый выводить, при этом попробуйте взять ширину
ww := Canvas.TextWidth("Тут Ваш текст");
и дальше вычисляете позицию вывода
думаю что с моноширным шрифтом будет выглядеть более естественно.

p.s. я не профи в рисовании на канве, пишу чисто умозрительно.

примерчик набросал: Вложение 97833

Вложение 97834
Что-то у меня не получается...
Вот, посмотрите, пожалуйста..., прикрепляю тестовый проект... Картинка появляется при вводе текста.
Вложения
Тип файла: rar Test.rar (681.6 Кб, 15 просмотров)
Женя32 вне форума Ответить с цитированием
Старый 06.10.2019, 22:04   #5
Женя32
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 621
По умолчанию

Первый скришот, как сейчас выводится, а два других - как должно выходить.. Можно ли так сделать?
Изображения
Тип файла: jpg 2019-10-06_23-51-11.jpg (40.3 Кб, 62 просмотров)
Тип файла: jpg 2019-10-06_23-53-45.jpg (40.3 Кб, 58 просмотров)
Тип файла: jpg 2019-10-06_23-55-43.jpg (44.0 Кб, 59 просмотров)
Женя32 вне форума Ответить с цитированием
Старый 07.10.2019, 02:19   #6
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

2 Женя32
Обратите внимание на совет Аватар #3.
northener вне форума Ответить с цитированием
Старый 07.10.2019, 18:37   #7
Женя32
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 621
Счастье

Что-то у меня не получается...
Параметры правильно задаю?:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var  rect : TRect;
begin
ZeroMemory(@rect, sizeof(rect));
DrawText(PaintBox1.canvas.Handle, PChar(Edit1.text),    length(Edit1.Text),    rect,    DT_CALCRECT or DT_NOPREFIX  );

end;
Женя32 вне форума Ответить с цитированием
Старый 07.10.2019, 18:49   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

чего это за rect такой нулевой весь из себя?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 07.10.2019, 19:54   #9
Женя32
Форумчанин
 
Регистрация: 12.09.2008
Сообщений: 621
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
чего это за rect такой нулевой весь из себя?
А как нужно сделать? Я никогда не пользовался этой функцией.

Код:
DrawText(PaintBox1.canvas.Handle, PChar(Edit1.text),    length(Edit1.Text),    rect,    DT_CALCRECT or DT_NOPREFIX  );
Женя32 вне форума Ответить с цитированием
Старый 07.10.2019, 20:31   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

А в справке что по поводу rect? Для чего он используется? Зачем DT_CALCRECT и DT_NOPREFIX используешь? Тебе нужен DT_CENTER и в rect координаты области, в которой разместить текст. Возможно еще DT_VCENTER
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 07.10.2019 в 20:36.
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод текста из Edit в Canvas Женя32 Общие вопросы Delphi 28 23.06.2019 19:10
Canvas->TextOut dimaprog C++ Builder 2 02.11.2018 20:12
Delphi DX10 вывод текста на Canvas vohuanrok Общие вопросы Delphi 10 13.05.2016 10:44
TreeView, Canvas, Вывод текста Kotaries Общие вопросы Delphi 1 18.07.2014 18:16
canvas и TextOut Lokos Общие вопросы Delphi 1 27.08.2010 08:03