Работа со штампом

Автор Freddy, 26.03.13, 23:39:13

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

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

Freddy

Есть код
перебираем все страницы документа
                {
                    ksStamp stamp = OldDoc2d.GetStampEx(i) as ksStamp; // i -номер страницы документа

                    if (stamp != null && stamp.ksOpenStamp() == 1)
                    {
                        RefreshStamp(stamp);
                        stamp.ksCloseStamp();
                    }
                }


В RefreshStamp в цикле проходим все ячейки штампа и устанавливаем значения. Этот код выполняется довольно долго. В частности, повторный вызов stamp.ksColumnNumber(cell) длится около 0,6 с.

Если же штамп закрывать после каждого обновления ячейки, а перед обновлением следуйщей повторно открывать - скорость увеличивается примерно в 100 раз. Установка значения в ячейку примерно 0,006 с

Кто-нибудь знает почему такой эффект? и есть ли какие-нибудь побочные действия, если постоянно открывать и закрывать штамп?

Freddy

А нет, я ошибся - теперь долго происходит закрытие штампа stamp.ksCloseStamp().

Видимо меняется шило на мыло. Если один раз открыть штамп зависаем на переключении ячеек. Если каждый раз открывать и закрывать штамп зависаем на закрытии штампа.

Вопрос исчерпан. Хотя, если у кого-то будут свои соображения по-этому поводу, буду рад выслушать. Спасибо!

Зависаний нет, просто есть перерисовка окна, уберёте её и все будет летать.

Freddy

Подскажите, пожалуйста, что за перерисовка? у меня вроде ничего не включено. Обновление происходит вот так:

            if (stamp.ksColumnNumber(cell) == 0)
                return 0;
            ksTextItemParam item = (ksTextItemParam)KompasAddin.Kompas.GetParamStruct((short)StructType2DEnum.ko_TextItemParam);
            item.Init();
            ksTextItemFont itemFont = (ksTextItemFont)item.GetItemFont();
            itemFont.SetBitVectorValue(KAPITypes.ldefin2d.NEW_LINE, true);
            item.SetItemFont(itemFont);
            item.s = value ?? String.Empty;
            return stamp.ksTextLine(item);

То есть, Вы хотите сказать, что окно документа не перерисовывается, после заполнения ячейки, тем более Вам ничего для этого делать не надо.   

Freddy

Да вроде ничего не перерисовывается... подвисает компас на момент обновления, а потом сразу все появляется.
Хотел ускорить процедуру, довольно долговато делает обновление. Хотел посоветоваться.

Запретите перерисовку окна документа, пока не поменяете всё, через WinApi или IDocumentFrameNotify - интерфейс событий для окна документа.

Freddy

Ага, спасибо! попробую сделать