5 / 5 / 2
Регистрация: 21.03.2010
Сообщений: 46
|
|
1 | |
удаление и вставка строки в StringGid в нужном месте02.05.2010, 17:17. Показов 3173. Ответов 3
Метки нет Все метки)
(
доброго времени суток!!!
Помогите разобраться с удалением и вставкой в StringGid. Необходимо чтобы можно было вставить и удалить строку в нужном месте. вот мой вариант удаления строки: Код
procedure TForm1.Button_delClick(Sender: TObject); var i,j: Integer; begin j:=StringGrid1.Row; // строка с выделением StringGrid1.Rows[j].Clear; for i:=j to StringGrid1.RowCount-2 do StringGrid1.Rows[i].Assign(StringGrid1.Rows[i+1]); StringGrid1.RowCount:=StringGrid1.RowCount-1; end; Удаление в нужном месте получилось, вот только если начинаешь удалять все записи по очереди и дело подходит к фиксированной строке с наименованием столбцов, фиксированную строку удаляет тоже. подскажите ка сделать что бы не удалялась фиксированная строка. А с вставкой строки в нужном месте вообще в голову нечего кроме стандартной вставки не приходит. Господа профессиональные программисты помогите новичку в этом поприще. прилагаю исходник
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
|
|
02.05.2010, 17:17 | |
Ответы с готовыми решениями:
3
Создание классов. Нужный метод в нужном месте Перенос картинок по форме, а затем закрепление их в нужном месте Webbrowser найти текст в нужном месте и скопировать его Вставка строки/столбца в таблицу в произвольном месте |
5 / 5 / 2
Регистрация: 21.03.2010
Сообщений: 46
|
|
02.05.2010, 20:12 [ТС] | 2 |
с удалением проблему решил
Код
procedure TForm1.Button_delClick(Sender: TObject); var i,j: Integer; begin j:=StringGrid1.Row; if (j = 1) and (StringGrid1.RowCount <= 2) then begin with StringGrid1 do for i:= 0 to ColCount - 1 do Cells[i, j]:= ''; exit; // не удаляем последнюю строку чтобы не потерять фиксированной end; StringGrid1.Rows[j].Clear; for i:=j to StringGrid1.RowCount-2 do StringGrid1.Rows[i].Assign(StringGrid1.Rows[i+1]); StringGrid1.RowCount:=StringGrid1.RowCount-1; end; ![]() вот только вообще придумать пока ни чего не могу ![]() может кто подкинет идею? Добавлено через 1 час 10 минут мне предложили такой вариант: Код
procedure SGInsertRow(SG: TStringGrid; NewRow: Integer); var i: Integer; begin if NewRow < 0 then NewRow := 0; // либо 1, задайте нужное вам поведение with SG do begin RowCount := RowCount + 1; if NewRow < RowCount - 1 then begin for i := RowCount - 1 downto NewRow + 1 do Rows[i].Assign(Rows[i - 1]); end; Rows[NewRow].Clear; end; end; procedure TForm1.Button_insClick(Sender: TObject); begin SGInsertRow(StringGrid1,2); end; только он вставляет во вторую строку, а мне надо над или под выделенной строкой может у кого есть варианты ![]()
0
|
5 / 5 / 2
Регистрация: 21.03.2010
Сообщений: 46
|
|
02.05.2010, 21:07 [ТС] | 3 |
вот переправленный вариант:
Код: Код
procedure SGInsertRow(SG: TStringGrid; NewRow: Integer); var i: Integer; begin if NewRow < 0 then NewRow := 0; // либо 1, задайте нужное вам поведение with SG do begin RowCount := RowCount + 1; if NewRow < RowCount - 1 then begin for i := RowCount - 1 downto NewRow + 1 do Rows[i].Assign(Rows[i - 1]); end; Rows[NewRow].Clear; end; end; procedure TForm1.Button_insClick(Sender: TObject); begin SGInsertRow(StringGrid1,StringGrid1.Row); //Вставляет перед выделенной ячейкой // SGInsertRow(StringGrid1,StringGrid1.Row + 1); //Вставляет после выделенной ячейки end; ![]() ![]() вот до кучи исходник может кому нибудь поможет тут загрузка/сохранение,вставка/удаление
1
|
13082 / 5867 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
|
||||||||||||||||
03.05.2010, 14:06 | 4 | |||||||||||||||
Я в своё время изучал эту проблему. Написал модуль на основе идей, почерпнутых в инете. В TStringGrid нет публичных методов для удаления/вставки/переноса строк и столбцов. Но есть методы переноса в секции Protected. Вот на их основе и реализуется всё остальное. Т. е. задача - представить методы переноса в секции Public и реализовать в этом же разделе все необходимые действия.
Модуль кроме вставки/удаления/пермещения строк и столбцов, содержит процедуру вырванивания ширины столбцов по их содержимому.
![]() Представленный код очистки устраняет этот баг. --- Демонстрационный проект с использованием этого модуля:
1
|
03.05.2010, 14:06 | |
Помогаю со студенческими работами здесь
4
Разместить контент в нужном месте Прекращение программы в нужном месте
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |