![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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]));
Если в первом варианте у тебя в поле пробел, то после трима это будет пустая строка, на которую тебя и выкидывает.