Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/25: Рейтинг темы: голосов - 25, средняя оценка - 4.96
 Аватар для dimsaratov
356 / 295 / 78
Регистрация: 02.10.2013
Сообщений: 476
Записей в блоге: 5

Как получить длину строки пикселях (поинтах)

22.08.2014, 20:39. Показов 5122. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть строка(переменная) , известен шрифт как получить её длину в экранных единицах (Pixel, point)?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.08.2014, 20:39
Ответы с готовыми решениями:

Как узнать длину строки в пикселях?
Я там внизу спрашивала как узнать длину строки в пикселях. У меня строка есть и шрифт я знаю каким хочу ее печатать. Мне надо поточнее ее...

Как узнать длину текстовой строки в пикселях?
А может кто знает как узнать длину текстовой строки в пикселях или там сантиметрах не важно.(т.е функция с заданием шрифта и его размера),...

Определить длину строки в пикселях
Знаю, что вопрос сначала покажется простым (а может даже и тупым:)). Стандартно для расчета длины использую вот такую функцию: void...

10
 Аватар для Hemicide
121 / 114 / 62
Регистрация: 27.07.2014
Сообщений: 225
22.08.2014, 21:10
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

VB.NET
1
Dim sizeText As Size = TextRenderer.MeasureText(Me.Text, Me.Font)
Для более точно измерения размеров текста, в функцию нужно передать графический обьект, на котором этот текст будет/уже находится:
VB.NET
1
2
Dim g As Graphics = Me.CreateGraphics ' - форма (Me.Button1.CreateGraphics) - кнопка
Dim sizeText As Size = TextRenderer.MeasureText(g, Me.Text, Me.Font)
Ещё есть:
VB.NET
1
g.MeasureString(Me.Text, Me.Font)
того-же графического объекта, но по опыту могу сказать что он не верно измеряет, связано это с пробелами в тексте (целые статьи есть по этому поводу)
4
 Аватар для dimsaratov
356 / 295 / 78
Регистрация: 02.10.2013
Сообщений: 476
Записей в блоге: 5
25.08.2014, 21:39  [ТС]
К сожалению в предложенном решении не хватает точности
0
 Аватар для Hemicide
121 / 114 / 62
Регистрация: 27.07.2014
Сообщений: 225
25.08.2014, 22:11
Что ты хочешь сделать?

Добавлено через 24 минуты
Только что проверил:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Public Class Form1
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Label1.Top = 30
        Label1.Left = 10
        Label1.BackColor = Color.Black
        Label1.AutoSize = False
    End Sub
 
    Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
        e.Graphics.DrawString("П Р О В Е Р К А", Me.Font, Brushes.Black, New Point(10, 10))
 
        Dim sizeText As Size = TextRenderer.MeasureText(e.Graphics, "П Р О В Е Р К А", Me.Font)
 
        Label1.Size = sizeText
    End Sub
End Class
Всё в порядке, Label1 немного больше (на 1px) по всем сторонам, потому что .MeasureText возвращает размеры прямоугольника для вписанного текста, т.о. чтобы текст не заезжал на/за границы, зачем так сделали - незнаю, но можно сделать обратное действие:
VB.NET
1
2
        Dim sizeText As Size = TextRenderer.MeasureText(e.Graphics, "П Р О В Е Р К А", Me.Font)
        sizeText -= New Size(1, 1)
P.S. e.Graphics.MeasureString выдал на 1px больше чем TextRenderer.MeasureText
1
 Аватар для dimsaratov
356 / 295 / 78
Регистрация: 02.10.2013
Сообщений: 476
Записей в блоге: 5
25.08.2014, 22:15  [ТС]
Есть ListBox каждый item которого формирует строку запроса причем последующая группа слов (или одно слово) может зависит от предыдущей. Я вывожу каждую группу в ComboBox для этого мне нужно точно получить стартовую позицию группы
Группы слов в записи разделяются знаком chr(13) при щелчке на записи вычисляется уровень т.е. какая группа по порядку выбрана после этого заполняется и выводится ComboBox

Добавлено через 3 минуты
Наиболее приближенная точность получается при MeasureString

Причем точность падает при продвижении от первой к пятой группе
0
 Аватар для Hemicide
121 / 114 / 62
Регистрация: 27.07.2014
Сообщений: 225
25.08.2014, 22:24
Не могу уловить суть, ты же можешь получить группу, кликнув по ней в ListBox, а затем передавай индекс в ComboBox. И для чего группы слов разделены chr(13)? Одна группа - один Item
0
 Аватар для Юпатов Дмитрий
1721 / 1208 / 228
Регистрация: 23.12.2010
Сообщений: 1,544
25.08.2014, 22:33
Цитата Сообщение от dimsaratov Посмотреть сообщение
Причем точность падает при продвижении от первой к пятой группе
значит, где-то что-то не учитывается. Скорее всего одно и то же для каждой группы, если погрешность накапливается. А накопление погрешности линейное? если да, то 100% не учитываешь что-то одно и то же.
В принципе, можно вычислить эту погрешность на 1 шаг и ее учитывать потом. Хотя правильнее найти причину погрешности.
Цитата Сообщение от dimsaratov Посмотреть сообщение
Наиболее приближенная точность получается при MeasureString
В свое время мне надо было рисовать текст с заданным интервалом между строками, так вот этим и пользовался. Самое интересное, точность не падала даже при сотне строк. Точнее не строк даже, а текстовых фрагментах.
Короче, таблица в DGW заполняется данными спецификации и затем подготавливается для печати на бланке по ГОСТу для спецификаций по ЕСКД. Проблема была в том, чтобы задавать междустрочный интервал, который бы не зависел от размера шрифта. Геморно, конечно было, но в итоге получился нормальный редактор спецификаций.
Кстати, объект graphics, методами которого меряешь строку, лучше брать из того компонента, где в итоге будет текст.
0
1548 / 1521 / 325
Регистрация: 03.10.2012
Сообщений: 1,551
25.08.2014, 22:58
Цитата Сообщение от dimsaratov Посмотреть сообщение
не хватает точности
Перепробовав массу вариантов в свое время пришел к этому, как самому точному (для RichTextBox).
VB.NET
1
2
3
Dim g As Graphics = RichTextBox1.CreateGraphics
        Dim s As String = "строка для измерения"
        Dim sizeText As SizeF = g.MeasureString(s, RichTextBox1.SelectionFont, RichTextBox1.Size, StringFormat.GenericTypographic, s.Length, 1)
0
 Аватар для dimsaratov
356 / 295 / 78
Регистрация: 02.10.2013
Сообщений: 476
Записей в блоге: 5
26.08.2014, 20:49  [ТС]
Цитата Сообщение от Юпатов Дмитрий Посмотреть сообщение
лучше брать из того компонента, где в итоге будет текст
у меня ListBoxItem, CreateGraphics не поддерживает (наверно ???)
Цитата Сообщение от Юпатов Дмитрий Посмотреть сообщение
А накопление погрешности линейное
Не линейное связанно с количеством пробелов в группе слов
Цитата Сообщение от Hemicide Посмотреть сообщение
Одна группа - один Item
Один Item 4~5 групп слов
0
 Аватар для Юпатов Дмитрий
1721 / 1208 / 228
Регистрация: 23.12.2010
Сообщений: 1,544
26.08.2014, 22:31
Цитата Сообщение от dimsaratov Посмотреть сообщение
у меня ListBoxItem, CreateGraphics не поддерживает
А сам ListBox поддерживает.
Цитата Сообщение от dimsaratov Посмотреть сообщение
Не линейное связанно с количеством пробелов в группе слов
Ну измерять надо текст с пробелами
0
 Аватар для dimsaratov
356 / 295 / 78
Регистрация: 02.10.2013
Сообщений: 476
Записей в блоге: 5
27.08.2014, 20:53  [ТС]
Цитата Сообщение от Юпатов Дмитрий Посмотреть сообщение
Ну измерять надо текст с пробелами
С пробелами получается больше без пробелов меньше
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.08.2014, 20:53
Помогаю со студенческими работами здесь

Есть ли возможность узнать длину строки в RTB в пикселях
У меня такая ситуация: есть строка в RichTextBox необходимо узнать ее длину в пикселях. Может кто - нибудь сталкивался с такой задачей? Или...

Как посчитать длину текса в пикселях?
Есть свой статик контрол, в нём текст можно создавать с различными шрифтами, нужно зарание посчитать длину и высоту текста исходя из...

Как программно указать длину в Star, а не в пикселях
Нужно в коде (не XAML, а CS) указать длину в взвешенной пропорции, но не знаю как это сделать. В XAML это делается очень просто: ...

Как узнать ширину и длину картинки в пикселях?
Нужно просто узнать ширину и длину картинки "macu.jpg" в пикселях. Заранее спасибо.

Возможно ли расчитать длину строки в пикселях, если известен шрифт, его начертание и его размер?
Привет! Пишу курсовик, суть задания в том, что нужно реализовать что-то типа "бегущей строки". В подробности вдаваться не...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru