Поиск:

Ответ в темуСоздание новой темы Создание опроса
> глюки OnSelectCell при ресайзе грида в нем, баги StringGrid (не совсем о бд) 
:(
    Опции темы
xortal
Дата 10.12.2009, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 6.7.2009

Репутация: нет
Всего: нет



ситуация такая: есть StringGrid с многострочными ячейками (рисующимися вручную), понятно что размер ячеек по умолчанию меньше размера текста, как в ширину так и тем более в высоту. При выделении ячейки (а goRangeSelect = false) в ней появляется Memo с Scrollbars := ssBoth и у Memo есть PopupMenu, а в нем пункт Expanded с CheckBox

Expandится ячейка до ее фактических параметров, то есть меняем RowHeights[i]/ColWidths[i] c DefaultRowHeight/DefaultColWidth на высоту/ширину текста, аналогично и меняются размеры мемо.

Проблема в том что всегда когда ячейка expanded у нас меняется ширина всего столбца и высота всей строки и конкретно желательно бы во время состояния expanded одной из ячеек чтобы работали только с ней.

Первое что пришло в голову Grid.Enabled := false; а Memo оставлять активным (не ставить ему в Parent и Owner Grid) Не активной становится вся клиентская область Grid включая Memo ему не принадлежащее и стоящее на переднем плане.

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

Написал, сначала выделяется новая, старая ячейка и ее строка и столбец возвращаются к привычным размерам. И вот здесь начинается самое интересное:

После OnSelectCell в котором изменялся размер Grid, программа заходит в OnSelectCell снова как будто если бы Gridу сначала поменяли размер, а потом щелкнули в нем (выделили ячейку) и если запрещать (выходить из него по условию), может и еще раз войти, плюс что интересно при трассировке с брейкпоинтом валится из-за grid index out of range или list index out of bounds, не останавливая где повалилось, не сразу, а если просто запустить и проделать те же самые действия без брейкпоинта и трассировки - сразу. А если не запрещать эти левые вхождения тоже валится но не сразу ну и плюс некорректно сдвигает выделение.

Порыскал в модуле гридс увидел что OnSelectCell вызывается в MoveCurrent, которая в свою очередь вызывается пратически при любом изменении размеров Grid.

Ладно, забил, попытался тоже самое реализовать в OnMouseDown, но столкнулся с другой проблемой - как узнать количество проскролленных столбцов и строк из начала таблицы (то есть скрытых от глаз, так как скроллинг происходит дискретно с шагом в одну ячейку в любом Grid), позиция скролла мало информативна, а иначе трудно координаты мыши превратить в координаты ячейки. Не использованию MouseToCell или MouseCoord так как те же ошибки (и я если честно им не очень доверяю так как я не знаю с учетом случившегося изменения размера Grid они выполняются или нет)

Можно конечно позаморачиваться с пробегом по CellRect(i,j) но я не уверен что вернуться -1цы в случае ячейки проскролленной строки/столбца

Если кто-то до сюда до читал)) то хотелось бы узнать как сделать необходимое мне изменение размеров Grid нормально или хотя бы как сделать неактивным Grid оставляя активным Memo, находящееся в его клиентской области (при этом не принадлежащее ему и выведенное на передний план)

может некорректность Grid.MouseCoord можно решить с помощью Grid.ScreenToClient но как то у меня не вышло да и не вэтом дело

Это сообщение отредактировал(а) xortal - 10.12.2009, 12:13
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0585 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.