Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Оперативная перерисовка DBGrid а [D5, D6, IB5.x, IB6.x]


Johnmen ©   (2002-04-11 11:05:00) 

Имеется следующий обработчик :
procedure TForm1.XXXDataSet1AfterScroll(DataSet: TDataSet);
begin;
DBGrid1.Columns[x].Visible:=not DBGrid1.Columns[x].Visible;
end;

Если навигация осуществляется с помощью указанного грида, то ожидаемого эффекта не наблюдается...
Кто подскажет красивое решение проблемы ?
Благодарю заранее...


Johnmen   (2002-04-12 10:52:00) [1]

>Lusha © : Да-да, вышли, пожалуйста, dbgrids от delphi4 и Результат сравнения !


Lusha   (2002-04-12 10:48:00) [2]

Я сравнил модули dbgrids от delphi4 и delphi5 (из поставки CBuilder5). Результат сравнения могу выслать...

С подобного рода граблями я столкнулся когда общался с бета версией Delphi3. Там была куча глюков в BDGrid. Я их пофиксил, а когда вышла официальная версия, то никаких особых исправлений я в новой версии модуля так и не обнаружил... Самое смешное, что стоило установить модуль dbgrids от бета версии (оригинальный) и грид снова начинал глючить и в официальной версии... Я не стал разбираться и забил...

P.S. Если что найдешь, сообщи...


Lusha   (2002-04-11 16:50:00) [3]

>Johnmen ©
Все тщательно (первый раз за день :) ) проверил. Не работает именно перемещение в гриде посредством мыши. Нашел где грабли в обработчике MouseDown и успокоился на счет Delphi4...

>Проверил, увы - грабли везде (что мыша, что клава) :)
Верю... Проверил на Builder5. Действительно грабли... :(
Что касается обработчика TDBGridColumns.Update, то они идентичны в Delphi4 и Delphi5... Ищу разницу...


Johnmen   (2002-04-11 16:33:00) [4]

>Lusha © : Проверил, увы - грабли везде (что мыша, что клава) :)


Lusha   (2002-04-11 16:23:00) [5]

>Johnmen ©
Не надо. Я был не прав. Этот эффект присутствует и у Delphi4. Я его просто благополучно прощелкал. И не глюк это, как выясняется, а обычная фича. Причина (на мой взгляд) обработчик мыши. Клик мыши в ячейке восприниматься как выбор ячейки (записи), а если она при этом пропадает...

С TDBGridColumns.Update все нормально и прозрачно... Проверь как работает обработчик OnAfterScroll при перемещении посредством клавиатуры - все ОК. Грабли только на мыши...


Johnmen   (2002-04-11 16:17:00) [6]

Господа ! Скиньте сюда, у кого есть, процедуру отработки
TDBGridColumns.Update от D4, будьте любезны !


Johnmen   (2002-04-11 14:41:00) [7]

Твой Малдер <=> Johnmen (в данном случае)/забыл обновить имя/

>Lusha © : Выясняются интересные вещи - в D4 глюка почти нет, а в D5, D6 - уже совсем есть ! (в случае неопределенности колонок)
Будет время - покопаюсь в исходниках...


Твой Малдер   (2002-04-11 14:26:00) [8]

...Кстати, аналогичная проблема перерисовки грида возникает и при изменении количества доступных записей в НД, напр.при установке фильтра...


Lusha   (2002-04-11 14:25:00) [9]

Johnmen ©
>Пробовал не задавать колонок в дизайне - тишина....
Живу на Delphi4. Если в Design Time колонки не определены - все работает корректно. Если бы ты не сказал что "колонки грида прописаны статично" мы бы друг друга не поняли... :)


Johnmen   (2002-04-11 14:05:00) [10]

>Lusha © (11.04.02 12:41) :
Спасибо за проявленное участие !
Как всегда идет борьба с особенностями или/и с глюками !
Пробовал не задавать колонок в дизайне - тишина....
А вот этот твой вариант латания
TMyColumns(DBGrid1.Columns).Update(DBGrid1.Columns[х]);
работает в обоих случаях !
Я же решал эту проблему извратом, типа
DBGrid1.Columns[х].Width := DBGrid1.Columns[х].Width;
причем если колонок изменяющих видимость несколько, то надо делать для всех (и в твоем варианте и в моем) !

Еще раз спасибо !

>All : Если кто предложит еще варианты - буду рад !


Lusha   (2002-04-11 12:41:00) [11]

Нда-а-с. Вообще это смахивает на глюк. Если колонки явно не заданы в design Time - все работает...

Попробуй такой код...

type
TMyGridColumns = class(TDBGridColumns);

...

DBGrid1.Columns[х].Visible := not DBGrid1.Columns[х].Visible;
TMyColumns(DBGrid1.Columns).Update(DBGrid1.Columns[х]);



Lusha   (2002-04-11 11:45:00) [12]

Словил... Подумаю... :)


Johnmen   (2002-04-11 11:41:00) [13]

>Lusha © :
1. Предлагаю быть попроще и перейти на ты.
2. Понял правильно. Добавлю, что юзается простенькая тестовая табличка из IB базы, поля НД прописаны статично, колонки грида прописаны статично.


Lusha   (2002-04-11 11:34:00) [14]

Именно навигация в гриде DBGrid1 тоже должна приводить к перерисовке (в данном коде появлению - исчезанию колонки). В каком коде? В коде программы, разумеется. Я набросал постенький пример TDataSet + TDataSource + TDBGrid + TDBNavigator. Указанный Вами обработчик, мсрабатывает и как при навигации посредством TDBNavigator, так и при навигации посредстыом TDBGrid... Или я чего то не понял?


Johnmen   (2002-04-11 11:25:00) [15]

>alexandr © : это всего лишь абстрактный пример.
>Lusha © : если, например, навигация в др.гриде, связанном с тем же НД, то перерисовывается. Проблемка в каком коде ?
>Fareader © : колонка то появляется, то исчезает при смене текущей записи.


Fareader   (2002-04-11 11:18:00) [16]

А если не секрет, то какой ожидаемый эффект ? :)


Lusha   (2002-04-11 11:18:00) [17]

>Johnmen ©
>Если навигация осуществляется с помощью указанного грида, то ожидаемого эффекта не наблюдается...

А ведь должен наблюдаться... Проблемка в коде...


alexandr   (2002-04-11 11:17:00) [18]

прикольно как это: на четных записях столбец есть, на нечетных нет?


Наверх

Титульная страница Поиск, карта сайта Написать письмо