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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2008, 15:22   #1
AlexII
 
Регистрация: 17.05.2008
Сообщений: 4
По умолчанию Помогите дописать мои код поиска!

Я в Delphi начинающий и смастерил вот этот код поиска, он однако еще не может "искать далее". Кто поможет доделать код?

Код:
procedure TForm1.Button1Click(Sender: TObject);
var s1: String;
    i,j,u: Integer;
begin
s1:=Edit4.Text;
u:=Length(s1);
    if u>=2 then
    begin
          with StringGrid1 do
          for i:=0 to ColCount-2 do
              for j:=1 to RowCount-1 do
              if Copy((Cells[i,j]),1,u)=s1 then
              begin
              Edit4.Color:=clWindow;
              StringGrid1.Selection:=TGridRect(Rect(i,j,i,j));
              Exit;
              end else
                  begin
                  Edit4.Color:=clYellow;
                  Edit4.SetFocus;
                  end;
    end else
        begin
        Edit4.Color:=clYellow;
        Edit4.SetFocus;
        end;
end;
AlexII вне форума Ответить с цитированием
Старый 17.05.2008, 16:01   #2
Спартак
Пользователь
 
Регистрация: 01.02.2008
Сообщений: 44
По умолчанию

if Copy((Cells[i,j]),1,u)=s1 then
begin
Edit4.Color:=clWindow;
StringGrid1.Selection:=TGridRect(Re ct(i,j,i,j));
Exit;
end
Получается, что если такой элемент найден, то Exit выполняет выход из этой функции. Поэтому поиск дальше не идет
Спартак вне форума Ответить с цитированием
Старый 17.05.2008, 16:42   #3
AlexII
 
Регистрация: 17.05.2008
Сообщений: 4
По умолчанию

Но с Break он тоже не идет.
AlexII вне форума Ответить с цитированием
Старый 17.05.2008, 18:38   #4
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Две кнопки - "найти" и "продолжить поиск" вызывают одну процедуру, которая ищет или с начала таблицы или продолжает поиск с последней позиции.

Код:

{
 В свойствах класса
}
    FCurCol, FCurRow : integer;
    FFindStr : String;

procedure TForm1.findNext(isBegin : boolean);

 function nextCell:boolean;
 begin
    result := true;
    inc(FCurCol);
    if FCurCol > StringGrid1.ColCount-2 then begin
       FCurCol := 0;
       inc(FCurRow);
       if FCurRow > StringGrid1.RowCount-1 then result := false;
    end;
 end;

var u:integer;
begin
   if isBegin then begin
      // Начало поиска
      FCurCol := 0; FCurRow := 0;
      FFindStr := Edit4.Text;
   end else begin
      if not nextCell then begin
         ShowMessage('not found');
         exit;
      end;
   end;

   u := length(FFindStr);
   while true do begin
      if Copy((StringGrid1.Cells[FCurCol, FCurRow]),1,u)=FFindStr then begin
         Edit4.Color:=clWindow;
         StringGrid1.Selection:=TGridRect(Rect(FCurCol, FCurRow,FCurCol, FCurRow));
         Exit;
      end;
      if not nextCell then begin
         ShowMessage('not found');
         break;
      end;
   end;
end;

procedure TForm1.ButtonFindClick(Sender: TObject);
begin
   findNext(true);
end;

procedure TForm1.ButtonFindNextClick(Sender: TObject);
begin
   findNext(false);
end;
alexBlack вне форума Ответить с цитированием
Старый 17.05.2008, 19:58   #5
AlexII
 
Регистрация: 17.05.2008
Сообщений: 4
По умолчанию

Что то показывает тут ошибку

Код:
procedure TForm1.Button2Click(Sender: TObject);
begin
findNext(true);
end;
Inkompatible Typen: "TStringGrid" and "Boolean"
AlexII вне форума Ответить с цитированием
Старый 17.05.2008, 20:07   #6
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

А у Вас объявлена в TForm1 ? :

procedure findNext(isBegin : boolean);

Покажите весь код. Что-то не так объявлено.
alexBlack вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите дописать программу starry_night Помощь студентам 0 04.06.2008 19:24
Помогите дописать ShnapS Паскаль, Turbo Pascal, PascalABC.NET 4 28.05.2008 21:08
Помогите дописать программу. ShnapS Паскаль, Turbo Pascal, PascalABC.NET 5 17.05.2008 19:50
Помогите дописать пояснение RECREATOR Помощь студентам 4 10.12.2007 09:07
Помогите дописать Klyan Общие вопросы C/C++ 8 22.06.2007 01:55