Форум: "Основная";
Текущий архив: 2003.02.24;
Скачать: [xml.tar.bz2];
Внизстереть строку в 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c