Поиск в сформированном отчете

mchmch Киров
отредактировано 09:06 Раздел: FastReport 4.0
Можно ли сделать так, чтобы по окончании поиска текста в сформированном отчете, в случае, если ничего не найдено, выдать сообщение об этом. А то пользователи задают вопрос, а как нам узнать, что поиск завершен? И во вьювере тоже. :)

Комментарии

  • отредактировано 09:06
    Ну если по F3 поиск дальше не проходит - значит завершен.

  • gpigpi
    отредактировано 09:06
    Если есть исходники, модифицируйте frxPreview.pas
    procedure TfrxPreviewWorkspace.FindText;
    var
      EMFCanvas: TMetafileCanvas;
      PageBounds, TxtBounds: TRect;
    begin
      TextFound := False;
    
      while FLastFoundPage < FPageList.Count do
      begin
        if (FEMFImage = nil) or (FEMFImagePage <> FLastFoundPage) then
        begin
          if FEMFImage <> nil then
            FEMFImage.Free;
          FEMFImage := TMetafile.Create;
          EMFCanvas := TMetafileCanvas.Create(FEMFImage, 0);
          PreviewPages.DrawPage(FLastFoundPage, EMFCanvas, 1, 1, 0, 0);
          EMFCanvas.Free;
        end;
    
        FEMFImagePage := FLastFoundPage;
        RecordNo := 0;
        EnumEnhMetafile(0, FEMFImage.Handle, @EnumEMFRecordsProc, nil, Rect(0, 0, 0, 0));
    
        if TextFound then
        begin
          PageBounds := FPageList.GetPageBounds(FLastFoundPage, ClientWidth, Zoom);
          TxtBounds := Rect(Round(TextBounds.Left * Zoom),
            Round(TextBounds.Top * Zoom),
            Round(TextBounds.Right * Zoom),
            Round(TextBounds.Bottom * Zoom));
    
          if (PageBounds.Top + TxtBounds.Top < FOffset.Y) or
            (PageBounds.Top + TxtBounds.Bottom > FOffset.Y + ClientHeight) then
            VertPosition := PageBounds.Top + TxtBounds.Bottom - ClientHeight + 20;
          if (PageBounds.Left + TxtBounds.Left < FOffset.X) or
            (PageBounds.Left + TxtBounds.Right > FOffset.X + ClientWidth) then
            HorzPosition := PageBounds.Left + TxtBounds.Right - ClientWidth + 20;
          Repaint;
          break;
        end
        // добавлено
        else
          Application.MessageBox('Строка не найдена','Поиск завершён',mb_OK);
        //
        LastFoundRecord := -1;
        Inc(FLastFoundPage);
      end;
    end;
    
  • mchmch Киров
    отредактировано 09:06
    gpi написал: »
    Если есть исходники, модифицируйте frxPreview.pas
    Спасибо, модифицировать я могу, но может быть есть возможность включить это сообщение в релиз? А то каждый раз одно и то же править не очень удобно...

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.