Сепаратор в диалоге не учитывает отступ рамки?

Место, где разработчики плагинов могут поделиться своим опытом.
Post Reply
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Сепаратор в диалоге не учитывает отступ рамки?

Post by NightRoman »

Сепараторы в плагине работают нормально, если рамки диалогов стандартные, т.е. с позицией (3, 1).
Однако, иногда нужны рамки с меньшим отступом от края, (1, 1).
В этом случае сепараторы рисуются все равно для стандартной рамки.

Диалог с рамкой (отступ 1) и сепаратором (рисуется для отступа 3)

Code: Select all

 ╔════════════════════════════════ caption ════════════════════════════════╗
 ║                                                                         ║
 ║ ╟───── separator ─────────────────────────────────────────────────────╢ ║
 ║                                                                         ║
 ║                                                                         ║
 ║                                                                         ║
 ║                                                                         ║
 ╚═════════════════════════════════════════════════════════════════════════╝
Пример на PowerShell для модуля FarNet.PowerShellFar

Code: Select all

$dialog = $Far.CreateDialog(-1, -1, 77, 10)
$null = $dialog.AddBox(1, 1, 0, 0, "caption")
$dialog.AddText(9, 3, 0, "separator").Separator = 1
$null = $dialog.Show()
Как быть? Недоработка в Фаре или я что-то пропустил в энциклопедии про такой случай?
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Сепаратор в диалоге не учитывает отступ рамки?

Post by buniak_a_h »

Для 3-го ФАР-а я бы посоветовал в вызове far.Dialog (или far.DialogInit) указать флаг FDLG_SMALLDIALOG. Я прошу прощения, если "не в тему" (не знаю, что за язык и версия скрипта приведена), но на размер сепараторов влияет именно этот флаг.
Last edited by buniak_a_h on Fri 21 Apr, 2023 14:50, edited 2 times in total.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Сепаратор в диалоге не учитывает отступ рамки?

Post by NightRoman »

Всем спасибо.
То есть у сепараторов отступ либо нормальный 3, либо маленький 0, так?

Код с флагом "малый диалог"

Code: Select all

$dialog = $Far.CreateDialog(-1, -1, 77, 10)
$dialog.IsSmall = $true
$box = $dialog.AddBox(1, 1, 0, 0, "caption")
$box.Single = $true
$dialog.AddText(9, 3, 0, "separator").Separator = 1
$null = $dialog.Show()
Получаем такое, так как у рамки отступ 1

Code: Select all

 ╔════════════════════════════════ caption ════════════════════════════════╗
 ║                                                                         ║
╟──────── separator ────────────────────────────────────────────────────────╢
 ║                                                                         ║
 ║                                                                         ║
 ║                                                                         ║
 ║                                                                         ║
 ╚═════════════════════════════════════════════════════════════════════════╝
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Сепаратор в диалоге не учитывает отступ рамки?

Post by NightRoman »

А вот еще интересный случай. Я подвинул рамку (отступ 0). Но также сделал ее одинарной.

Code: Select all

$dialog = $Far.CreateDialog(-1, -1, 77, 10)
$dialog.IsSmall = $true
$box = $dialog.AddBox(0, 1, 0, 0, "caption")
$box.Single = $true
$dialog.AddText(9, 3, 0, "separator").Separator = 1
$null = $dialog.Show()
Получаем нормальное положение сепаратора.

Code: Select all

┌───────────────────────────────── caption ─────────────────────────────────┐
│                                                                           │
╟──────── separator ────────────────────────────────────────────────────────╢
│                                                                           │
│                                                                           │
│                                                                           │
│                                                                           │
└───────────────────────────────────────────────────────────────────────────┘
Но сепаратор "думает", что рамка двойная. С этим можно что-то поделать?
Вопрос академический, скорей.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Сепаратор в диалоге не учитывает отступ рамки?

Post by buniak_a_h »

Посмотрите флаг DIF_SEPARATORUSER - там надо указывать 3 символа: начало, середина, конец. И, кстати, там надо указывать обе координаты X1 и X2 (я не пробовал; возможно, это - координаты текста).
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Сепаратор в диалоге не учитывает отступ рамки?

Post by NightRoman »

DIF_SEPARATORUSER - интересно, надо будет поиграться с этим.
Спасибо.
User avatar
buniak_a_h
Posts: 4236
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 222 times
Been thanked: 643 times
Contact:

Сепаратор в диалоге не учитывает отступ рамки?

Post by buniak_a_h »

buniak_a_h wrote: Fri 21 Apr, 2023 17:05 Посмотрите флаг DIF_SEPARATORUSER - там надо указывать 3 символа: начало, середина, конец. И, кстати, там надо указывать обе координаты X1 и X2 (я не пробовал; возможно, это - координаты текста).
NightRoman wrote: Fri 21 Apr, 2023 17:17 надо будет поиграться с этим
Я поигрался. Этот флаг решает ВСЕ Ваши проблемы: и конечные символы, и нестандартный размер. Правда, с FarNet.PowerShellFar я незнаком. Выглядит красиво…
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Сепаратор в диалоге не учитывает отступ рамки?

Post by NightRoman »

Я тоже поигрался, но с текстом такого сепаратора не разобрался

Да, этот флаг работает хорошо, если не использовать текст.
Задаем и позицию начала и конца, и все 3 символа.

Code: Select all

┌───────────────────────────────── caption ─────────────────────────────────┐
│                                                                           │
│         <--------------------------------------->                         │
│                                                                           │
└───────────────────────────────────────────────────────────────────────────┘
Однако, применение текста с таким сепаратором затруднительно, он затирает начало

Code: Select all

┌───────────────────────────────── caption ─────────────────────────────────┐
│                                                                           │
│          separator ----------------------------->                         │
│                                                                           │
└───────────────────────────────────────────────────────────────────────────┘
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Сепаратор в диалоге не учитывает отступ рамки?

Post by NightRoman »

buniak_a_h wrote: Fri 21 Apr, 2023 17:44 Правда, с FarNet.PowerShellFar я незнаком.
Пока в Фарнет нет такого АПИ (игрался прямо в коде пока). Подумаю, может, добавлю.
User avatar
NightRoman
Posts: 6184
Joined: Fri 18 Aug, 2006 13:52
Location: Cambridge, UK
Has thanked: 32 times
Been thanked: 62 times
Contact:

Сепаратор в диалоге не учитывает отступ рамки?

Post by NightRoman »

С другой стороны, без этого можно и обойтись, наверное. Обычный DI_TEXT и DI_VTEXT можно сформировать как сепаратор (чуть кодинга нужно, но зато делается имеющимся АПИ). И текст в сепараторе таким способом можно поместить куда надо.
Post Reply

Return to “Разработка плагинов”