Тема: Коэффициент сжатия

Доброго всем дня. Скажите пожалуйста как  "сжать" текст в ячейке таблицы, т.е. установить коэффициент сжатия текста?

Re: Коэффициент сжатия

Установить ячейке(или типу ячеек) соответствующий текстовый стиль (с нужным коэф. сжатия).

Re: Коэффициент сжатия

> Vildar
А если мне надо в конкретной ячейке таблицы сжать текст, а не весь текст сжимать как быть???

Re: Коэффициент сжатия

SetCellTextStyle

Re: Коэффициент сжатия

> Дашуля
Как посоветовал Vildar это единственный способ
Немного собрал всяко-разно, может пригодится:

Option Explicit
Sub TEST()
     Dim ar As Variant, _
         e As AcadEntity, _
         t As AcadTable, _
         p As Variant, _
         ip As Variant, _
         r As Long, _
         c As Long, _
         st As String, _
         ns As String, _
         d As Double
     With ThisDrawing.Utility
          .GetEntity e, ip, "Select table"
          p = .GetPoint(, "Pick a point inside the desired cell")
     End With
     Set t = e
     ar = GetTableCell(t, p, r, c)
     r = ar(0)
     c = ar(1)
'     debug only:
'     MsgBox "Row " & r & ", Column " & c & vbCr & _
'            "Value: " & t.GetText(r, c)
            st = t.GetCellTextStyle(r, c)
            d = CDbl(InputBox("Enter width factor for this cell:", "Cell Text Width", "0.75"))
            CopyTextStyle st, d, ns
            t.SetCellTextStyle r, c, ns
            t.Update
End Sub
Function GetTableCell(ByVal oTable As AcadTable, ByVal varPt As Variant, _
                      ByRef rowIndex As Long, ByRef colIndex As Long) As Variant
     Dim wviewVec As Variant
     Dim resVar(1) As Long
     wviewVec = ThisDrawing.GetVariable("VIEWDIR")
     oTable.HitTest varPt, wviewVec, rowIndex, colIndex
     resVar(0) = rowIndex
     resVar(1) = colIndex
     GetTableCell = resVar
End Function
Public Function TextStyleExists(styleName As String) As Boolean
'// Frank Oquendo's technic
Dim obj As AcadTextStyle
On Error Resume Next
Set obj = ThisDrawing.TextStyles.Item(styleName)
TextStyleExists = (Err.Number = 0)
End Function
Public Function CopyTextStyle(stlName As String, dblWidth As Double, ByRef newname As String) As Boolean
   On Error GoTo Err_Handler
   Dim oTxtStyle As AcadTextStyle
   Set oTxtStyle = ThisDrawing.TextStyles(stlName)
   ThisDrawing.ActiveTextStyle = oTxtStyle
   If InStr(1, stlName, "-", vbTextCompare) <> 0 Then
   newname = Left(stlName, InStr(1, stlName, "-", vbTextCompare) - 1) & "-" & CStr(dblWidth * 100)
   Else
   newname = stlName & "-" & CStr(dblWidth * 100)
   End If
   If Not TextStyleExists(newname) Then
   Set oTxtStyle = ThisDrawing.TextStyles.Add(newname)
   oTxtStyle.width = dblWidth
   ThisDrawing.Save
   CopyTextStyle = True
   End If
Exit_Here:
   Exit Function
Err_Handler:
   Select Case Err.Number
      Case -2145320861
         CopyTextStyle = False
         Resume Exit_Here
      Case Else
         CopyTextStyle = False
         MsgBox "Error " & Err.Description, "CopyTextStyle", Err.Number
         Resume Exit_Here
   End Select
End Function
Function GetCellText(ByRef rowMax As Long, ByRef rowMin As Long, _
                     ByRef ColMax As Long, ByRef ColMin As Long) As Variant
     Dim pfSet As AcadSelectionSet
     Set pfSet = ThisDrawing.PickfirstSelectionSet
     Dim oTable As AcadTable
     If pfSet.Count = 1 Then
               Set oTable = pfSet.Item(0)
          oTable.GetSubSelection rowMin, rowMax, ColMin, ColMax
     Else
Exit Function
End If
pfSet.Clear
GetCellText = oTable.GetText(rowMin, ColMin)
End Function

~'J'~

Re: Коэффициент сжатия

> Vildar
Скажите пожалуйста как воспользоваться методом SetCellTextStyle ???
Я посмотрела в справке и нашла

object.SetCellTextStyle(row, col, bstrName)

bstrName - я так поняла это название текстового стиля.
row - это строка
col - столбец
Загвоздка заключается в bstrName. Вся таблица заполненна текстовым стилем без сжатия текста, а одна ячейка должна быть с сжатием. Что же указать вместо bstrName??? Что же получается что нужно вызвать процедуру создания нового текстового стиля с сжатием, затем применить метод SetCellTextStyle, указав вместо bstrName название текущего созданного стиля, а затем опять вызвать процедуру создания текста без сжатия и продолжить создание таблицы????

Re: Коэффициент сжатия

> Дашуля
Если нет нужного текстового стиля со сжатием, то да, его нужно создать. А зачем его делать текущим?
Для конкретной ячейки делаете SetCellTextStyle с именем нужного стиля.

... а затем опять вызвать процедуру создания текста без сжатия и продолжить создание таблицы????

А это еще зачем? Бессмыслеца (правильно написал?).
Возможно есть другие варианты. Например через форматирование текста. Но тут я пас. Самому бы было интересно узнать.

Re: Коэффициент сжатия

Возможно есть другие варианты. Например через форматирование текста

Блин, все гениальное просто, а я не додумался,
действительно все проще некуда:

Option Explicit
Sub TEST()
     Dim ar As Variant, _
         e As AcadEntity, _
         t As AcadTable, _
         p As Variant, _
         ip As Variant, _
         r As Long, _
         c As Long, _
         st As String, _
         ns As String, _
         d As Double, _
         vl As String, _
         ret As String
     With ThisDrawing.Utility
          .GetEntity e, ip, "Select table"
          p = .GetPoint(, "Pick a point inside the desired cell")
     End With
     Set t = e
     ar = GetTableCell(t, p, r, c)
     r = ar(0)
     c = ar(1)
vl = t.GetText(r, c)
ret = Mid(vl, InStr(1, vl, ";", vbTextCompare) + 1)
If InStr(1, vl, ";") <> 0 Then
vl = Left(ret, Len(ret) - 1)
End If
MsgBox vl
d = CDbl(InputBox("Enter width factor for this cell:", "Cell Text Width", "1.75"))
vl = "{\W" & CStr(d) & ";" & vl & "}"
t.SetText r, c, vl
t.Update
End Sub

Молодец!
~'J'~

Re: Коэффициент сжатия

> fixo
А где взять инфу по такому редактированию?

 vl = "{\W" & CStr(d) & ";" & vl & "}"

Откуда получаем строку например:

"{\W0.5;текст ячейки}"

Ну и текст соответственно форматируется.
Кста такая "белиберда" встречается в текстах редактируемых СПДС-ом.
В соседней теме, похожй вопрос, https://www.caduser.ru/forum/topic44585.html
С кубом и квадратом, для м3 и м2. Тоже нужная вещь.

Re: Коэффициент сжатия

В справке Акад2008рус нашел:

 Руководство пользователя AutoCAD 2008  > Аннотирование чертежей > Примечания и метки > Работа с внешними текстовыми редакторами > 

\A2 - для перевода в верхний индекс.

Re: Коэффициент сжатия

> Vildar
см. коды форматирования многострочных текстов (в справке)