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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2010, 18:41   #1
Lenux
 
Регистрация: 20.10.2009
Сообщений: 9
По умолчанию удаление из стрингрида

Добрый день. Помогите пожалуста решить задание:
Поля записи: тип компьютера, год выпуска, цена. Операция: удалить все компьютеры с заданным годом выпуска.

Я зделал программку в которую мы вписываем выше перечисленные записи. Проблема в том что у меня никак не получается удалить из стринггрида все компьютеры с ввёдным годом. После удаление всё нужно сохранить в файл.
Вот мой код, но почему то он удаляет только 2 компьютера с одинаковым годом.


procedure TForm1.Button2Click(Sender: TObject);
var d,i,a:integer;

begin
d:=StrToInt(InputBox('Hello','Enter computer year to delete',' ')); //вводим год
a:=0;
for i := 0 to StringGrid1.RowCount+1 do
begin
if StringGrid1.Cells[2,i] <> IntToStr(d) then
begin
stringGrid1.Cells[0,a]:=IntToStr(a);
stringGrid1.Cells[1,a]:=stringGrid1.Cells[1,i];
stringGrid1.Cells[2,a]:=stringGrid1.Cells[2,i];
stringGrid1.Cells[3,a]:=stringGrid1.Cells[3,i];
inc(a);

Помогите пожалуста, буду очень благодарен.
Lenux вне форума Ответить с цитированием
Старый 13.03.2010, 19:03   #2
Chudo4258
Форумчанин
 
Аватар для Chudo4258
 
Регистрация: 19.02.2009
Сообщений: 622
По умолчанию

может как-то так?
Код:
procedure TForm1.Button2Click(Sender: TObject);
var d,i,j,a:integer;
begin
d:=InputBox('Hello','Enter computer year to delete',' '); //вводим год
a:=0;
for i := 0 to StringGrid1.RowCount+1 do
if StringGrid1.Cells[2,i] <> d then
 begin
  for j:=i to StringGrid1.RowCount do
    begin
      stringGrid1.Cells[0,j]:=stringGrid1.Cells[0,j+1];
      stringGrid1.Cells[1,j]:=stringGrid1.Cells[1,j+1];
      stringGrid1.Cells[2,j]:=stringGrid1.Cells[2,j+1];
      stringGrid1.Cells[3,j]:=stringGrid1.Cells[3,j+1];
   end;
  StringGrid1.RowCount:=StringGrid1.RowCount-1;
 end;
end;
Жми на весы!!!

Последний раз редактировалось Chudo4258; 13.03.2010 в 19:21.
Chudo4258 вне форума Ответить с цитированием
Старый 13.03.2010, 19:13   #3
Lenux
 
Регистрация: 20.10.2009
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Chudo4258 Посмотреть сообщение
может как-то так?
Код:
procedure TForm1.Button2Click(Sender: TObject);
var d,i,j,a:integer;
begin
d:=StrToInt(InputBox('Hello','Enter computer year to delete',' ')); //вводим год
a:=0;
for i := 0 to StringGrid1.RowCount+1 do
if StringGrid1.Cells[2,i] <> IntToStr(d) then
 begin
  for j:=i to StringGrid1.RowCount do
    begin
      stringGrid1.Cells[0,j]:=stringGrid1.Cells[0,j+1];
      stringGrid1.Cells[1,j]:=stringGrid1.Cells[1,j+1];
      stringGrid1.Cells[2,j]:=stringGrid1.Cells[2,j+1];
      stringGrid1.Cells[3,j]:=stringGrid1.Cells[3,j+1];
   end;
  StringGrid1.RowCount:=StringGrid1.RowCount-1;
 end;
end;
так она всё удаляет кроме первого.
Lenux вне форума Ответить с цитированием
Старый 13.03.2010, 19:20   #4
Chudo4258
Форумчанин
 
Аватар для Chudo4258
 
Регистрация: 19.02.2009
Сообщений: 622
По умолчанию

в каком смысле ВСЕ?? Вообще всю таблицу удаляет???
Жми на весы!!!
Chudo4258 вне форума Ответить с цитированием
Старый 13.03.2010, 19:27   #5
Lenux
 
Регистрация: 20.10.2009
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Chudo4258 Посмотреть сообщение
в каком смысле ВСЕ?? Вообще всю таблицу удаляет???
да, оставляет только один элемент. Тот код что я написал он как бы работает, но если я к примеру введу 3 значени 2010, и напишу в инпутбоксе чтоб он удалил 2010, то он удалит только 2 значения.
Lenux вне форума Ответить с цитированием
Старый 13.03.2010, 19:29   #6
Chudo4258
Форумчанин
 
Аватар для Chudo4258
 
Регистрация: 19.02.2009
Сообщений: 622
По умолчанию

Цитата:
Сообщение от Lenux Посмотреть сообщение
да, оставляет только один элемент. Тот код что я написал он как бы работает, но если я к примеру введу 3 значени 2010, и напишу в инпутбоксе чтоб он удалил 2010, то он удалит только 2 значения.
Скинь весь код, посмотрим...
Жми на весы!!!
Chudo4258 вне форума Ответить с цитированием
Старый 13.03.2010, 19:31   #7
Lenux
 
Регистрация: 20.10.2009
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Chudo4258 Посмотреть сообщение
Скинь весь код, посмотрим...
Цитата:
Сообщение от Chudo4258 Посмотреть сообщение
type TComp=record
name:string[10];
Year:integer;
Cost:extended;
end;

var F:file of TComp;

procedure TForm1.FormCreate(Sender: TObject);
var comp:TComp;
i:integer;
begin
AssignFile(F,'info.txt');
try
Reset(F);
except on EinoutError do
Rewrite(F);
end;
with StringGrid1 do
begin
RowCount:=FileSize(F)+1;
for i:=1 to FileSize(F) do
begin
read(F,comp);
Cells[1,i]:=comp.name ;
Cells[2,i]:=IntToStr(comp.year) ;
Cells[3,i]:=Floattostr(comp.cost);
end;
end;

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
CloseFile(F);
end;

procedure TForm1.Button1Click(Sender: TObject); //кнопка при нажатии которой данные добавляются в стринггрид и сохраняются в файл
var comp:TComp;
begin
comp.name:=edit1.Text;
comp.year:=StrToInt(edit2.Text);
comp.cost:=strtofloat(edit3.Text);
Seek (F,FileSize(F));
Write(F,comp);

with StringGrid1 do
begin
Rowcount:=FileSize(F)+1;
Cells[1,FileSize(F)]:=comp.name;
Cells[2,FileSize(F)]:=IntToStr(comp.year);
Cells[3,FileSize(F)]:=floattostr(comp.Cost);
end;
end;
procedure TForm1.Button2Click(Sender: TObject); // конпка при нажатии на которую надо удалить из стринггрида и файла год компьютера
var d,i,a:integer;
FTemp: file of TComp;
begin
d:=StrToInt(InputBox('Hello','Enter computer year to delete',' '));
a:=0;
for i:=0 to StringGrid1.RowCount+1 do
begin
if StringGrid1.Cells[2,i] <> IntToStr(d) then
begin
stringGrid1.Cells[0,a]:=IntToStr(a);
stringGrid1.Cells[1,a]:=stringGrid1.Cells[1,i];
stringGrid1.Cells[2,a]:=stringGrid1.Cells[2,i];
stringGrid1.Cells[3,a]:=stringGrid1.Cells[3,i];
inc(a);

end;
end;

end;
end.
тут полностью вся программа.

Последний раз редактировалось Lenux; 13.03.2010 в 19:36.
Lenux вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление формы Veiron Общие вопросы Delphi 6 26.05.2012 14:53
Удаление RX artemavd БД в Delphi 1 14.06.2009 19:24
Удаление строки Minton87 Общие вопросы Delphi 4 07.05.2009 02:32
удаление строк Dime_x Microsoft Office Excel 2 07.10.2008 13:38