OberonCore https://forum.oberoncore.ru/ |
|
COM. Autocad. Проблемы с русскими буквами. https://forum.oberoncore.ru/viewtopic.php?f=3&t=128 |
Страница 1 из 1 |
Автор: | Kubanych [ Среда, 08 Март, 2006 11:56 ] |
Заголовок сообщения: | COM. Autocad. Проблемы с русскими буквами. |
Здравствуйте. Попробовал из Blackbox зайти в автокад. С английскими буквами все в порядке, с русскими - проблемы. Может быть, ответ следует искать на форуме autocad.ru? Заранее благодарю. С уважением, Кубаныч. MODULE testacad; IMPORT Log := StdLog, acad:=CtlAutoCAD (*получен через DevComInterfaceGen из D:\Programs\Common Files\Autodesk Shared\acax16enu.tlb с ручным комментированием и последующим неиспользованием одного сбойного места*) , WinOleAut, CtlT; PROCEDURE Cart (x,y,z:REAL ):CtlT.RealArray; VAR arr:ARRAY 3 OF REAL; dot:CtlT.RealArray; BEGIN arr[0]:=x;arr[1]:=y;arr[2]:=z; dot:=CtlT.RealArr(arr); RETURN dot; END Cart; PROCEDURE run* ( ); VAR vot:acad.IAcadApplication; doc:acad.IAcadDocument; sloi:acad.IAcadLayer; slois:acad.IAcadLayers; model:acad.IAcadModelSpace; str:ARRAY 256 OF CHAR; text:acad.IAcadText; line:acad.IAcadLine; BEGIN vot:=acad.NewAcadApplication(); IF vot#NIL THEN vot.PUTVisible(TRUE); doc:=vot.ActiveDocument(); slois:=doc.Layers(); sloi:=slois.Add('Jalil'); sloi:=slois.Add('Akjol'); sloi:=slois.Add('Sergei'); sloi:=slois.Add('Eugen'); sloi:=slois.Add('Dauren'(*Здесь русские буквы приводят к ТРАПу*) ); model:=doc.ModelSpace(); text:=model.AddText( 'Salam' (*здесь русские буквы приводят к неправильному отображению в автокаде*) , Cart(0,10,0) ,20); line:=model.AddLine( Cart(0,10,0) , Cart(100,10,0) ); line.PUTcolor(acad.acGreen); line.Update; END; END run; BEGIN END testacad. |
Автор: | Илья Ермаков [ Среда, 08 Март, 2006 12:16 ] |
Заголовок сообщения: | |
Ну, что можно сказать... А не приведете сигнатуру метода Add - какую строку он принимает, 1- или 2-байтовую? И стоит, наверное, узнать на автокадовском форуме - какой кодировки ждет автокад? Если Вы передаете строковую константу - то она всегда идет в win cp1251-кодировке, т.к. константы хранятся в 8-битовой форме. Т.е. даже если она приводится к 2-байтовой WSTR, то русские символы кодируются не Юникодом, а в диапазоне 127...255. Возможно, это приводит к проблеме. Попробуйте передавать не через константу, а через переменную, при этом вот таким образом: Код: IMPORT National (* Это модуль русификации ядра *)
... VAR s: ARRAY 256 OF CHAR; i: INTEGER; BEGIN s := 'Русский текст'; (* сейчас в s лежит текст в win-сp1251-кодировке *) FOR i := 0 TO LEN(s$) -1 DO s[i] := National.ConvertToUnicode(s[i]) END; (* вот теперь текст в s лежит в настоящем юникоде *) (* и теперь уже передаем в Автокад *) yourCOMObject.Add(s) |
Автор: | Kubanych [ Среда, 08 Март, 2006 13:08 ] |
Заголовок сообщения: | |
Строки двухбайтовые. PROCEDURE (this: IAcadLayers) Add* (Name: ARRAY OF CHAR): IAcadLayer, NEW; (* Creates a member object and adds it to the appropriate collection *) VAR arg: ARRAY 1 OF CtlT.Variant; ret: CtlT.Variant; BEGIN CtlC.StrVar(Name, arg[0]); CtlC.CallParMethod(this, 2, arg, ret); RETURN ThisIAcadLayer(CtlC.VarAny(ret)) END Add; PROCEDURE ThisIAcadLayers* (v: CtlT.Any): IAcadLayers; VAR new: IAcadLayers; BEGIN IF v # NIL THEN NEW(new); CtlC.InitObj(new, v, "{C347DCBD-D10D-4E35-8509-463A47F6F197}"); RETURN new ELSE RETURN NIL END END ThisIAcadLayers; ---------------------------------------- PROCEDURE (this: IAcadModelSpace) AddText* (TextString: ARRAY OF CHAR; InsertionPoint: CtlT.Any; Height: REAL): IAcadText, NEW; (* Creates a single line of text *) VAR arg: ARRAY 3 OF CtlT.Variant; ret: CtlT.Variant; BEGIN CtlC.StrVar(TextString, arg[2]); CtlC.AnyVar(InsertionPoint, arg[1]); CtlC.RealVar(Height, arg[0]); CtlC.CallParMethod(this, 1572, arg, ret); RETURN ThisIAcadText(CtlC.VarAny(ret)) END AddText; PROCEDURE ThisIAcadText* (v: CtlT.Any): IAcadText; VAR new: IAcadText; BEGIN IF v # NIL THEN NEW(new); CtlC.InitObj(new, v, "{E3FD8511-58AF-43D4-9B16-C6941F7B245F}"); RETURN new ELSE RETURN NIL END END ThisIAcadText; |
Автор: | Kubanych [ Среда, 08 Март, 2006 13:17 ] |
Заголовок сообщения: | |
Все заработало, спасибо. Надо, оказывается, строки отправлять в Юникоде. С уважением, Кубаныч. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |