X11
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Вот сделал такой поиск (регистронезависимый) на примере с "их" сайта. Может кто усовершенствует Код: procedure TfmScanner.actSerachNextExecute(Sender: TObject); function GetRecordIndexByText( AView : TcxCustomGridView; AText : string; AColumnIndex : Integer) : Integer; var I: Integer; begin Result := - 1; with AView.DataController do for I := grid1.DataController.FocusedRecordIndex + 1 to RecordCount - 1 do if StrPos(PChar(AnsiUpperCase(DisplayTexts[I, AColumnIndex])), PChar(AnsiUpperCase(AText))) <> nil then begin Result := I; Break; end; end; var ARecordIndex: Integer; begin // по умолчанию actSerachNext.Caption := 'Найти...'; if grid1.DataController.RecordCount <= 0 then exit; //устанавливаем первую строку, если ничего не выбрано if grid1.DataController.FocusedRecordIndex < 0 then grid1.DataController.FocusedRecordIndex := 0; //устанавливаем колонку с текстом объявления, если ничего не выбрано if grid1.Controller.FocusedColumnIndex < 0 then grid1.Controller.FocusedColumnIndex := colText.Index; if edSearch.Text <> '' then ARecordIndex := GetRecordIndexByText(grid1, edSearch.Text, grid1.Controller.FocusedColumnIndex); if ARecordIndex <> -1 then begin grid1.DataController.FocusedRecordIndex := ARecordIndex; actSerachNext.Caption := 'Следующее'; end else actSerachNext.Caption := 'Найти...'; lbSearchMatches.caption := 'Совпадений не найдено'; lbSearchMatches.Visible := ARecordIndex = -1; end; | Добавлено: Единственный минус. Этот ктод как бы не работает. Цитата: //устанавливаем первую строку, если ничего не выбрано if grid1.DataController.FocusedRecordIndex < 0 then grid1.DataController.FocusedRecordIndex := 0; //устанавливаем колонку с текстом объявления, если ничего не выбрано if grid1.Controller.FocusedColumnIndex < 0 then grid1.Controller.FocusedColumnIndex := colText.Index; | Т.е. пока мышкой не щёлкнешь по гриду, GetRecordIndexByText будет возвращать всегда -1 Добавлено: Подсвечивание слов в ячейках. На этой строке AEdit := TcxRichEdit(Edit); Вываливается AV. Что не так? Код: procedure TfmScanner.HihgLight(); var I, FoundPos: integer; AColumn : TcxGridColumn; AEdit : TcxRichEdit; begin with Grid1 do begin AColumn := colText; for I := 0 to ViewData.RecordCount - 1 do if ViewData.Rows[I].IsData then begin ViewData.Rows[I].Focused := True; with Controller.EditingController do begin ShowEdit(AColumn); AEdit := TcxRichEdit(Edit); FoundPos := AEdit.FindText(edSearch.Text, 0, Length(AEdit.Text), [stWholeWord]); if not (FoundPos < 0) then begin AEdit.SelStart := FoundPos; AEdit.SelLength := Length(edSearch.Text); AEdit.SelAttributes.Color:=clRed; AEdit.SelLength:=0; end else AColumn.Editing := False; end; end; end;//with end; | Пример с "их" сайта.
---------- /не мы такие, жизнь такая/ |
|