Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.05.2010, 17:22
konsul_81 konsul_81 вне форума
Прохожий
 
Регистрация: 19.04.2010
Сообщения: 21
Репутация: 10
Восклицание удаление и вставка строки в StringGid в нужном месте

оброго времени суток!!!

Помогите разобраться с удалением и вставкой в 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;

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

А с вставкой строки в нужном месте вообще в голову нечего кроме стандартной вставки не приходит.
Господа профессиональные программисты помогите новичку в этом поприще.
прилагаю исходник
Вложения
Тип файла: rar Ins_Del_SringGrid.rar (13.0 Кбайт, 4 просмотров)
Ответить с цитированием
  #2  
Старый 02.05.2010, 18:22
Ama Ama вне форума
Активный
 
Регистрация: 15.07.2008
Сообщения: 260
Репутация: 23
По умолчанию

Надо та немного логически пошаманить. Держи исправленную процу:
Код:
 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;
__________________
APPLICATION.TERMINATOR
Ответить с цитированием
  #3  
Старый 02.05.2010, 18:53
konsul_81 konsul_81 вне форума
Прохожий
 
Регистрация: 19.04.2010
Сообщения: 21
Репутация: 10
Вопрос

спасибо огромное!!!
плиз! Если не трудно подкиньте идею
по вставке строки в нужном месте.
Ответить с цитированием
  #4  
Старый 02.05.2010, 20:15
konsul_81 konsul_81 вне форума
Прохожий
 
Регистрация: 19.04.2010
Сообщения: 21
Репутация: 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;

только он вставляет во вторую строку, а мне надо над или под выделенной строкой
может у кого есть варианты

Последний раз редактировалось konsul_81, 02.05.2010 в 21:08.
Ответить с цитированием
  #5  
Старый 02.05.2010, 21:12
konsul_81 konsul_81 вне форума
Прохожий
 
Регистрация: 19.04.2010
Сообщения: 21
Репутация: 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,StringGrid1.Row); //Вставляет перед выделенной ячейкой
 // SGInsertRow(StringGrid1,StringGrid1.Row + 1); //Вставляет после выделенной ячейки
end;
Огромное спасибо Ama!!! за помощь с удалением строк

вот до кучи исходник может кому нибудь поможет
тут загрузка/сохранение,вставка/удаление
Вложения
Тип файла: rar string_grid.rar (9.8 Кбайт, 4 просмотров)
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:49.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025