1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

Кирилица через VBA for CorelDrow

Тема в разделе "CorelDraw", создана пользователем -, 31 мар 2003.

Модераторы: Артер
  1. Guest

    Проблем в следующем:
    Пишеться макрос, через InputBox вводяться буковки русские.
    И только.
    Далее необходимо чтобы эти буковки стали в документе вместо других.
    И тут проявляется такой феномен - ничего не видно.
    Не видно в документе, не видно в тектовом редакторе, но при этом объект существует и средствами VBA можно вытащить его содержимое, которое MsgBox отображается верно.

    Sub Test()
    Dim MyName As String, T As Shape

    MyName = InputBox("Введите имя")
    Set T = ActivePage.TextFind("Name", False)
    MsgBox VarType(T)
    MsgBox TypeName(T)
    T.CreateSelection

    With ActiveShape.Text
    MsgBox .Contents
    .Contents = Name
    MsgBox .Contents
    MsgBox .CharacterCount
    End With

    End Sub

    Вот примерчик кода.
    Кстати OldText здесь представлен латиницей в моем случае -это не критично.
    Но если текст записан кирилицей, то TypeName выдает "ничего".
    Про кривые шрифты не говорите: испольшую Tahoma. Шрифт не важен.

    Arkady, есть предложения?

    P.S. У Вакуленко на Обероне я ответа не получил.
     
  2. Guest

    Честно, говоря — нет. Так как любая UNICODE-строка скукоживает текст. Исключение в случае, если используется конструкция вида .contents = .contents. Да и в этом случае мне кажется, что где-то происходит надувательство
     
  3. Guest

    Хочу попробовать через текстовый файл...
     
  4. Guest

    Через Input # тоже не втягивается...
     
  5. Guest

    Проблем не во втягивании — тут-то все нормально, а в присваивании свойства .Contents. Попробуй, присвой «по-дурке» .Contents= chrW(&h410) или .Contents = "adasdasdasdasdasd Ф". Во втором случае без «Ф» все нормально, а с «Ф» — текст скукоживается.
     
  6. Guest

    Да как я его только не затягивал. Даже HTML конвертирование применял.
    Не хочет и все тут.
    Я на Обероне переформулировал вопрос с твоей подачи: может ли VBA работать с Unicode?
    Посмотрим, что Вакуленко ответит.

    Кстати, я тут на Эф-Ти-Пи-шнике Кореловском нашел патч к KPT5
    Link: ftp.corel.com/pub/kpt/5/win/kpt5updater.zip
     
  7. Guest

    Ахтунг!!!!
    Не ставь этот патч. Он сериал запрашивает и тормоз...
     
  8. Guest

    VBA'то худо-бедно с unicode-строками работает (ф-ция chrW() оттуда ). Прболема в .contents. Мне лично так кажется
     
  9. Guest

    Получил наконец-то ответ от господина Вакуленко
    Выглядит это так:
    Dino,

    The answer is both "Yes" and "No". CorelDRAW is not yet a true Unicode application, so it doesn't handle the text through Unicode per se. However it still can support multiple code pages in the same document, so you still can show Cyrillic, Central European, Western and other characters at the same time.

    CorelDRAW 11 has expanded its object model with advanced text handling messages which automatically convert Unicode characters from VBA (you need to use Shape.Text.Story, for example, instead of the old Shape.Text.Contents property). However if you are still under CorelDRAW 10 or 9, you will need to use a "hack" I explained in the following thread: Special Characters

    По этой ссылке Special Characters он предлагает следующее:
    In CorelDRAW 10 you need to use a little hack. Basically, you need to get an ASCII code of the character and then create a Unicode character using the single-byte code. You do this with using VBA's Asc and ChrW functions respectively:

    Code:
    ActiveShape.Text.Contents = ChrW$(Asc("©"))


    If you want to assign more than one character, you need to process each character in the string this way. You can use the following function to convert a normal VBA string into something CorelDRAW 10 can use to assign to a text object:

    Code:
    Function GetWideString(s As String) As String
    Dim p As String, i As Long, c As String
    p = ""
    For i = 1 To Len(s)
    c = Mid$(s, i ,1)
    p = p & ChrW$(Asc(c))
    Next i
    GetWideString = p
    End Function


    Then you can use it as follows:

    Code:
    ActiveShape.Text.Contents = GetWideString("©®")


    When you try get back the text from CorelDRAW and want to analyze it in VB/VBA, you should do a reverse transformation using AscW and Chr functions:

    Code:
    Function GetNormalString(s As String) As String
    Dim p As String, i As Long, c As String
    p = ""
    For i = 1 To Len(s)
    c = Mid$(s, i ,1)
    p = p & Chr$(AscW(c))
    Next i
    GetNormalString = p
    End Function

    Попробую разобраться
     
  10. Guest

    Ну, это в одну сторону. А вот изменить свойство .contetnts?
     
  11. Guest

    Ну он же пишет, Корел это не полноценное приложение по поддержке юникода. Получаеться, что с .contents поделать ничего нельзя... Возможно поэтому они ввели в 11 кореле свойство .Story.
    А то, что он показал - сработало!
    Прописываешь в процедуре или модуле функцию

    Function GetWideString(s As String) As String
    Dim p As String, i As Long, c As String
    p = ""
    For i = 1 To Len(s)
    c = Mid$(s, i, 1)
    p = p & ChrW$(Asc(c))
    Next i
    GetWideString = p
    End Function

    а код сработал, что мне и было нужно

    Sub Unicod()
    Dim name As String
    name = InputBox("Введите имя")
    ActiveShape.Text.Contents = GetWideString(name)
    End Sub

    Спасибо за поддержку, Arkady.

    Кстати в Рязани я бывал.
     
  12. Guest

    А Help на русском видал кто?
     
Модераторы: Артер

Поделиться этой страницей