Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

search [D7, WinXP]


ANDREI ©   (2004-12-01 16:15:00) 

Еще раз привет мастерам! Наболел еще один вопрос в моей программе.
Есть stringgrid и edit при наборе в edite в stringgride должна выделяться строка содержащая в начале введенные символы без учета первого пробела(если он есть) и регистра (короче поиск).
Делаю я это так :

procedure TForm1.Edit8KeyUp(Sender: TObject; var Key: Word;
 Shift: TShiftState);
 var
 i,e: integer;
 s,g: string;
 
 begin
 if edit8.Text='' then exit else begin
i:=0;
e:=0;
i:=edit8.GetTextLen;
s:=ansilowercase(trim(edit8.Text));
repeat
inc(e);
g:=ansilowercase(trim(stringgrid6.cells[1,e]));
until (copy(s,1,i)=copy(g,1,i)) or(stringgrid6.cells[1,e]='') ;
if copy(s,1,i)=copy(g,1,i)
then begin
stringgrid6.Row:=e;
end;

end;end;

но при этом при наборе пробела, stringgrid выбрасывает на первую
пустую строку. Вопрос куда смотрит  trim и как заставить
его работать?


begin...end   (2004-12-01 16:55:00) [1]

> [5] ANDREI   (01.12.04 16:47)

> А варианты реставрации этого кода есть?

Есть, один из вариантов реставрации приведён в [2]. :-)

Кстати, в [2] я не учёл, что Вам надо ещё и строку в StringGrid'е trim'ать...


ANDREI   (2004-12-01 16:47:00) [2]

>>begin...end ©   (01.12.04 16:39) [2]
Сейчас проверить возможности нет но обязательно попробую. Спасибо! А варианты реставрации этого кода есть?


ANDREI   (2004-12-01 16:41:00) [3]

Пробовал ставить trim при проверке условия until - тоже самое.


ANDREI   (2004-12-01 16:41:00) [4]

Пробовал ставить trim при проверке условия until - тоже самое.


begin...end   (2004-12-01 16:39:00) [5]

> ANDREI   (01.12.04 16:15)

В обработчик Edit.OnChange:

var
 I: Integer;
 S: String;
begin
 S := AnsiLowerCase(TrimLeft((Sender as TEdit).Text));
 if S <> EmptyStr then
   with StringGrid do
     for I := 1 to RowCount - 1 do
       if Cells[1, I] <> EmptyStr then
         if Pos(S, AnsiLowerCase(Cells[1, I])) = 1 then
         begin
           Row := I;
           Break
         end
end.


P.S. Не проверял.


Amadey   (2004-12-01 16:34:00) [6]

По-=моему ошибка тута:
s:=ansilowercase(trim(edit8.Text));
и тута
g:=ansilowercase(trim(stringgrid6.cells[1,e]));
Если в первом варианте у тебя в поле пробел, то после трима это будет пустая строка, на которую тебя и выкидывает.


Наверх

Титульная страница Поиск, карта сайта Написать письмо