Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.02.24;
Скачать: CL | DM;

Вниз

стереть строку в StringGrid   Найти похожие ветки 

 
Эд   (2003-02-12 13:47) [0]

Здравствуйте!
Усть ли способ стереть строку в StringGrid чтобы остальные
автоматически сместились вверх как в ListBox?
Спасибо


 
Anatoly Podgoretsky ©   (2003-02-12 13:51) [1]

Способ такой есть


 
Андрей Сенченко ©   (2003-02-12 13:53) [2]

Anatoly Podgoretsky © (12.02.03 13:51)

чтобы АВТОМАТИЧЕСКИ сместились ? В TStrinGrid ??? Анатолий ! Не дайте помереть дурой ! Расскажите !


 
Anatoly Podgoretsky ©   (2003-02-12 13:58) [3]

Очень просто - пишем наследника и уже им пользуемся


 
kkostik ©   (2003-02-12 13:59) [4]

всё ручками писать надо, я по крайней мере больше способа не знаю, можно ещё оди вариант предложить, порождаешь от TStringGrid или выше свой объект и дописываешь отображение только видимых позиций, тода проже будет удалять строки


 
Андрей Сенченко ©   (2003-02-12 14:03) [5]

А то я то идиот целую процедуру писал по сдвижке строк :)
примерно такую :

Begin
// Берем номер удаляемой строки
GridRow := FmWorkDel.CBoxDel.ItemIndex + 1;
// Перемещаем строки наверх
For i := 0 to FmMain.StGridWork.ColCount - 1 do
For j := GridRow to FmMain.StGridWork.RowCount - 1 do
FmMain.StGridWork.cells[i,j] := FmMain.StGridWork.cells[i,j+1];
FmMain.StGridWork.RowCount := FmMain.StGridWork.RowCount - 1;
end;


 
Андрей Сенченко ©   (2003-02-12 14:04) [6]

Anatoly Podgoretsky © (12.02.03 13:58)

Писать наследника :) Нуууу .... это НЕ АВТОМАТИЧЕСКИ - это предполагает работу ручками


 
kkostik ©   (2003-02-12 14:25) [7]

Андрей Сенченко да всё правельно это будет работать, но если в StringGrid занести порядка пяти тысяч записей и удалить первую, то будет работать долго...


 
Anatoly Podgoretsky ©   (2003-02-12 14:28) [8]

А ты можешь предложить другой путь, кроме перемещения, для заполнения дырок в длинных объектах.


 
kkostik ©   (2003-02-12 14:39) [9]

Я это реализовал через заведение у StringGrida свойства которое определяет максимальное количество строк выводимых в грид, остальные строки при перемещении перерисовываются


 
Danilka ©   (2003-02-12 14:41) [10]

можно сделать высоту нулевой :))


 
Андрей Сенченко ©   (2003-02-12 15:00) [11]

kkostik © (12.02.03 14:25)
Anatoly Podgoretsky © (12.02.03 14:28)

Собственно, я не претендовал на окончательность своего варианта, как самого идеального и скоростного. По-хорошему в моем вариате реализован достаточно убогий алгоритм "в лоб", но он себя оправдываент в той задаче, под которую был написан - там сложно представить себе существование больше 20 строк таблицы.

Предложить другой вариант имея на руках только TStringGrid без написания потомков я врядли смогу. Но если бы потребовалось делать скоростной алгоритм - там зависело бы от задачи. Если таблица большая и последовательность расположения строк важна ( нельзя заменить удаляемую строк последней строкой грида ), то скорее всего сделал бы так:
1. Делаем удаляемую строку невидимой ( например нулевой высоты, как было предложено ). Ставим метку на полное удаление - она нужна для п.2 и в случае если данные из таблицы нужно будет куда-то сохранить.
2. Ловим Application.OnIdle ( сорри если неправильный синтаксис, букваря нет под рукой ) - то есть момент, когда приложение "не используется" и потихонечку поднимаем строки.

Если бы и этот вариант не дал ощутимых преимуществ - полез бы пошукать алгоритмы, например сюда.
http://alglib.chat.ru/


 
kkostik ©   (2003-02-12 16:11) [12]

Андрей Сенченко ©
Всё верно, можно и так, но сколько тогда памяти съест StringGrid и сколько эта память будет освобаждаться



Страницы: 1 вся ветка

Текущий архив: 2003.02.24;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.017 c
3-75792
Tornado
2003-02-06 08:33
2003.02.24
Выбор БД


3-75781
ДмирийК
2003-02-06 10:00
2003.02.24
Заполнить дату в MS SQL


1-75880
Anton
2003-02-12 12:43
2003.02.24
SelectedRows


1-76012
vlad40
2003-02-13 12:44
2003.02.24
Delphi and Win CE


3-75760
Andrio
2003-02-05 16:12
2003.02.24
базы данных