Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Подсветка слов в ячейках cxGrid (TcxGridDBTableView)  [new]
X11
Member

Откуда: Kharkiv, Ukraine
Сообщений: 15256
Этот пример подсвечивания взял с "их" сайт, но наверное работает для какой-нибудь старой версии девок.


На второй итерации while (указано в коде) вываливется ошибка:
Control '' has no parent window.


Вроде код рабочий, но не могу выявить причину.
procedure TfmEdit.HLText(cxGrid1DBTableView1: TcxGridDBTableView);
var
  I, FoundPos, StartPosition: integer;
  AColumn : TcxGridDBColumn;
  ATextToFind: String;
  AEdit : TcxRichEdit;
  AFind : Boolean;
begin
  ATextToFind := edSearch.Text;

  cxGrid1.SetFocus;
  with cxGrid1DBTableView1 do
  begin
    AColumn := GetColumnByFieldName('ID');
    for I := 0 to ViewData.RecordCount - 1 do
    begin
      if ViewData.Rows[I].IsData then
      begin
        ViewData.Rows[I].Focused := True;
        OptionsData.Editing := True;
        with Controller.EditingController do
        begin
          cxGrid1DBTableView1.OptionsData.Editing := True;
          ShowEdit(AColumn);
          AEdit := TcxRichEdit(Edit);
          StartPosition := 0;
          AFind := True;
          

          while AFind do
          begin
            

//в этой строке появляется ошибка: Control '' has no parent window, на второй итерации while AFind do
            FoundPos := TcxRichEdit(AEdit).FindText(ATextToFind, StartPosition, Length(AEdit.Text), []);
//            FoundPos := AEdit.FindText(ATextToFind, StartPosition, Length(AEdit.Text), []);
// а ещё FoundPos всегда имеет значение 0           

            if not (FoundPos < 0) then
            begin
              AEdit.SelStart := FoundPos;
              AEdit.SelLength := Length( ATextToFind);
              AEdit.SelAttributes.Color:=clRed;
              AEdit.SelAttributes.Style := [fsBold, fsItalic, fsUnderline];
              AEdit.SelLength := 0;
              StartPosition := FoundPos + 1;
            end
            else
              AFind := False;
              AColumn.Editing := False;
          end;  //while

//          if i = ViewData.RecordCount - 1 then
//             Sleep(2000)
//          else
//             Sleep(250);

        end; //with
      end;
    end;
    OptionsData.Editing := False;
  end; //with
end;


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

заранее спасибо
14 май 12, 13:50    [12549908]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить