Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблемы с TOleContainer

7.4K
30 июля 2006 года
Triaffer
49 / / 30.07.2006
Как известно каждую строчку программы нужно отвоевывать )))
Так вот веду войну с TOleContainer.
Простой пример: есть форма, на нем 3 контейнера Оле и две кнопки. По нажатию на первую контейнера сохраняются в файлы и уничтожаются. По нажатию на вторую - создаются три контейнера и загружаются из файла.
Вот код:
Код:
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
TOleContainer *mas  [2];
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
// Сохраняем и удаляем
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   Form1->OleContainer1->SaveToFile("1.doc");
   Form1->OleContainer2->SaveToFile("2.doc");
   Form1->OleContainer3->SaveToFile("3.doc");
   Form1->OleContainer1->Free();
   Form1->OleContainer2->Free();
   Form1->OleContainer3->Free();
}
//---------------------------------------------------------------------------
// Создаем и загружаем
void __fastcall TForm1::Button2Click(TObject *Sender)
{
   for (int i=0; i<3; i++) {
         mas = new TOleContainer(Form1);
         mas->DoubleBuffered = True;
         mas->Parent         = Form1;
         mas->Left           = 150*(i+1);
         mas->Top            = 50;
         mas->Visible        = True;
         mas->AllowActiveDoc = False;
         mas->AllowInPlace   = False;
         mas->BorderStyle    = bsNone;
         mas->CreateObject("Word.Document.8",True);
         mas->LoadFromFile(IntToStr(i+1)+".doc");
        }

}
//---------------------------------------------------------------------------

Проблема вот в чем: процесс восстановления из файлов занимает очень много времени.
Как можно убрать эти жуткие тормоза?
15K
31 июля 2006 года
casual
11 / / 18.03.2006
возможно, проблема с памятью:
*mas [2];

а используется три ячейки, как я понял
7.4K
01 августа 2006 года
Triaffer
49 / / 30.07.2006
Цитата:
возможно, проблема с памятью:
*mas [2];
а используется три ячейки, как я понял



:)
В С массивы нумеруются с 0

ПС: учи язык ;)

1
01 августа 2006 года
kot_
7.3K / / 20.01.2000
[QUOTE=Triaffer]:)
В С массивы нумеруются с 0

ПС: учи язык ;)[/QUOTE]
Аутотренингом занимаешься? :)
Нумеруются то они с 0 - но выделяешь память только под 2 элемента.
7.4K
02 августа 2006 года
Triaffer
49 / / 30.07.2006
Отчего же только под два? Под все три!
Во-первых цикл for (int i=0; i<3; i++) крутится три раза при i=0, =1, =2
Во вторых кто нить исходники запускал? Там все работает ок.
Проблема не в этом!!
Проблема в тормозах самого OLEContainer - как от них избавиться?
1
02 августа 2006 года
kot_
7.3K / / 20.01.2000
[QUOTE=Triaffer]Отчего же только под два? Под все три!
Во-первых цикл for (int i=0; i<3; i++) крутится три раза при i=0, =1, =2
Во вторых кто нить исходники запускал? Там все работает ок.
Проблема не в этом!!
[/QUOTE]
Речь идет о вот этом фрагменте кода:
 
Код:
TOleContainer *mas  [2];

здесь создается массив указателей размером в два элемента. Так как логика этого непонятна - то естественно появился вопрос То что цикл крутится три раза никто не сомневался.

[QUOTE=Triaffer]

Проблема в тормозах самого OLEContainer - как от них избавиться?[/QUOTE]
Не использовать OLEContainer :)
Но а если серьезно - определи в какой именно операции происходит собственно торможение системы. Может быть указанная ошибка здесь и не причем - а может быть даже очень.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог