Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Ehlib

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37

Открыть новую тему     Написать ответ в эту тему

AndrewMB

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vladk1973
У меня аналогичная ситуация.
На одном из форумов нашел такое решение:
в модуле DbUtilsEh, функция Locate DatasetTextEh, строку
AGrid.Selectedlndex := AGrid.VisibleColumns[FCurInListColIndex].Index;
необходимо заменить на
AGrid.Selectedlndex := FCurlnListColIndex;
У меня работает, хотя насколько это правильно я не анализировал за отсутствием времени.
Однако есть еще одна проблема. Если в окне поиска выбрать другое поле для поиска, то поиск все равно выполняется только по активному полю на момент открытия окна. Т.е. нужно закрыть окно поика, выбрать поле в котором нужно что-то найти и опять вызвать окно поиска. Как с этим бороться? Поле необходимо выбирать в самом окне поиска. У меня версия 4.1, в 3.6 работает правильно.

Всего записей: 47 | Зарегистр. 19-10-2005 | Отправлено: 13:53 28-10-2006
vladk1973



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
У меня аналогичная ситуация

 
Я прочитал, но вникать в код компонента сейчас нет времени.
Ясно что ошибка там. Будет время - гляну, мне и самому интересно

Всего записей: 674 | Зарегистр. 23-03-2005 | Отправлено: 15:31 30-10-2006
vladk1973



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
AndrewMB
 
Вот и глянул
Жаль, конечно, что такое вот творится в таком профессиональном пакете, но что ж тут поделаешь
 
Ошибка в модуле DbUtilsEh.pas
При поиске через диалог вызывается функция по умолчанию

Код:
 
function LocateDatasetTextEh(AGrid: TCustomDBGridEh;
  const FieldName, Text: String; AOptions: TLocateTextOptionsEh;
  Direction: TLocateTextDirectionEh; Matching: TLocateTextMatchingEh;
  TreeFindRange: TLocateTextTreeFindRangeEh): Boolean;
 

Причем FieldName (поле, в котором производится поиск) передается корректно
Но в самом теле функции нигде не используется, а поле для поиска берется

Код:
 
FCurInListColIndex := AGrid.SelectedIndex;
 

То есть та колонка, в которой вызывался диалог поиска,мдя
Переделать, конечно можно, плевое дело, но честное слово - я не хочу вновь перекомпиливать BPL-ки свои. Думаю ты и сам это запросто сделаешь, если тебе надо.
 
 
 
ЗЫ. Получается что это та же самая проблема в той же функции, про которую ты и писал. Вот так вот.
Решение проблемы лежит тут
 

Цитата:
 
Date:    2006-08-12 19:44
Subject:    Выгребаем очередные баги из EhLib
Security:    Public
 
На это раз словили мы их в стандартном окне поиска EhLib, удивительно как автор проверял его работоспособность...
1. После поиска через диалог, в случае если до поисковой колонки имеются скрытые колонки, после успешного поиска текущей становилась другая колонка. Лечим это правкой модуля DbUtilsEh, функция LocateDatasetTextEh, строку
AGrid.SelectedIndex := AGrid.VisibleColumns[FCurInListColIndex].Index;
заменяем на
AGrid.SelectedIndex := FCurInListColIndex;  
2. Какую бы колонку для поиска мы не назначили поиск все равно производится в колонке, которая была текущей до открытия окна поиска. Лечим это правкой модуля DbUtilsEh, функция LocateDatasetTextEh, строку
FCurInListColIndex := AGrid.SelectedIndex;
заменяем на
if FieldName = '' then
  FCurInListColIndex := AGrid.SelectedIndex
else
  FCurInListColIndex := AGrid.FieldColumns[FieldName].Index;
3. В самом модуле диалога поиска есть много кода, который давно не используется (атавизм) приводящий ко всему прочему к утечкам памяти. Выкладываю модуль, в котором закомментировал все атавизмы и тем самым убрал утечки памяти.
 
PS:
Исправления действительны для версии 4.0 и 4.1
 

Всего записей: 674 | Зарегистр. 23-03-2005 | Отправлено: 05:25 31-10-2006 | Исправлено: vladk1973, 05:40 31-10-2006
AndrewMB

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vladk1973
Спасибо что разобрался, буду исправлять.

Всего записей: 47 | Зарегистр. 19-10-2005 | Отправлено: 10:08 31-10-2006
Just_Perf

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
подскажите решение
есть adoquery+datasetdriver+memtable+datasource+dbgrideh
в фильтре показывает значения колонок, но не фильтрует
также не подсчтывает кол-во по колонкам
что не так?

Всего записей: 141 | Зарегистр. 15-01-2002 | Отправлено: 10:04 07-11-2006
vladk1973



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Just_Perf
 
Обязан показывать
Свойство Footer заполни у объектов TDBGridColumnEx
Свойство SumList не забудь у грида
SortLocal поставь в True

Всего записей: 674 | Зарегистр. 23-03-2005 | Отправлено: 10:13 07-11-2006 | Исправлено: vladk1973, 10:13 07-11-2006
Just_Perf

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vladk1973
footer заполнил - все заработало! спасибо!
 
но вопрос по фильрации все еще актуален...

Всего записей: 141 | Зарегистр. 15-01-2002 | Отправлено: 13:28 07-11-2006
vladk1973



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Just_Perf

Цитата:
но вопрос по фильрации все еще актуален...


Цитата:
в фильтре показывает значения колонок

Не пойму чего то, расскажи подробнее про фильтрацию, что где ставишь?

Всего записей: 674 | Зарегистр. 23-03-2005 | Отправлено: 03:27 08-11-2006 | Исправлено: vladk1973, 03:28 08-11-2006
Just_Perf

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vladk1973
 
почитал в сетях про фильтрацию. вроде разобрался. как я понял, ehlib не позволяет делать многоуровневую фильтрацию (т.е. а-ля excel - сначала фильтр по одной колонке, потом сузить фильтром по другой и т.д.). фильтрацию по одной сделал с помощью доп.кода на событие applyfilter (установка значения фильтра и последующее его применение), но списки значений фильтра по иным колонкам остаются изначальными. поэтому решил динамически набирать условие фильтра в свойство SetFilterText MemTable (колонка1=условие1 and колонка2=условие2).
осталасть проблемка по обновлению информации в footer - пока не дернусь курсором куда-нибудь итоговые значения не пересчитываются...

Всего записей: 141 | Зарегистр. 15-01-2002 | Отправлено: 12:24 08-11-2006
vladk1973



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Just_Perf

Цитата:
ока не дернусь курсором
А ты передергивай свойство SumList.Active, по моему помогает

Всего записей: 674 | Зарегистр. 23-03-2005 | Отправлено: 13:34 08-11-2006
abalex



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
А ты передергивай свойство SumList.Active, по моему помогает

IMHO лучше дернуть SumList.RecalcAll()
а то у меня на некоторых движках после смены SumList.Active раз 5 туда-сюда, прога вылетает с ошибкой переполнения буфера
Добавлено.
По крайней мере год назад так было, счас не проверял уже этот случай

Всего записей: 781 | Зарегистр. 21-10-2004 | Отправлено: 15:59 08-11-2006 | Исправлено: abalex, 16:02 08-11-2006
Just_Perf

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
IMHO лучше дернуть SumList.RecalcAll()  

 
спасибо! теперь все работает как нужно!

Всего записей: 141 | Зарегистр. 15-01-2002 | Отправлено: 19:08 08-11-2006
vladk1973



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
а то у меня на некоторых движках после смены SumList.Active раз 5 туда-сюда, прога вылетает с ошибкой переполнения буфера  

abalex
Это в какой версии было, инетересно? Просто не замечал такого

Всего записей: 674 | Зарегистр. 23-03-2005 | Отправлено: 04:00 09-11-2006
abalex



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Это в какой версии было, инетересно? Просто не замечал такого

Это было еще в 3-ей версии. Надо будет проверить в 4-ой.

Всего записей: 781 | Зарегистр. 21-10-2004 | Отправлено: 10:00 10-11-2006
vladk1973



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
abalex
Я сейчас в четвертой сижу, не замечал такого бага.
Зато в четверке полно других ошибок
 
Вот использовал TIniPropStorageManEh в главной форме приложения, как учили

Код:
var
  IniPropStorageMan: TIniPropStorageManEh;
 
initialization
 
  IniPropStorageMan := TIniPropStorageManEh.Create(nil);
  IniPropStorageMan.IniFileName := 'MyIniFile.Ini';
  SetDefaultPropStorageManager(IniPropStorageMan);
end.

Затем у меня в приложении подгружаются BPL-ки, с фреймами, на фреймах лежат компоненты TPropStorageEh. По идее, они должны видеть StorageManager, заданный по умолчанию кодом выше, и с ним работать. По крайней мере в 3.6 версии работало. В 4.1 - не хочет
Пришлось свойство StorageManager - устанавливать руками, тупо и некрасиво:

Код:
FormStorage1.StorageManager :=
  TIniPropStorageManEh(Application.MainForm.FindComponent('IniPropStorageMan'));

Вот такие чудеса. Ковыряния в коде ничего не дали, мало времени было на поиск траблемы.
Может, кто сталкивался?

Всего записей: 674 | Зарегистр. 23-03-2005 | Отправлено: 06:27 14-11-2006
Denchik



Двоечник
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
есть столбец с картинками, проблема в том, что не на каждому элементу в выпадающем списке может соответсвовать картинка, при отображении значения ячейки это хорошо решается через OnGetCellParams, но в выпадающем списке значения "едут" - не соответсвуют картинкам
 
Добавлено:
нашел в исходниках функцию PopupListboxGetImageIndex, там был закомменчен вызов события OnGetItemImageIndex столбца, раскомментировал пока все работает...

Всего записей: 8889 | Зарегистр. 06-02-2002 | Отправлено: 18:06 15-11-2006
vladk1973



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Denchik
Я вывешивал картинки стандартным способом - через свойство KeyList:

Цитата:
Show bitmaps in data cells depending on field values.
 
TDBGridEh allows to show bitmaps from TImageList component depending on field values. To show bitmaps depending on field values need: Fill list of field values to Column.KeyList property (every value in separate line) and set Column.ImageList property to ImageList control that has the bitmap in according index. Set Column.NotInKeyListIndex to index of bitmap that will be shown if field's value does not correspond to any value in KeyList (for instance you can set index of image for Null field value). At run time you are not allowed to edit bitmap in column cell. Use blank key and mouse click to set next value from Column.KeyList to the field; Shift-blank key and Shift-Mouse click to set previous value from Column.KeyList. Set Column.DblClickNextval to True have allows to change value on mouse double click.  

Если делать так, то проблем не замечено

Всего записей: 674 | Зарегистр. 23-03-2005 | Отправлено: 03:28 16-11-2006
Denchik



Двоечник
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vladk1973

Цитата:
Fill list of field values to Column.KeyList property (every value in separate line) and set Column.ImageList property to ImageList control that has the bitmap in according index.

в том то все и дело, индекс картинки берется по номеру строки в KeyList и если каждой строке соответвует картинка, то тогда действительно "проблем не замечено", если же нет, то картинки едут, например:
 
картинка  - KeyList
     А        -     1
               -     2
     Б        -     3
 
в ImageList будет 2 картинки А и Б, потому как пихать пустую картинку, имхо, не есть правильно, в итоге грид воспринимает это дело как:
 
картинка  - KeyList
     А        -     1
     Б        -     2
               -     3
 
при отрисовке ячейки это легко обходится через событие OnGetCellParams столбца, а вот при формировании выпадающего списка такого события не было

Всего записей: 8889 | Зарегистр. 06-02-2002 | Отправлено: 11:12 16-11-2006 | Исправлено: Denchik, 13:21 16-11-2006
vladk1973



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
Set Column.NotInKeyListIndex to index of bitmap that will be shown if field's value does not correspond to any value in KeyList (for instance you can set index of image for Null field value).  

А это разве не помогает в твоем случае ?

Всего записей: 674 | Зарегистр. 23-03-2005 | Отправлено: 09:07 17-11-2006
Denchik



Двоечник
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vladk1973

Цитата:
А это разве не помогает в твоем случае ?

если я правильно понимаю английский, нет

Цитата:
Set Column.NotInKeyListIndex to index of bitmap that will be shown

значит, картинка, которая будет отображена для значения поля не содержащегося в KeyList (в моем примере, если Field->Value = 4 или Field->Value = NULL), должна быть в ImageList, у меня же такой картинки нет, соответсвенно и ее индекса

Всего записей: 8889 | Зарегистр. 06-02-2002 | Отправлено: 11:27 17-11-2006
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Ehlib


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru