powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как задать межстрочный интервал для выбранного шрифта?
25 сообщений из 27, страница 1 из 2
Как задать межстрочный интервал для выбранного шрифта?
    #32956545
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Допустим размер шрифта 18 а межстрочный интервал 16 пунктов.(или в пикселях)

-------------------------------------------------------------------------
Нет худа без добра, да и добро без худа - чудо.
...
Рейтинг: 0 / 0
Как задать межстрочный интервал для выбранного шрифта?
    #32957085
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
насколько я понимаю, тебя интересует RichTextBox :)

см. структуру PARAFORMAT2 и сообщение EM_SETPARAFORMAT для форматирования параграфа документа.

установить межстрочный интервал можно через dyLineSpacing (явное задание) или bLineSpacingRule.

ЗЫ
для фонта: Ascent, Descent и LineSpacing - это константы, зависящие от высоты шрифта.
...
Рейтинг: 0 / 0
Как задать межстрочный интервал для выбранного шрифта?
    #32957326
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
судя по всему, твой RichTextBox по возможностям уже перегнал WordPad. осталось совсем немного и до Word'а из MS Office - Borders & Shading и Spelling & Grammar :)
...
Рейтинг: 0 / 0
Как задать межстрочный интервал для выбранного шрифта?
    #32958085
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кузясудя по всему, твой RichTextBox по возможностям уже перегнал WordPad. осталось совсем немного и до Word'а из MS Office - Borders & Shading и Spelling & Grammar :)

Так и есть. Вот с межстрочным интервалом разберусь и обгоню Ворд. :)
Я у Ворда не нашёл такой возможности. (Может плохо смотрел)
...
Рейтинг: 0 / 0
Как задать межстрочный интервал для выбранного шрифта?
    #32958105
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у word'а:
выделить текст и по Format->Paragraph->Indentd & Spacing
там как раз идет заполнение (ну оооооочень похожих полей на PARAFORMAT2) параметров - в том числе и line spacing :)
...
Рейтинг: 0 / 0
Как задать межстрочный интервал для выбранного шрифта?
    #32958193
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кузянасколько я понимаю, тебя интересует RichTextBox :)

см. структуру PARAFORMAT2 и сообщение EM_SETPARAFORMAT для форматирования параграфа документа.

установить межстрочный интервал можно через dyLineSpacing (явное задание) или bLineSpacingRule.

ЗЫ
для фонта: Ascent, Descent и LineSpacing - это константы, зависящие от высоты шрифта.

Т.е. вот так ДОЛЖНО работать. НО не работает. Где ошибка?

Код: plaintext
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.
private struct PARAFORMAT2
{
	public int cbSize;
	public uint dwMask;
	public short wNumbering;
	public short wReserved;
	public int dxStartIndent;
	public int dxRightIndent;
	public int dxOffset;
	public short wAlignment;
	public short cTabCount;
	[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)]
	public int[] rgxTabs;
	public int dySpaceBefore;
	public int dySpaceAfter;
	public int dyLineSpacing;
	public short sStyle;
	public byte bLineSpacingRule;
	public byte bOutlineLevel;
	public short wShadingWeight;
	public short wShadingStyle;
	public short wNumberingStart;
	public short wNumberingStyle;
	public short wNumberingTab;
	public short wBorderSpace;
	public short wBorderWidth;
	public short wBorders;
}


private void SetParagraph()
{
	PARAFORMAT2 prg=new PARAFORMAT2(); 
	prg.cbSize     = Marshal.SizeOf(prg); 
	prg.dyLineSpacing  = 200;
	prg.dwMask     = PFM_LINESPACING; 
	SendMessage(this.richTextBox1.Handle, EM_SETPARAFORMAT, SCF_SELECTION, ref prg);
}
...
Рейтинг: 0 / 0
Как задать межстрочный интервал для выбранного шрифта?
    #32958323
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
посмотри описание bLineSpacingRule - его НЕОБХОДИМО задать (значения 3, 4, или 5) при 0 = полное игнорирование поля dyLineSpacing
...
Рейтинг: 0 / 0
Как задать межстрочный интервал для выбранного шрифта?
    #32958360
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+
по поводу задания флага PFM_SPACEAFTER (в описании bLineSpacingRule) - не совсем уверен, что он нужен. это надо проверять.
...
Рейтинг: 0 / 0
Как задать межстрочный интервал для выбранного шрифта?
    #32958414
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кузяпосмотри описание bLineSpacingRule - его НЕОБХОДИМО задать (значения 3, 4, или 5) при 0 = полное игнорирование поля dyLineSpacing

Не могу нигде найти описание значений bLineSpacingRule. Опытным путем нашёл рабочую комбинацию fmt.bLineSpacingRule = 4;
тогда устанавливает интервал указанный в fmt.dyLineSpacing


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
private void SetParagraph()
		{
			
			PARAFORMAT2 fmt=new PARAFORMAT2(); 
			fmt.dwMask     = PFM_LINESPACING; 
			fmt.cbSize     = Marshal.SizeOf(fmt); 
			fmt.bLineSpacingRule  = 4;
			fmt.dyLineSpacing = 35;
			SendMessage(this.richTextBox1.Handle, EM_SETPARAFORMAT, 0, ref fmt);
		}

Теперь вопрос: Что это за единицы? fmt.dyLineSpacing = 35;
Это даже на пиксели не похоже. Мне бы надо в пунктах задавать. Как пересчитать эти значения в пункты?
...
Рейтинг: 0 / 0
Как задать межстрочный интервал для выбранного шрифта?
    #32958417
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кузя+
по поводу задания флага PFM_SPACEAFTER (в описании bLineSpacingRule) - не совсем уверен, что он нужен. это надо проверять.

Без него работает.
...
Рейтинг: 0 / 0
Как задать межстрочный интервал для выбранного шрифта?
    #32958462
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M234Теперь вопрос: Что это за единицы?
из описания для VB6
MSDN for VB6A twip is 1/20 of a printer’s point (1,440 twips equal one inch, and 567 twips equal one centimeter).
...
Рейтинг: 0 / 0
Как задать межстрочный интервал для выбранного шрифта?
    #32958508
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
' SpacingRule
' Type of line spacing. To use this member, set the PFM_SPACEAFTER flag in the dwMask member. This member can be one of the following values.
' 0 - Single spacing. The dyLineSpacing member is ignored.
' 1 - One-and-a-half spacing. The dyLineSpacing member is ignored.
' 2 - Double spacing. The dyLineSpacing member is ignored.
' 3 - The dyLineSpacing member specifies the spacingfrom one line to the next, in twips. However, if dyLineSpacing specifies a value that is less than single spacing, the control displays single-spaced text.
' 4 - The dyLineSpacing member specifies the spacing from one line to the next, in twips. The control uses the exact spacing specified, even if dyLineSpacing specifies a value that is less than single spacing.
' 5 - The value of dyLineSpacing / 20 is the spacing, in lines, from one line to the next. Thus, setting dyLineSpacing to 20 produces single-spaced text, 40 is double spaced, 60 is triple spaced, and so on.

Извращенцы.
Ну и какие у меня теперь шансы привести это к пикселям и/или пунктам?
А почему вообще не 1/20 длинны большого пальца на ноге Билла ?
...
Рейтинг: 0 / 0
Как задать межстрочный интервал для выбранного шрифта?
    #32958562
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
где нибудь в самом начале программы поставь получение коэффициентов:
Код: plaintext
1.
2.
3.
using(Graphics g=this.richTextBox1.CreateGraphics())
{ dpix=g.DpiX;
  dpiy=g.DpiY;
}
и там где нужен пересчет из пикселей в твипы
Код: plaintext
1.
twipX=pixelX*1440/dpix; 
twipY=pixelY*1440/dpiy;
вроде так
...
Рейтинг: 0 / 0
Как задать межстрочный интервал для выбранного шрифта?
    #32958607
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кузягде нибудь в самом начале программы поставь получение коэффициентов:
Код: plaintext
1.
2.
3.
using(Graphics g=this.richTextBox1.CreateGraphics())
{ dpix=g.DpiX;
  dpiy=g.DpiY;
}
и там где нужен пересчет из пикселей в твипы
Код: plaintext
1.
twipX=pixelX*1440/dpix; 
twipY=pixelY*1440/dpiy;
вроде так

DpiX - Это разрешение ? (по умолчанию 96Dpi в Виндовс)

А с пунктами надо вроде так Пункты * 1.33 = Пиксели

Верно?
Всегда верно ? (можно в таком виде исп-ть или есть загвоздки?)
...
Рейтинг: 0 / 0
Как задать межстрочный интервал для выбранного шрифта?
    #32958619
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M234DpiX - Это разрешение ? (по умолчанию 96Dpi в Виндовс)это нормальное разрешение. но любой очкарик это может изменить в настройках "Display Properties", например на 120 или вообще Custom. так что лучше при запуске программы всегда эти константы DpiX и DpiY вытаскивать из graphics
...
Рейтинг: 0 / 0
Как задать межстрочный интервал для выбранного шрифта?
    #32958665
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кузя M234DpiX - Это разрешение ? (по умолчанию 96Dpi в Виндовс)это нормальное разрешение. но любой очкарик это может изменить в настройках "Display Properties", например на 120 или вообще Custom. так что лучше при запуске программы всегда эти константы DpiX и DpiY вытаскивать из graphics

Понимаю. Тогда появляется ещё одна проблемка.
Как найти множитель для получения пикселей из пунктов?
т.е. при 96Dpi множитель 1.33

а при Custom ?
...
Рейтинг: 0 / 0
Как задать межстрочный интервал для выбранного шрифта?
    #32958704
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
откуда у тебя этот множитель 1.33 появился ?
...
Рейтинг: 0 / 0
Как задать межстрочный интервал для выбранного шрифта?
    #32958715
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кузяоткуда у тебя этот множитель 1.33 появился ?


Не помню.
Когда-то набрёл в сети на страничку где всё это было грамотно расписано.
Множитель этот дл 96Dpi просто запомнился, формулы нет.
Теперь хоть убей не могу найти эту страничку.
...
Рейтинг: 0 / 0
Как задать межстрочный интервал для выбранного шрифта?
    #32958738
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поробуй делать так:
Код: plaintext
fmt.dyLineSpacing = pixelY*1440/dpiy;
pixelY - line spacing в пикселах, dpiy - разрешение экрана по вертикали (из graphics)
...
Рейтинг: 0 / 0
Как задать межстрочный интервал для выбранного шрифта?
    #32958777
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кузяпоробуй делать так:
Код: plaintext
fmt.dyLineSpacing = pixelY*1440/dpiy;
pixelY - line spacing в пикселах, dpiy - разрешение экрана по вертикали (из graphics)

Мне надо пункты в пикселы перевести. А уж потом LineSpacing'ом заниматься.

т.е. pixelY надо найти.

для 96Dpi: pixelY = X in pt * 1.33;
соответственно что бы найти искомое надо знать множитель для соответствующего разрешения.
...
Рейтинг: 0 / 0
Как задать межстрочный интервал для выбранного шрифта?
    #32958872
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ферштанден, о каких пунктах ты говоришь. PPI это количество точек при разрешении 72 dpi (в этом случае DPI=PPI). а перерасчет - прост:
если фонт, например 12 ppi на разрешении 96 - то высота шрифта в пикселах
12*(96/72) = 16 пикселей
...
Рейтинг: 0 / 0
Как задать межстрочный интервал для выбранного шрифта?
    #32958917
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда вообще все просто (зря ты о большом пальце на ноге Билла )
Код: plaintext
fmt.dyLineSpacing = pointY*20; // вот он размер :)
pointY - размер шрифта в пунктах
...
Рейтинг: 0 / 0
Как задать межстрочный интервал для выбранного шрифта?
    #32958930
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОООПС
pointX - размер LineSpacing в пунктах
...
Рейтинг: 0 / 0
Как задать межстрочный интервал для выбранного шрифта?
    #32958997
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кузяферштанден, о каких пунктах ты говоришь. PPI это количество точек при разрешении 72 dpi (в этом случае DPI=PPI). а перерасчет - прост:
если фонт, например 12 ppi на разрешении 96 - то высота шрифта в пикселах
12*(96/72) = 16 пикселей

А вот и оно (96/72) = 1.33[3]

филен данк !
...
Рейтинг: 0 / 0
Как задать межстрочный интервал для выбранного шрифта?
    #32959011
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кузятогда вообще все просто (зря ты о большом пальце на ноге Билла )
Код: plaintext
fmt.dyLineSpacing = pointY*20; // вот он размер :)
pointY - размер шрифта в пунктах

И к разрешению это уже отношения не имеет?
Справедливо для любого?
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как задать межстрочный интервал для выбранного шрифта?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]