[Форум] [Помощь] [Поиск] [Выйти] |
Добро пожаловать, ![]() |
|
|
| ||
как в делфях сделать чтобы организовывался поиск .....чтобы в edit вводилось слово и в каких строчках stringgrida это слово присутствует эти строчки переносились в начало табл и выделялись? |
| ||
stringgrid -> F1 |
| ||
руками... |
| ||
А вот скажите мне, пожалуйста, как с StringGrid в фиксированных строках писать другим фонтом? Через DrawCell - получается, но ведь он его постоянно перерисовывает? Или поправьте меня |
| ||
Насколько я знаю, Windows сам вызывает перерисовку, когда это нужно. Также можно из самой программы вызвать перерисовку Update, Refresh, Repaint, иногда Application.ProcessMessages (он активизирует обработку пришедших и поставленных в очередь сообщений Windows, если какие-то из них требуют перерисовки - она производится). Так или иначе, инициатор перерисовки в большинстве случаев - Windows. Визуальный объект Delphi "ловит" это сообщение и выполняет перерисовку либо вызовом API операционки, либо "собственными силами" (например, нарисуй линию отсюда до вот сюда). Ряд визуальных объектов представляют программисту возможность самому нарисовать этот объект вместо использования заложенной в него процедуры прорисовки. DrawCell - это и есть метод прорисовки программистом, причем он абсолютно не "мешает" методу, заложенному в самом объекте StringGrid, если посмотрите исходники StringGrid, то убедитесь в этом сами. Я клоню к тому, что использование свойства DrawCell не является чем-то, из ряда вон выходящим, а, наоборот, есть наиболее простой и правильный способ управления отображением ячеек. |
| ||
т.е. если я буду использовать прорисовку заголовка таблицы (зафиксированной строки) в процедуре DrawCell, то при последующем скроллинге таблицы этот заголовок заново перерисовываться не будет? Он будет перерисовывать только те ячейки, которые изменились? |
| ||
Насколько я помню, он перерисовывает все ячейки, но врать не буду, а проверять времени нет. Не парься этим (ничего, что я на ты?). Это не твоя забота - перерисовка. Windows и Delphi сами решат, когда его перерисовать, ты только можешь изменить метод перерисовки отдельных ячеек - в данном случае используя DrawCell. Я к тому, что твой DrawCell будет вызываться не чаще, чем вызывалась бы обычная перерисовка ячеек. И если ты не прописал в DrawCell каких-нибудь диких вычислений с плавающей точкой, или выборок из БД, или других операций, сильно загружающих процессор, то замедление скорости перерисовки и, соотвественно, восприятия программы будет совершенно незаметно. В твоем случае ты все сделал правильно. |
| ||
Да, в принципе я определил, в какой момент все перерисовывается и меня это устроило. Авот событие, которое срабатывает, когда нажимаешь двойным щелчком на фиксированной строке (не важно,в какой колонке) как называется? OnDblClick отрабатывает только когда в рабочей ячейке щелкаешь.. |
| ||
OnCellClick не подойдет ? |