C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Быстрая очистка StringGrid???
Sashay
Отправлено: 11.02.2004, 10:01


Не зарегистрирован







Уважаемые господа,

Помогите, пожалуйста, со следующем:

Есть компонент StringGrid (4096x48). Использую его для графического вывода двоичных диаграмм. Т.е. каждая ячейка имеет свой графический объект. Проблема в том, что когда я его очищаю (последовательно каждую ячейку), этот процесс длится слишком долго. Есть ли возможность очистить StringGrid мгновенно (не по ячейкам)?

С уважением,
Александр
trigger
Отправлено: 11.02.2004, 11:57


Не зарегистрирован







может что-то типа такого:

for(int x = 0; xRowCount;x++)
StringGrid1->Rows[x]->Clear();

не мгновенно конечно. но все же не каждую ячейку ...
Valdemar
Отправлено: 11.02.2004, 13:52


Мастер участка

Группа: Участник
Сообщений: 433



Можно, конечно, сделать как предложил trigger, но в этом случае если с ячейками таблицы были связаны объекты, то эти объекты не будут удалены при очистке таблицы, а останутся в памяти и доступа к ним не будет (если нет других указателей на них). А памяти они занимать будут не мало (4096x48хразмер объекта).
Sashay
Отправлено: 11.02.2004, 14:40


Не зарегистрирован







Спасибо за ответы,
К сожалению, очистка по рядам особой скорости не прибавила, хотя ускорение заметно.
Есть ли какие еще мнения по этому вопросу?

Заранее спасибо,
Александр
trigger
Отправлено: 11.02.2004, 15:18


Не зарегистрирован







если данные ячеек — простые символы, то может можно использовать DBGrid + ClientDataSet
и очищать собственно сам датасет.
типа
ClientDataSet->EmptyDataSet();
у DBGrid'а и StringGrid'а много похожих методов и свойств, так что возможно переход будет не сложным и переписывать придется немного
(хотя врядли:)
Admin
Отправлено: 11.02.2004, 16:37


Владимир

Группа: Администратор
Сообщений: 1190



Может проще его не очищать,
а динамически создавать и удалять,
перед удалением — делать невидимым.

CODE


#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
TStringGrid* SG;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
       : TForm(Owner)
{
}
//---------------------------------------------------------------------------
// создаем
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
   SG = new TStringGrid(Form1);
   SG->Parent = Form1;
}
//---------------------------------------------------------------------------
// удаляем
void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
   SG->Visible = false;
   delete SG;
}
//---------------------------------------------------------------------------

Вернуться в Вопросы программирования в C++Builder