Объект Text и абзац

отредактировано 09:15 Раздел: FastReport .NET
Все перелапатил, но так и не понял, как правильно установить у объекта Text (ну и у форматированного текста то же) абзац. В VCL версии абзац задается свойством Paragraph у объекта Text, а в версии для .NET? Через первый TAB? Так как-то криво получается, сильно много, а установить отрицательный отступ у первого таба низя. Только обнулив свойство ширины табов и указав шиниру первого таба? Тогда как с остальными табами быть то? Через пробелы? В общем что-то не доходит до меня. Есть ли решение данной проблемы?

Спасибо.

Комментарии

  • отредактировано 09:15
    Здравствуйте,

    Там ошибка с FirstTabOffset. В следующем билде (завтра) исправлю.
  • отредактировано 09:15
    AlexTZ написал: »
    Здравствуйте,

    Там ошибка с FirstTabOffset. В следующем билде (завтра) исправлю.
    Упс, понятно, спасибо, а то я уже растроился было... :)

    Но все таки, абзац прийдется Табом делать? Просто свойство звучит как "FirstTabOffset", т.е. первый таб, а если в тексте несколько абзацев?
  • отредактировано 09:15
    Да, абзац надо делать табом. Это требование ф-и Graphics.DrawString. Св-во FirstTabOffset будет задавать смещение первого таба, размер остальных табов задается св-вом TabWidth.
  • отредактировано 09:15
    AlexTZ написал: »
    Да, абзац надо делать табом. Это требование ф-и Graphics.DrawString. Св-во FirstTabOffset будет задавать смещение первого таба, размер остальных табов задается св-вом TabWidth.
    Извините, но тут я с Вами не согласен. По моему, это маразм, делать абзацы табами. Тогда табы чем делать? Как мне добиться одинаковых абзацев по всему тексту, который загружается из базы данных? И не дай Бог, туда еще и табы не абзацев попадут, так как остальными табами прийдется решать вопросы следующих абзацев. И что теперь, что бы появились абзацы, мне надо как-то по всему тексту добавлять табы перед каждой строкой перед печатью объекта Текст? Я вообще не понимаю, почему основные фишки VCL версии тут не работают? Если Вы способны печатать ХТМЛ тэги с помощью Graphics.DrawString, то Вы уже постарались, что бы обойти другие ограничения этой функции, собственно такие, как полужирный, наклонный, подчеркивание в перемешку с простым текстом, а значит, говорить про элементарный абзац и тэг <nowrap></nowrap>, ссылаясь на какие-то ограничения каких-то функций - это просто отмазка. Реализация свойства Абзац у объекта текст надо поставить в приоритетные задачи.

    Так же непонятно, почему Текст и Форматированный текст при одинаковых условиях выдают на гора разный результат? На одном абзаце даже количество строк разное получается.

    Вообще начинает пугать различия между VCL и .NET версией и категорический отказ реализовывать лучшие практики из VCL версии. Надо создать справочник отличий и ограничений между VCL и .NET версией. :)
  • отредактировано 09:15
    написал:
    Извините, но тут я с Вами не согласен. По моему, это маразм, делать абзацы табами.
    Расскажите об этом разработчикам GDI+. Нужен отступ в начале параграфа - ставьте символ таб в начале строки. Если текст загружается из БД - тут сложнее, либо надо готовить текст заранее (вставляя табы там, где нужно делать отступ), либо программно, перед печатью текста, в скрипте.
    написал:
    Так же непонятно, почему Текст и Форматированный текст при одинаковых условиях выдают на гора разный результат? На одном абзаце даже количество строк разное получается.
    Потому что используются разная отрисовка: текст рисуется с помощью DrawString (или нашего рендерера), Форматированный текст - это виндовый контрол RichText со своей собственной отрисовкой.
    написал:
    Вообще начинает пугать различия между VCL и .NET версией и категорический отказ реализовывать лучшие практики из VCL версии. Надо создать справочник отличий и ограничений между VCL и .NET версией.
    FR VCL и FR.Net - это абсолютно разные проекты, платформы, команды разработчиков. Каждый продукт максимально ориентирован на особенности среды (Delphi и C#, соответственно).
  • отредактировано 09:15
    AlexTZ написал: »
    Расскажите об этом разработчикам GDI+. Нужен отступ в начале параграфа - ставьте символ таб в начале строки. Если текст загружается из БД - тут сложнее, либо надо готовить текст заранее...
    Тексты уже в базе. Никто не будет добавлять туда каки-то символы, значит надо их перелопатить как-то перед присвоением его объекту Текст. Кто должен это проделывать что бы подстроится под это ограничение? Или мне, как юзеру, проще все таки установить свойство Абзац и не думать об ограничениях GDI+, о котором я даже понятия могу не иметь и даже не догадываться, что Вы его там применили. А что там Ваш движок делает для меня, тусть это останется загадкой. По крайней мере, в документации Вы об этом ограничении нигде не упомянули и не предоставили варианты решения, а мы уже приступили к запланированному переходу на .NET версию и столкнулись с кучей проблем. :)

    Про разные продукты... Мы рассматриваем .NET версию, как эвалюционный скачек VCL версии, и конечно, мы ожидали от него реализацию привычного нам по той версии функционала, плюс что-то свеженькое. Не спорю, что-то свеженькое и долгожданное мы получили, но в придачу получили кучу различий, которые не дают нам по щелчку пальцев завершить процесс перехода нашего продукта на .NET :)
  • отредактировано 09:15
    написал:
    Мы рассматриваем .NET версию, как эвалюционный скачек VCL версии
    Напрасно - это разные продукты под одной торговой маркой. Кое-какой функционал совпадает, но различий очень много. И они в основном вызваны разными платформами.
  • отредактировано 09:15
    Вот пример скрипта, который цепляется к объекту Текст на событие AfterData. Вставляет перед каждым абзацем символ табуляции, чтобы можно было пользоваться св-вом FirstTabOffset:
        private void Text1_AfterData(object sender, EventArgs e)
        {
          string[] lines = Text1.Text.Split(new char[] { '\n' });
          string newText = "";
          
          foreach (string line in lines)
          {
            newText += (line == "\r") ? "\r\n" : "\t" + line + "\n";
          }
          
          if (newText.EndsWith("\r\n"))
            newText = newText.Remove(newText.Length - 2);
          Text1.Text = newText;
        }
    
  • отредактировано 09:15
    AlexTZ написал: »
    Вот пример скрипта, который цепляется к объекту Текст на событие AfterData. Вставляет перед каждым абзацем символ табуляции, чтобы можно было пользоваться св-вом FirstTabOffset:
    Большое спасибо. Хотя я по прежнему считаю, что проще добавить свойство абзаца и одним махом решить эту проблему, чем к каждому полю дописывать скрипт. К тому же мы прекрасно понимаем, что это не решает проблему, так как FirstTabOffset действует только на первый абзац, а не на последующие. Значит возникает проблема следующих абзацев и табов в целом. Т.е. это не решает проблему в комплексе, только какие-то компромисы. :)
    AlexTZ написал: »
    Напрасно - это разные продукты под одной торговой маркой. Кое-какой функционал совпадает, но различий очень много. И они в основном вызваны разными платформами.
    В целом надо стараться взять лучшее из того что есть, из того, что уже полюбилось разработчикам и пользователям, а различия платформы наоборот надо считать достоинством, так как скорость разработки на .NET и удобство программирования все таки на порядок выше. Даже скорость работы нашего продукта, который мы перевели на .NET 4 стала выше, чем то, что было на Делфи. После этого, период разработки на Делфи кажется страшным сном и вызывает отвращение. Конечно, мы хотим получить (кстати, мы не так уж много то и просим) хотя бы тот базовый функционал, который есть в VCL, и я не вижу ничего плохого в том, если я смогу Вас убедить добавить его. Все таки, Вы разрабатываете продукт для людей, которые будут им пользоваться, которые нуждаются в той или иной фиче, которая выделяет Ваш продукт на фоне конкурентов. Так зачем же ссылаться на какие-то ограничения платформы, вместо того, что бы подумать, как сделать продукт лучше? А мы Вам в этом поможем :)
  • отредактировано June 2010
    Уважаемый tstar, не могли бы Вы немного умерить свой пыл. Тема затронута интересная, но читать ваши комментарии просто неприятно, какие то, грубо говоря, "наезды" на разработчиков, "вот мол сделайте вот так и не волнует как вы это сделаете, мне мол нужно, нам тяжело написать три строчки кода и не можем перейти на новую версию. Поставьте на первый план это, остальное все забросьте потому что МНЕ срочно так надо. Как в анекдоте, сделайте большую кнопку по центру программы с надписью 'сделать пиз.....то'". Я с ФР с 2001 года. Работал с VCL - одни приятные воспоминания. Увидел шарп - забросил VCL, те возможности которые предоставляет нет-версия реально бомба. Что то не могу сделать стандартными средствами? - ну мы же программисты в конце концов, пару строчек кода и софт нарисует ВСЕ что нам нужно.
    Можно же как то проще, без обвинений, написать: 1. есть проблема - подскажите решение, 2. есть алгоритм решения проблемы - могу помочь разработчикам.
  • отредактировано 09:15
    AlexTZ написал: »
    Вставляет перед каждым абзацем символ табуляции, чтобы можно было пользоваться св-вом FirstTabOffset:
    Ок, подергал новую версию. Да, там FirstTabOffset действует на каждый абзац одинаково. Однако, первая попытка изменить свойство TabWidth сбросило свойство FirstTabOffset на 0, следующие изменения этого свойства не вызывают такого поведения. При установке FirstTabOffset в 0 все равно появляются абзацы, равные TabWidth. Сомниваюсь, что это нормальное поведение, хотя могу и ошибаться. При установке отрицательного значения FirstTabOffset получаем вместо отчета белый прямоугольник с красным крестом (стандартный error picture) и уже ничем нельзя вернуть отчет к жизни, только переоткрывать надо. Кстати, не только на этом свойстве было замеченно такое поведение, но и на многих других, где была попытка установить неверное значение. А еще, в разрез документации, которая гласит, что невозможно удалить последний (единственный) бэнд отчета, мне все таки удалось это сделать, не помню как, но хочу попробовать повторить попытку. Причем, это не вызвало абсолютно никаких предупреждений или ошибок, единственное, при нажатии правой кнопки мыши на панели бэндов (слева) получал эксепшен, связанный с нулевой ссылкой на объект меню. К сожалению, дело было ночью и не совсем запомнил порядок действий, приведший к данной проблеме, потому и не стал сообщать. Но это уже оффтоп по данной ветке.
  • отредактировано 09:15
    mmm_michael написал: »
    Уважаемый tstar, не могли бы Вы немного умерить свой пыл. Тема затронута интересная, но читать ваши комментарии просто неприятно
    Спасибо за Ваше мнение. Возможно, я где-то и увлекся, но для достижения цели любые способы подходят. :) Да, новая версия бомба, собственно, именно она и сподвигла переписать весь наш проект на .NET, так как очень много чего в нашей Компании завязано на отчетность, печать, и т.д. Пока мы писали наш код, развивался и Фастрепорт. И вот когда дошло дело до подключения отчетности, я получаю сюрпризы. Да, нам не трудно в нескольких сотнях местах добавить пару строчек кода, да, нам не трудно потом это все оттестить на разных входных параметрах, от которых полностью меняется внешний вид отчета. Но зачем, если можно все это решить централизованно с помощью одного привычного и логичного свойства? Поверьте, что от меня тоже так же, только гораздо настойчивее, требуют того или иного, и никого не волнует, что это ограничение стороннего продукта и никакие сертификаты (как я читал на одном из форумов о критериях выбора системы отчетности) не идут в аргумент.
    Собственно, я и хочу помочь разработчикам, только не получается, так как это не считается нужным, ибо это другой продукт.
    Ладно....
  • отредактировано 09:15
    AlexTZ написал: »
    Да, абзац надо делать табом.
    Добрый день!
    Пытаюсь несколько дней смириться с табами, но все никак не выходит. Ну не правильно как-то имитировать абзацы отступами в точках. Мало того, что надо к каждому объекту Text вешать скрипт добавления таба, так еще и перерасчет единиц отчета в точки. Умом можно тронуться, когда много объектов. Предлагаю добавить свойство Абзац с указанием величины отступа в единицах отчета, как стандартную опцию. Это многим будет полезно.

    Заранее благодарю.
  • отредактировано 09:15
    mmm_michael написал: »
    Уважаемый tstar, не могли бы Вы немного умерить свой пыл. Тема затронута интересная, но читать ваши комментарии просто неприятно, какие то, грубо говоря, "наезды" на разработчиков, "вот мол сделайте вот так и не волнует как вы это сделаете, мне мол нужно, нам тяжело написать три строчки кода и не можем перейти на новую версию. Поставьте на первый план это, остальное все забросьте потому что МНЕ срочно так надо. Как в анекдоте, сделайте большую кнопку по центру программы с надписью 'сделать пиз.....то'". Я с ФР с 2001 года. Работал с VCL - одни приятные воспоминания. Увидел шарп - забросил VCL, те возможности которые предоставляет нет-версия реально бомба. Что то не могу сделать стандартными средствами? - ну мы же программисты в конце концов, пару строчек кода и софт нарисует ВСЕ что нам нужно.
    Можно же как то проще, без обвинений, написать: 1. есть проблема - подскажите решение, 2. есть алгоритм решения проблемы - могу помочь разработчикам.
    Я скажу больше, все проблемы с которыми я столкнулся при работе с Fast Report .NET были решены и это при том, что я даже не являюсь "клиентом" (то есть не купил программу, а пользуюсь бета версией)

    все проблемы с которыми я сталкивался решались в течении 1 вечера!
  • отредактировано 09:15
    Я посмотрю, что можно сделать.
  • отредактировано 09:15
    AlexTZ написал: »
    Я посмотрю, что можно сделать.
    Нет в форуме смайлика одобрения и восхищения :) Придется словами...
    Спасибо! Это будет супер!
  • отредактировано 09:15
    AlexTZ написал: »
    Я посмотрю, что можно сделать.
    Добрый день!

    Каждый день с нетерпением жду новый билд, в надежде увидеть решение.... А его все нет и нет... Хотел узнать, еще в силе Ваш ответ?

    Спасибо
  • отредактировано 09:15
    Ответ в силе, но в данный момент нет возможности этим заниматься. Как только будет готово, сообщу в этой теме.
  • отредактировано 09:15
    Добрый день!

    Выражаю свой мега респект и уважение за столь долгожданное свойство, которое, наконец появилось! Спасибо!

    Только, ни в документации ни в описании я не нашел, в каких единицах задается это свойство. Конечно, я надеялся, что оно будет в единицах измерения отчета, что было бы логичным, но методом проб понял, что оно во внутренних величинах отчета. Я помню, что были дебаты на эту тему, и у Вас были везкие доводы, но не помню где это было ,по моему, в фоуме по VCL версии. Но, ширину, высоту указал в сантиметрах или миллиметрах, а вот что бы задать параграф (да и многое другое) беру калькулятор и высчитую, сколько это будет 1,25 см во внутренних координатах, что бы задать это значение в дизайнере. Нелогично все это. Да и искать коэфициенты перевода приходится, в голове то их не удержишь.

    Но все равно спасибо, за столь нужное свойство.
  • отредактировано 09:15
    Кстати, а не напомните мне, смысл использовать в дизайнере разные единицы измерения? Я могу еще понять, использование внутренних величин в коде, но зачем же в дизайнере? Это ведь не наглядно, требует дополнительных расчетов и знания внутренних коэфициентов перевода единиц. Это далеко не уровень пользователя. Да и программеру лишний гемморой. Спасибо.
  • отредактировано 09:15
    Собственно, к чему это все я веду... Ценность данного свойства теряется из-за использования внутренних единиц измерения. Все равно надо писать самому какой-то скрипт, что бы и на экране и на принтере отступ был одинаков, а это, согласитесь, не тривиальная задача. Надо обойти все элементы отчета, найти все текстовые блоки и в них пересчитать единицы измерения, а при двойном проходе, я даже не представляю себе, как такое сделать. Пока не поздно, ножно исправить это и разрешить указание единиц измерения отчета и не повторять недочеты VCL версии?

    Заранее благодарю.
  • отредактировано 09:15
    Ура!
    В версии 1.5.15 это свойство реализовано на отлично!
    Выражаю свою благодарность разработчикам!
    Спасибо.

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

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