Как работать с ячейками таблицы?

Автор themaster, 23.06.14, 12:16:02

« назад - далее »

0 Пользователи и 2 гостей просматривают эту тему.

themaster

Не получается добраться до текста в ячейках таблицы. В SDK - пример на С, я пишу на Delphi:

var
    param: ksTextParam;
    numb, result, obj: integer;
    objtype, paramtype: integer;

// Где-то раньше:
MyDoc := ksDocument2D(kompas.Document2D);
with MyDoc do
// Открываю документ,
//... пользователь нажал на таблицу - всё, как в SDK...
objtype := ksGetObjParam(obj, nil, paramtype);

if objtype = TABLE_OBJ then
    begin
        ksOpenTable(obj); // Эта функция возвращает успешное выполнение.
        result := ksGetTableColumnText(numb, param);
        if result = 0 then ShowMessage('Ошибка!!!');  // И вот эта ошибка присутствует.
//... ну и так далее...

Можете посмотреть эту тему http://forum.ascon.ru/index.php/topic,24881.msg191703.html#msg191703 .
Пример в SDK c:\Program Files\ASCON\KOMPAS-3D V15\SDK\Pascal\DELPHIAUTO\step5\
Смотрите - procedure EditTable;
+ Благодарностей: 1

themaster

#2
Норисеев в своей книге описывает, как добраться до основной надписи. На основании его книги у меня получился такой код:

  SheetOptions := ksSheetOptions(kompas.GetParamStruct(ko_SheetOptions));
  //Получаем текущие параметры чертежа:
  tmp := doc.ksGetDocOptions(SHEET_OPTIONS_EX, SheetOptions); // tmp = 1;

........

  for IndexOfOptions := 0 to NumOfPsbOpts do
  begin

    // Сравниваю имена и номера:
    NamesSame := (SheetOptions.layoutName = PsbDocOpts[IndexOfOptions].layoutName); //NamesSame : boolean
    TypesSame := (SheetOptions.shtType = PsbDocOpts[IndexOfOptions].shtType); //TypesSame : boolean


Не работает. В отладчике Delphi пишет, что tmp = 1, то есть, doc.ksGetDocOptions отработало успешно.
SheetOptions показывает как Pointer($16C4B4) as ksSheetOptions.
А вот SheetOptions.shtType или SheetOptions.layoutName показаны как Inaccessible value! Всё ли с ними в порядке? И если всё, то как добраться до величин shType и layoutName? Потому что сравнение - всегда false...
SDK смотрел, там по основной надписи вообще ничего нет. Поиск по форуму - тоже молчит...
Собсно, даже упрощённый вариант не работает:

procedure TForm1.Button2Click(Sender: TObject);
  const
    SHEET_OPTIONS_EX=4;

  var
    kompas: KompasObject;
    Document2D: ksDocument2D;
    SheetOptions: ksSheetOptions;
    i: integer;

  begin
    kompas:=KompasObject(GetActiveOleObject('Kompas.Application.5'));
    //Получаем интерфейс ksSheetOptions
    SheetOptions:=ksSheetOptions(kompas.GetParamStruct(ko_SheetOptions));
    SheetOptions.Init;

    //Получаем интерфейс документа (Компас предварительно открыт, документ в нём создан):
    Document2D:=ksDocument2D(kompas.ActiveDocument2D);

    //Получаем текущие параметры чертежа:
    Document2D.ksGetDocOptions(SHEET_OPTIONS_EX, SheetOptions);
    //Мы используем стандартный формат листа:
    SheetOptions.sheetType:=false;
    //Указываем номер стиля, который нам нужен (15 - в моём случае, это "без оформления")
    SheetOptions.shtType:=15;
    //Устанавливаем новые параметры чертежа:
    i := Document2D.ksSetDocOptions(SHEET_OPTIONS_EX, SheetOptions);
    if i = 0 then
    begin
          // А i всегда равно нулю... И куда копать дальше?
    end;
  end;


Может быть, где-нибудь есть рабочий пример такого кода?

Разобрался, на самом деле всё работает.