Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.12.2010, 15:45   #21
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

М-м-м, есть несколько замечаний:
  • необходимо запоминать кол-во удаленных строк, что бы в конце изменить размер стрингрида;
  • если '0' в последней строке, что туда записывается?
  • происходит многократный перенос одних и тех же строк
Sibedir вне форума Ответить с цитированием
Старый 28.12.2010, 17:35   #22
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

вот что нашел, думаю подходит идеално
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Button1: TButton;
    Button2: TButton;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
type
  TStringGridHack = class(TStringGrid)
  protected
    procedure DeleteRow(ARow: Longint); reintroduce;
    procedure InsertRow(ARow: Longint);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TStringGridHack.DeleteRow(ARow: Longint);
var
  GemRow: Integer;
begin
  GemRow := Row;
  if RowCount > FixedRows + 1 then
    inherited DeleteRow(ARow)
  else
    Rows[ARow].Clear;
  if GemRow < RowCount then Row := GemRow;
end;

procedure TStringGridHack.InsertRow(ARow: Longint);
var
  GemRow: Integer;
begin
  GemRow := Row;
  while ARow < FixedRows do Inc(ARow);
  RowCount := RowCount + 1;
  MoveRow(RowCount - 1, ARow);
  Row := GemRow;
  Rows[Row].Clear;
end;

procedure TForm1.Button2Click(Sender: TObject);
 var
 i: integer;
begin
  for i := Stringgrid1.RowCount -1 downto 0 do
    if StringGrid1.Cells[1, i] = '0' then
      TStringGridHack(StringGrid1).DeleteRow(i);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  TStringGridHack(StringGrid1).InsertRow(0); //применение не придумал
end;

end.
VirusN13

Последний раз редактировалось ArtGrek; 28.12.2010 в 17:39.
ArtGrek вне форума Ответить с цитированием
Старый 29.12.2010, 05:11   #23
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Цитата:
думаю подходит идеално
Думаю, все зависит от конкретного случаю.
Если удалять нужно по 1 строке, то да
Если, как в случае ТС, сразу перебрать весь стринград с более 9000 строк, то см. пост #16.

Последний раз редактировалось Sibedir; 29.12.2010 в 05:16.
Sibedir вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение строк Dasharnb777 Общие вопросы .NET 5 22.09.2010 20:46
firebird сравнение belii0987 БД в Delphi 6 17.09.2010 14:58
сравнение slavsmo Microsoft Office Excel 2 05.04.2010 17:51
stringgrid,сравнение двух столбцов на совпадения и не совпадения betirsolt БД в Delphi 7 19.01.2010 15:09
Сравнение данных White БД в Delphi 1 09.09.2008 22:32