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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.11.2008, 22:16   #1
LobsterOK
Пользователь
 
Аватар для LobsterOK
 
Регистрация: 18.09.2008
Сообщений: 12
По умолчанию Поиск в StringGrid (другие темы не помогли :( )

Создал эту тему от безвыходности.
Нужна прога для курсача, должна работать на StringGrid - телефонный справочник... ну типо того....

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

Вот есть такая прога в аттаче.


В ней есть вот такой код отвечающий за поиск.... но он не работает , я не заню почему и как его заставить работать.... хеееелп!! плиииз

Код:
  for i:=0 to maindata.RowCount-1 do
  begin
    if sfio.Text = maindata.Cells[0,i] then Begin
      found:=true;
    //Веделение нужной строки после поиска
      GRect.Left:=0;
      GRect.Top:=i;
      GRect.Right:=4; // указывает на то, какую ячейку выделять
      GRect.Bottom:=i;
      maindata.Selection:=GRect;
      maindata.LeftCol:=0;  // указывает номер строки выделения
      maindata.TopRow:=i;
      End;
    End;
  if found<>true then ShowMessage('Not Found!');
Изображения
Тип файла: jpg prog.JPG (22.5 Кб, 183 просмотров)
LobsterOK вне форума Ответить с цитированием
Старый 24.11.2008, 23:14   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

У меня почему-то работает... И в оригинале тоже. Но я немного переделал:
Код:
maindata.Options:=maindata.Options+[goRowSelect];
 for i:=0 to maindata.RowCount-1 do
  begin
    if maindata.Cells[0,i]=sfio.Text then 
     Begin
      found:=true;
      maindata.Row:=i;
      break;
     End;
    End;
  if found<>true then ShowMessage('Not Found!');
mihali4 вне форума Ответить с цитированием
Старый 24.11.2008, 23:24   #3
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

Семен Семеныч..... В принципе ничего сложного нет если подумать, но не мне судить. Держите продцедура должена выделить 1-ую же строку удовлетворяющею запросу:
Код:
procedure FindInStrGrd(CellX:integer; s:string; strgrd:TStringGrid);
//CellX- номер столбца по которому будет идти поиск
//S- искомое
//strgrd- таблица по которой будет произведен поиск
var
  i:integer;
  r:TGridRect;
begin
  i:=StrGrd.Cols[CellX].IndexOf(S);
  if i<0 then exit;
  r.left:=StrGrd.FixedCols;
  r.right:=StrGrd.ColCount-1;
  r.top:=i;
  r.bottom:=i;
  StrGrd.Selection:=r;
end;
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Старый 25.11.2008, 17:59   #4
LobsterOK
Пользователь
 
Аватар для LobsterOK
 
Регистрация: 18.09.2008
Сообщений: 12
По умолчанию

((
Блин, все равно не могу разобраться...... ну криво работает поиск , отображает тока первого или вообще не отображает, если в списке два...три...... одинаковых имени показывает тока первого, а на остальных забивает...
У меня опускаются руки, похоже не сдам я курсач.... уааа....

Добрые программеры, помогите плиз...

Кому не сложно порыться в чужом коде, гляньте а, плиииззз....


ЗЫ: мож какие другие ошибки найдете, посоветуете что....

ЗЫЫ: на кнопку "сброс" не обращайте внимания, это была кнопка сброса результатов поиска... руки не дошли убрать
Вложения
Тип файла: rar kursach.rar (274.0 Кб, 34 просмотров)
LobsterOK вне форума Ответить с цитированием
Старый 25.11.2008, 18:59   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от LobsterOK Посмотреть сообщение
криво работает поиск, отображает только первого или вообще не отображает, если в списке два...три...... одинаковых имени показывает только первого
Код:
findex: integer; - глобальная

procedure Tmform.searchClick(Sender: TObject);
var found: boolean;
    i: integer;
begin
findex:=findex+1;
maindata.Options:=maindata.Options+[goRowSelect];
 for i:=findex to maindata.RowCount-1 do
  begin
    if maindata.Cells[0,i]=sfio.Text then 
     Begin
      found:=true;
      maindata.Row:=i;
      findex:=i;
      break;
     End;
    End;
  if found<>true then ShowMessage('Not Found!');
end;

procedure Tmform.sfioChange(Sender: TObject);
begin
findex:=-1;
end;

sphoneOnChange присвоить sfioChange
mihali4 вне форума Ответить с цитированием
Старый 29.11.2008, 18:48   #6
LobsterOK
Пользователь
 
Аватар для LobsterOK
 
Регистрация: 18.09.2008
Сообщений: 12
По умолчанию

Огромная благодарность mihali4.

Теперь все работет )) Прога есть, теперь осталось курсач по ней написать.. но это уже совсем другая история
LobsterOK вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ссылки на другие книги Un1kum Microsoft Office Excel 1 10.07.2008 05:12
Хелп по ссылкам на другие листы frozencat Microsoft Office Excel 3 15.11.2007 19:18