Лидеры рейтинга

ID: 259041

Алексеев Владимир Николаевич

Мастер-Эксперт

379

Россия, пос. Теплоозёрск, ЕАО


ID: 401284

Михаил Александров

Советник

378

Россия, Санкт-Петербург


ID: 401888

puporev

Профессор

216

Россия, Пермский край


ID: 405338

vovaromanov.jr

1-й класс

130


ID: 400669

epimkin

Профессионал

112


ID: 242862

Hunter7007

Мастер-Эксперт

30

Россия, Омск


ID: 137394

Megaloman

Мастер-Эксперт

26

Беларусь, Гомель


8.10.2

13.10.2021

JS: 2.10.2
CSS: 4.6.0
jQuery: 3.6.0
DataForLocalStorage: 2021-10-19 18:16:01-standard


Создание программ на языках Pascal, Delphi и Lazarus.

Администратор раздела: Зенченко Константин Николаевич (Старший модератор)

Консультация онлайн # 109061

Раздел: Pascal / Delphi / Lazarus
Автор вопроса: Грек А.В.
Дата: 12.11.2007, 14:11 Консультация закрыта
Поступило ответов: 1

Добрый день!
У меня вопросец ...
Подскажите как сделать поиск по строчно в String Grid
Хотелось бы что-то наподобие поиска в 1С(вводишь слово а искомая строка сразу подсвечивается)

Заранее спасибо!

Ответ # 193436 от Degtyarev Anton
Здравствуйте, Грек А.В.!
Могу предложить немного другой вариант вы вводите то что ищете а при нажатии на кнопку найти производится поиск.
В низу формы положите элемент Tpanel + Tedit + 2 кнопки (найти, отмена)

У Grid выберети собтии при нажатии кнопки

там напишите - это позволит вводить текст в поле

Panel.Visible := True;
Find.SetFocus;
Find.SelText := key;
end;

потом создайте событие при нажатии кнопки "найти"

Var
I : Integer;
S : String;
isOK : Boolean;
List : TList - переменная которая содержит весь список вашего поля
begin
isOk := False;
S := AnsiUpperCase(Trim(WhatFind.Text));
For I := Grid.Row To List.Count - 1 Do Begin
isOK := Pos(S, AnsiUpperCase(List[I].Name) = 1;
If isOK Then Break;
End;
If Not isOK Then
For I := 0 To Grid.Row - 1 Do Begin
If I > List.Count - 1 Then Break;
isOK := Pos(S, AnsiUpperCase(List[I].Name) = 1;
If isOK Then Break;
End;
If isOK Then Begin
Grid.Row := I + 1;
DoSelectCell(I)
End Else ShowMessage('ничего не найдено');
End;

вот так вроде будет работать. Возможны варианты в строке isOK := Pos(S, AnsiUpperCase(List[I].Name) = 1;
но в любом случае алгоритм такой.


Degtyarev Anton

Посетитель
12.11.2007, 16:03
Мини-форум консультации # 109061
Нет сообщений в мини-форуме
Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Лучшие эксперты раздела

puporev

Профессор

Рейтинг: 216

Зенченко Константин Николаевич

Старший модератор

Рейтинг: 122

Gluck

8-й класс

Рейтинг: 61

Лысков Игорь Витальевич

Мастер-Эксперт

Рейтинг: 0

Асмик Гаряка

Советник

Рейтинг: 0

Орловский Дмитрий

Мастер-Эксперт

Рейтинг: 0