|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
10.12.2009, 10:33 | #1 |
Форумчанин
Регистрация: 23.09.2007
Сообщений: 147
|
глюки OnSelectCell при ресайзе грида в нем
ситуация такая: есть 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 но как то у меня не вышло да и не вэтом дело
Я надеваю тапочки, ищу чем похмелиться, ах, если я сейчас умру, то на... я родился
Последний раз редактировалось joker; 10.12.2009 в 12:08. Причина: mutual misunderstanding |
10.12.2009, 11:45 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Почитать почитал, но за терминологией полуаглицкой ниче не понял...
I'm learning to live...
|
10.12.2009, 12:09 | #3 |
Форумчанин
Регистрация: 23.09.2007
Сообщений: 147
|
А так понятнее?))) А вообще что именно не понятно?
Я надеваю тапочки, ищу чем похмелиться, ах, если я сейчас умру, то на... я родился
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
глюки при численном интегрировании (Delphi) | Bazookин | Помощь студентам | 5 | 23.04.2009 13:12 |
в Borland C++ Builder 6 при открытие файла Word посчитать количество символов в нем? | Антон Ал. Март. | C++ Builder | 1 | 21.02.2009 21:37 |