Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2009, 10:33   #1
joker
Форумчанин
 
Регистрация: 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
joker вне форума Ответить с цитированием
Старый 10.12.2009, 11:45   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Почитать почитал, но за терминологией полуаглицкой ниче не понял...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.12.2009, 12:09   #3
joker
Форумчанин
 
Регистрация: 23.09.2007
Сообщений: 147
По умолчанию

А так понятнее?))) А вообще что именно не понятно?
Я надеваю тапочки, ищу чем похмелиться, ах, если я сейчас умру, то на... я родился
joker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
глюки при численном интегрировании (Delphi) Bazookин Помощь студентам 5 23.04.2009 13:12
в Borland C++ Builder 6 при открытие файла Word посчитать количество символов в нем? Антон Ал. Март. C++ Builder 1 21.02.2009 21:37