Глюки при переходе с одной ячейки на другую

_OZ_OZ
отредактировано 20:40 Раздел: FastReport 3.0
Создаю новый отчет, в нем удаляю всякие дефолтные бенды, составляю "сетку" из обычных текстовых элементов (MemoView). Каждая ячейка примыкает к соседней без промежутков. Выглядит как в excel'e spreadsheet или как развернутая таблица.

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

Как это исправить? Вот файл формы:
<?xml version="1.0" encoding="utf-8"?>
<TfrxReport Name="" DotMatrixReport="False" EngineOptions.MaxMemSize="10000000" IniFile="\Software\Fast Reports" PreviewOptions.Buttons="2047" PreviewOptions.Zoom="1" PrintOptions.Printer="Default" ReportOptions.CreateDate="38429,4890252199" ReportOptions.Description.Text="" ReportOptions.LastChange="38429,4895120602" ScriptLanguage="PascalScript" ScriptText.Text="begin

end." PropData="044C65667403880003546F7003B0000844617461736574730E00095661726961626C65730E00055374796C650E00">
<TfrxReportPage Name="Page1" PaperWidth="209,973333333333" PaperHeight="296,926" PaperSize="9" LeftMargin="10" RightMargin="10" TopMargin="10" BottomMargin="10" ColumnWidth="0" ColumnPositions.Text="" HGuides.Text="" VGuides.Text="">
<TfrxMemoView Name="Memo1" Left="0" Top="113,3859" Width="94,48825" Height="18,89765" Frame.Typ="15" Memo.Text=""/>
<TfrxMemoView Name="Memo2" Left="94,48825" Top="113,3859" Width="94,48825" Height="18,89765" Frame.Typ="15" Memo.Text=""/>
<TfrxMemoView Name="Memo3" Left="188,9765" Top="113,3859" Width="94,48825" Height="18,89765" Frame.Typ="15" Memo.Text=""/>
<TfrxMemoView Name="Memo4" Left="283,46475" Top="113,3859" Width="94,48825" Height="18,89765" Frame.Typ="15" Memo.Text=""/>
<TfrxMemoView Name="Memo5" Left="377,953" Top="113,3859" Width="94,48825" Height="18,89765" Frame.Typ="15" Memo.Text=""/>
<TfrxMemoView Name="Memo6" Left="472,44125" Top="113,3859" Width="94,48825" Height="18,89765" Frame.Typ="15" Memo.Text=""/>
<TfrxMemoView Name="Memo7" Left="0" Top="132,28355" Width="94,48825" Height="18,89765" Frame.Typ="15" Memo.Text=""/>
<TfrxMemoView Name="Memo8" Left="94,48825" Top="132,28355" Width="94,48825" Height="18,89765" Frame.Typ="15" Memo.Text=""/>
<TfrxMemoView Name="Memo9" Left="188,9765" Top="132,28355" Width="94,48825" Height="18,89765" Frame.Typ="15" Memo.Text=""/>
<TfrxMemoView Name="Memo10" Left="283,46475" Top="132,28355" Width="94,48825" Height="18,89765" Frame.Typ="15" Memo.Text=""/>
<TfrxMemoView Name="Memo11" Left="377,953" Top="132,28355" Width="94,48825" Height="18,89765" Frame.Typ="15" Memo.Text=""/>
<TfrxMemoView Name="Memo12" Left="472,44125" Top="132,28355" Width="94,48825" Height="18,89765" Frame.Typ="15" Memo.Text=""/>
<TfrxMemoView Name="Memo13" Left="0" Top="151,1812" Width="94,48825" Height="18,89765" Frame.Typ="15" Memo.Text=""/>
<TfrxMemoView Name="Memo14" Left="94,48825" Top="151,1812" Width="94,48825" Height="18,89765" Frame.Typ="15" Memo.Text=""/>
<TfrxMemoView Name="Memo15" Left="188,9765" Top="151,1812" Width="94,48825" Height="18,89765" Frame.Typ="15" Memo.Text=""/>
<TfrxMemoView Name="Memo16" Left="283,46475" Top="151,1812" Width="94,48825" Height="18,89765" Frame.Typ="15" Memo.Text=""/>
<TfrxMemoView Name="Memo17" Left="377,953" Top="151,1812" Width="94,48825" Height="18,89765" Frame.Typ="15" Memo.Text=""/>
<TfrxMemoView Name="Memo18" Left="472,44125" Top="151,1812" Width="94,48825" Height="18,89765" Frame.Typ="15" Memo.Text=""/>
<TfrxMemoView Name="Memo19" Left="0" Top="170,07885" Width="94,48825" Height="18,89765" Frame.Typ="15" Memo.Text=""/>
<TfrxMemoView Name="Memo20" Left="94,48825" Top="170,07885" Width="94,48825" Height="18,89765" Frame.Typ="15" Memo.Text=""/>
<TfrxMemoView Name="Memo21" Left="188,9765" Top="170,07885" Width="94,48825" Height="18,89765" Frame.Typ="15" Memo.Text=""/>
<TfrxMemoView Name="Memo22" Left="283,46475" Top="170,07885" Width="94,48825" Height="18,89765" Frame.Typ="15" Memo.Text=""/>
<TfrxMemoView Name="Memo23" Left="377,953" Top="170,07885" Width="94,48825" Height="18,89765" Frame.Typ="15" Memo.Text=""/>
<TfrxMemoView Name="Memo24" Left="472,44125" Top="170,07885" Width="94,48825" Height="18,89765" Frame.Typ="15" Memo.Text=""/>
<TfrxMemoView Name="Memo25" Left="0" Top="188,9765" Width="94,48825" Height="18,89765" Frame.Typ="15" Memo.Text=""/>
<TfrxMemoView Name="Memo26" Left="94,48825" Top="188,9765" Width="94,48825" Height="18,89765" Frame.Typ="15" Memo.Text=""/>
<TfrxMemoView Name="Memo27" Left="188,9765" Top="188,9765" Width="94,48825" Height="18,89765" Frame.Typ="15" Memo.Text=""/>
<TfrxMemoView Name="Memo28" Left="283,46475" Top="188,9765" Width="94,48825" Height="18,89765" Frame.Typ="15" Memo.Text=""/>
<TfrxMemoView Name="Memo29" Left="377,953" Top="188,9765" Width="94,48825" Height="18,89765" Frame.Typ="15" Memo.Text=""/>
<TfrxMemoView Name="Memo30" Left="472,44125" Top="188,9765" Width="94,48825" Height="18,89765" Frame.Typ="15" Memo.Text=""/>
</TfrxReportPage>
</TfrxReport>

Комментарии

  • отредактировано 20:40
    Ок, исправим.
  • _OZ_OZ
    отредактировано 20:40
    Хотелось бы знать, исправлена ли ошибка и попадет ли она в следующий билд FR?
  • отредактировано 20:40
    Нет, не исправлена. Я уже писал - алгоритм перехода по ячейкам, что используется в Делфи, мне не понятен. Кто-нибудь более понятливый чем я, может попробовать написать и отправить мне - включу в очередной релиз.
  • отредактировано 20:40
    Все объекты прямоугольные. Повычисляй центры. Выбирать ближайший центр справа, слева, снизу, сверху. Медленно правда, но будет правдоподобно работать (даже для частично перекрывающихся объектов). При полном перекрытии или частичном, но когда совпадают центры, надо что-то дополнительно придумать. Возможно выбирать ближайшие соответствующие стороны. Т.е. если идем вправо, то выбираем ближайшую левую сторону из всех сторон объектов находящихся правее.
    Я бы сделал так ;)
  • _OZ_OZ
    отредактировано 20:40
    AlexTZ написал:
    Нет, не исправлена. Я уже писал - алгоритм перехода по ячейкам, что используется в Делфи, мне не понятен. Кто-нибудь более понятливый чем я, может попробовать написать и отправить мне - включу в очередной релиз.
    ;)
    Как я уже говорил, был печальный опыт исправления исходников 2-й версии под себя. В итоге до сих пор баги исправляю.
    Так что копаться в исходниках предоставляю вам ;)
  • отредактировано 20:40
    Stranger написал:
    Все объекты прямоугольные. Повычисляй центры. Выбирать ближайший центр справа, слева, снизу, сверху. Медленно правда, но будет правдоподобно работать (даже для частично перекрывающихся объектов). При полном перекрытии или частичном, но когда совпадают центры, надо что-то дополнительно придумать. Возможно выбирать ближайшие соответствующие стороны. Т.е. если идем вправо, то выбираем ближайшую левую сторону из всех сторон объектов находящихся правее.
    Я бы сделал так ;)
    Не, там алгоритм интереснее. Например, Делфи не переходит на соседний справа объект, если dx < dy.
  • отредактировано 20:40
    AlexTZ написал:
    Не, там алгоритм интереснее. Например, Делфи не переходит на соседний справа объект, если dx < dy.
    Ну изгаляться можно как угодно ;) Побегай по иконкам рабочего стола курсором - там тоже интересно он местами скачет ;) Мы же не ставим целью сделать себе так же.
  • отредактировано 20:40
    Так именно "так же" и просят сделать...
  • отредактировано 20:40
    Перечитал еще раз, "так же" не нашел.

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

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