Дано: Есть две строки, каждая из которых "добита" пробелами справа до нужной длины Проблема: в MsgBox они НЕ отображаются равными (нужно дополнительно добавить ~20 пробелов к короткому тексту), в то время как в Debug всё нормально Причина: в Debug используется моноширинный шрифт, а в MsgBox - нет
Возможные решения: 1. сделать свою форму вместо штатной MsgBox — тут всё понятно, не рассметриваем 2. изменить шрифт MsgBox на моноширинный — насколько я понял, тут надо в WinAPI лезть, чего бы не хотелось, конечно 3. Есть какой-то коэффициент, позволяющий добавить N пробелов для визуально корректного отображения Кто-что думает?
Код и скрины
Код
Option Explicit
Option Private Module
'====================================================================================================
Function PRDX_Format_TextToLen(txt, ByVal iLen&, Optional byLeft As Boolean) As String
If Len(txt) > iLen Then MsgBox "Переменная «" & txt & "» ДЛИННЕЕ (" & Len(txt) & " симв.) заданного предела длины (" & iLen & " симв.)!", vbCritical, "PRDX_Format_TextToLen": Exit Function
If byLeft Then
PRDX_Format_TextToLen = Space(iLen - Len(txt)) & txt
Else
PRDX_Format_TextToLen = txt & Space(iLen - Len(txt))
End If
End Function
'====================================================================================================
Sub test()
Dim t1$, t2$
t1 = "Короткий текст"
t2 = "Длинный текст (длиннее короткого)"
t1 = "«" & PRDX_Format_TextToLen(t1, 50) & "»"
t2 = "«" & PRDX_Format_TextToLen(t2, 50) & "»"
Debug.Print Len(t1), t1
Debug.Print Len(t2), t2
MsgBox t1 & vbLf & t2
End Sub
'====================================================================================================
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
vikttur, да вот именно, что простенькую не хочется… В штатном MsgBox 3 типа сообщений со своими знаками и звуками - хочется не меньше такого что-то
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Универсальный способ - только как БМВ предложил. Но если задача - имитировать таблицу, тогда можно воспользоваться vbtab.Или использовать vbtab вместо Space() в Вашей функции (что-то среднее между методом (, предложенным) БМВ и тем, что предложил я.
Михаил Лебедев, очень хороший вариант, кстати - спасибо! Только теперь надо рассчитать, сколько в Табе пробелов и/или других символов, зависит ли это от шрифта и т.д. Потом функцию накидать, чтобы делила заданную строку на количество Табов и т.д.
Пока неутешительно
Код
Sub t()
MsgBox _
String(12, "l") & vbTab & 1 & vbLf & _
String(12, "A") & vbTab & 1
End Sub
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
очень зависит. Чтобы все выглядело красиво нужен моноширный, который в MsgBox "из коробки" не поддерживается. Да и даже через API вроде нет решения, насколько мне известно. Поэтому как ни крути своя форма будет куда удобнее и практичнее. Делал как-то такое - ни разу не пожалел, т.к. очень многое можно было докрутить в итоге и подвесить.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄