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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.11.2008, 04:14   #1
Xeon332
Скоро сессия...
Форумчанин
 
Регистрация: 03.01.2008
Сообщений: 224
По умолчанию Delphi. Удаление строки.

есть StringGrid. к примеру есть в нём записи на 30 строк.
код для кнопки "Удаления" написан. Но! при выделении нужной ячейки и нажатием на "Удалить", удаляются все ячейки, находящиеся нижу выделенной и выше. почему удаляются все? не пойму? (первая строка фиксированная, с наименованиями столбцов. всего 5 столбцов.)
вот этот код. посмотрите что не так:

Код:
procedure TForm1.Button4Click(Sender: TObject);
var i,Ydalit:integer;
begin
    Ydalit:=MessageDlg ('Вы уверены что хотите удалить запись?',mtwarning,[mbYes,mbNo],0);
    if (YdalZap=mrYes) then
       begin
         for i:=Str to Str-1 do
           begin
             StringGrid1.Cells [0,i]:=StringGrid1.Cells[0,i+1];
             StringGrid1.Cells [1,i]:=StringGrid1.Cells[1,i+1];
           end;

         Str:=Str-1;
         if Str<0 then  //Кол-во строк не должно быть отрицательным
          Str:=1;

       Str:=Str-1;
       if Str<0 then  // Номер строки не должен быть отрицательным
         Str:=0;

       StringGrid1.RowCount:=Str;
end;
Xeon332 вне форума Ответить с цитированием
Старый 06.11.2008, 09:45   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Xeon332,
прежде всего, код некрасивый. Работа идёт с переменной Str... Глобальная? Что в ней при входе в процедуру?

и второе, похоже, Ваш цикл ни разу не выполняется. Потому как обратный (с шагом -1) цикл записывается в Pascal/Delphi так:
Код:
 for i:=Str downto Str-1 do
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.11.2008, 14:42   #3
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Посмотрите здесь http://www.programmersforum.ru/showthread.php?t=23863
_Dmitry вне форума Ответить с цитированием
Старый 06.11.2008, 17:15   #4
Xeon332
Скоро сессия...
Форумчанин
 
Регистрация: 03.01.2008
Сообщений: 224
По умолчанию

благодарю за ссылку. очень помогло!

посмотрите ещё плиз код для кнопки "Поиск по фамилии" (1 столбец):

Код:
procedure TForm3.Button1Click(Sender: TObject);
var
  I: Integer;
 GRect: TGridRect;
 begin
  for i := 1 to Str-1 do
    if Edit1.Text=Form1.StringGrid1.Cells[0,i] then
     begin
      GRect.Left:=0;
      GRect.Top:=i;
      GRect.Right:=1;
      //GRect.Bottom=i;
      Form1.StringGrid1.Selection:=GRect;
      Form1.StringGrid1.LeftCol:=0;
      Form1.StringGrid1.TopRow:=i;
     end;
close;
end;
как мне кажется всё правильно, но не работает. т.е. не ищет как положено...
Xeon332 вне форума Ответить с цитированием
Старый 07.11.2008, 14:04   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
не ищет как положено...
А ты учитываешь регистр букв и то что строка поиска должна полностью совпадать с хотя бы одной строкой в ячейках?
Попробуй так:
Код:
 if pos(AnsiUpperCase(Edit1.Text),ansiuppercase(Form1.StringGrid1.Cells[0,i])<>0 then
И кстати может Str-1 все портит?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.11.2008, 04:26   #6
Xeon332
Скоро сессия...
Форумчанин
 
Регистрация: 03.01.2008
Сообщений: 224
По умолчанию

спасибо! а если делать сортировку по 1 столбцу, то код поиска в этом поможет? и как её легче реализовать?
Xeon332 вне форума Ответить с цитированием
Старый 08.11.2008, 04:42   #7
Xeon332
Скоро сессия...
Форумчанин
 
Регистрация: 03.01.2008
Сообщений: 224
По умолчанию

Посмотрите пожалуйста моё "творение"))) что в нём не так? помогите исправить, плиз...
Вложения
Тип файла: rar telef.rar (221.9 Кб, 34 просмотров)
Xeon332 вне форума Ответить с цитированием
Старый 08.11.2008, 14:16   #8
Xeon332
Скоро сессия...
Форумчанин
 
Регистрация: 03.01.2008
Сообщений: 224
По умолчанию

вот такой код(отрывок)

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    StringGrid1: TStringGrid;
    Button5: TButton;
    Button6: TButton;
    procedure StringGrid1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);


  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Edit1:TEdit;
  Edit2:TEdit;
  Edit3:TEdit;
  Edit4:Tedit;
  Edit5:TEdit;
  Form1:TForm1;
  ARow,ACol: integer;
  State: TGridDrawState;
  Str:integer=1;
  NumStrSel:integer;
implementation

uses Unit3;

{$R *.dfm}



procedure TForm1.Button1Click(Sender: TObject);
begin
  Form3.Show;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  close;
end;
// добавление новой строки
procedure TForm1.Button3Click(Sender: TObject);
begin
  StringGrid1.RowCount:=StringGrid1.RowCount+1;
  StringGrid1.Row:=StringGrid1.RowCount-1;
  StringGrid1.Col:=1;
  StringGrid1.SetFocus;
  Form2.Show;
  end;

//удаление записи
procedure TForm1.Button4Click(Sender: TObject);
  var YdalZap, i,KolStr,NumStr:integer;
begin
    YdalZap:=MessageDlg ('Вы уверены что хотите удалить запись?',mtwarning,[mbYes,mbNo],0);
    if (YdalZap=mrYes) then
       begin
       for i:=NumStrSel downto KolStr-1 do
           begin
             StringGrid1.Cells [0,i]:=StringGrid1.Cells[0,i+1];
             StringGrid1.Cells [1,i]:=StringGrid1.Cells[1,i+1];
             StringGrid1.Cells [2,i]:=StringGrid1.Cells[2,i+1];
             StringGrid1.Cells [3,i]:=StringGrid1.Cells[3,i+1];
             StringGrid1.Cells [4,i]:=StringGrid1.Cells[4,i+1];
          end;

         KolStr:=KolStr-1;
         if KolStr<0 then  // Кол-во строк не должно быть отрецательным
          KolStr:=1;

       NumStr:=NumStr-1;
       if NumStr<0 then  // Номер строки не должен быть отрицательным
         NumStr:=0;

       StringGrid1.RowCount:=Str-1;
       end;          

end;

// сохранение и считывание из файла/в файл
procedure TForm1.Button5Click(Sender: TObject);
  var f:textfile;
      x,y:integer;
begin
  assignfile (f,'Base.txt');
  rewrite (f);
  writeln (f,Form1.StringGrid1.ColCount);
  writeln (f,Form1.StringGrid1.RowCount);

    For X:=0 to form1.stringgrid1.colcount-1 do
      For y:=0 to Form1.Stringgrid1.rowcount-1 do
        writeln (F, Form1.Stringgrid1.cells[x,y]);

  writeln (f,Str);
  writeln (f,Str-1);
  closefile (f);
end;


procedure TForm1.Button6Click(Sender: TObject);
var f:textfile;
temp,x,y:integer;
tempstr:string;
begin
  assignfile (f,'Base.txt');
  Reset (f);
  Readln (f,temp);
  StringGrid1.ColCount:=Temp;
  Readln (f,temp);
  StringGrid1.RowCount:=Temp;

    For X:=0 to StringGrid1.ColCount-1 do
      For y:=0 to StringGrid1.RowCount-1 do
        begin
          readln (F, TempStr);
          StringGrid1.Cells[x,y]:=TempStr;
        end;

  ReadLn (f,Str);
  Readln (f,Str);
  closefile (f);

end;

procedure TForm1.StringGrid1Click(Sender: TObject);
begin
  StringGrid1.Cells[0,0]:='Фамилия';
  StringGrid1.Cells[1,0]:='Имя';
  StringGrid1.Cells[2,0]:='Отчество';
  StringGrid1.Cells[3,0]:='Телефон';
  StringGrid1.Cells[4,0]:='Адрес';
end;
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
  var CanSelect: Boolean);
begin
NumStrSel:=ARow;
end;

end.
посмотрите пжлста... что не так? не работает УДАЛЕНИЕ и ПОИСК. где хоть ошибка подскажите...
Xeon332 вне форума Ответить с цитированием
Старый 08.11.2008, 14:58   #9
slips
Форумчанин
 
Аватар для slips
 
Регистрация: 28.10.2008
Сообщений: 350
По умолчанию

Цикл поменяй для удаления
for i:=NumStrSel to StringGrid1.RowCount-1 do
begin
.......
end;
slips вне форума Ответить с цитированием
Старый 08.11.2008, 15:10   #10
Xeon332
Скоро сессия...
Форумчанин
 
Регистрация: 03.01.2008
Сообщений: 224
По умолчанию

Цитата:
for i:=NumStrSel to StringGrid1.RowCount-1 do
такой вариант уже пробовал... всё равно - всё подряд удаляет... кроме фиксированной строки...
Xeon332 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вставка/удаление из строки. t3ns0r Общие вопросы C/C++ 3 11.10.2008 17:58
Удаление конкретной строки Memo JakSon Общие вопросы Delphi 6 03.03.2008 09:35
Удаление строки из файла Македонский Общие вопросы Delphi 5 29.08.2007 15:40
Полное удаление строки Albenous Общие вопросы Delphi 2 15.01.2007 21:54