Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Ehlib

Автор: Cryogen2003
Дата сообщения: 22.09.2009 09:13
У меня часто выдается ошибка Canvas does not allow drawing. Кто-нибудь сталкивался с такой ошибкой и что делать для решения?

Ошибка в основном идет от класса TCustomDBGridEh, процедуры InternalLayout, и строчки кода:

Код:
FTitleRowHeight := SetChildTreeHeight(FHeadTree) - iif(dghFixed3D in OptionsEh, 1, 3);
Автор: AlexMoor
Дата сообщения: 28.09.2009 16:42
Гуру, помогите пожалуйста!
CodeGear RAD Studio 2007 + EhLib 4.5.59
Компонент TDBLookupComoBoxEh упорно не хочет отображать оба поля, заданные через ';' в ListField (т.е. отображает только первое). В выпадающем списке отображает, в свернутом состоянии - никак. DataField - обычное, не лукапное (что согласно справке сказывается на ListField). Что я упустил?
Автор: Samotek
Дата сообщения: 28.09.2009 17:16
AlexMoor
А, по-моему, и никак нельзя...
Автор: volser
Дата сообщения: 28.09.2009 17:26
AlexMoor
Правильно поведение. В свернутом будет отображаться только одно поле. Если хотите что бы было два нужно их слить в одно поле с помощью запроса.
Автор: AlexMoor
Дата сообщения: 29.09.2009 09:17
volser
Жесть! Значит RxLib была не так и плоха - в ней это было без проблем, напрасно я решил от нее избавиться... Может попутно еще подскажете, чем в TDBLookupComoBoxEh принципиально отличаются свойства Value и KeyValue?
Автор: waik
Дата сообщения: 29.09.2009 09:21
AlexMoor одно читаемое и показываемое, второе ключевое, типа id или uin строки - короче говоря для указания что показывать и какое значение возвращать.
Автор: AlexMoor
Дата сообщения: 29.09.2009 18:27
waik
Из сказанного увы ничего не понял. Не могли бы Вы на пальцах пояснить? Соорудив небольшой примерчик (могу выслать) ни малейшей разницы между ними найти не могу ни при каких условиях и действиях...
Автор: waik
Дата сообщения: 30.09.2009 18:02
AlexMoor
и очень хорошо что не понял.. Я сам затупил - попутал в голове KeyItems и Items из простого комбобокса. А здесь Судя по всему разницы нет сейчас... Значения возвращаются одинаковые, только KeyValue растёт из TCustomDBLookupCombob, а Value ещё раньше - из TCustomDBEditEh (т.е. то что в едитбоксе написано). У меня EhLib старенькая и там в исходниках cтоят TODO на переделку DataIndependentValue: Variant; { TODO : Rewrite as property Value }
так что использовать KeyValue надо...
Автор: AlexMoor
Дата сообщения: 05.11.2009 08:29
Ну тогда еще один вопрос по TDBLookupComoBoxEh. То, что в свернутом состоянии он умеет отображать только одно поле я смирился, добавил составное Calculated поле. И рано обрадовался - в выпадающем списке не хочет он искать (по вводу с клавиатуры) по вычисляемому полю. Это фича или баг?
Автор: volser
Дата сообщения: 05.11.2009 11:00
AlexMoor
Опишите полностью задачу, может есть другое решение вашей проблемы.
Автор: FyodorovMA
Дата сообщения: 05.11.2009 16:00
Вопрос - есть таблица EhLib, сортировка осуществляется по заголовку колонки.
На двойной клик по строке стоит операция редактирования данных в спецформе.
Но если быстро два раза щелкнуть по заголовку колонки происходит обработка редактирования, как этого избежать?
Автор: fcdobpiy
Дата сообщения: 05.11.2009 16:52
FyodorovMA
на двойной клик такую обработку сделай

procedure TfMain.MainGridDblClick(Sender: TObject);
var
Coord: TGridCoord;
Point: TPoint;
begin
GetCursorPos(Point);
Point := TDBGridEh(Sender).ScreenToClient(Point);
Coord := TDBGridEh(Sender).MouseCoord(Point.X, Point.Y);
if (Coord.y <> 0) then
функция_для_редактирования_данных;
end;
Автор: FyodorovMA
Дата сообщения: 06.11.2009 09:03
fcdobpiy спасибо за подсказку.
Автор: AlexMoor
Дата сообщения: 06.11.2009 09:10
volser
Все предельно просто, работало на Rx'овском лукапе (он умел в свернутом состоянии отображать сколько хочешь полей), но мне захотелось еще и лукап с кнопочками, вот и перешел на на EhLib'овский на свою голову.
Упрощенно - и в свернутом, и в развернутом состоянии лукап должен отображать 2 поля (например код и наименование), по первому производится поиск. Сделать 2 колонки в DropDownBox можно двумя путями - или созданием колонок непосредственно в DropDownBox, либо внеся два поля в ListField лукапа. Но в свернутом состоянии все-равно отображается одно поле! Тогда я создал вычисляемое в событии TQuery.OnCalcFields поле, где просто сцепил оба через пробел, это поле прописал в ListField лукапа. А дальше по вкусу - можно в DropDownBox создать 2 колонки из реальных Data-полей, можно этого и не делать - результат одинаков - поиска в выпадающем списке не происходит. Видимо придется делать это синтетическое поле не вычисляемым, а возвращать его из запроса (stored proc) из базы. Но ужасно не хочется, довольно много запросов переписать надо.
Автор: volser
Дата сообщения: 09.11.2009 10:19
AlexMoor
Вычисляемые поля используются в основном для отображения данных. Большая часть операций над ними не доступна. Лучше использовать какое то вычисляемое поле в самом запросе.
Автор: AlexMoor
Дата сообщения: 10.11.2009 09:22
volser

Цитата:
Вычисляемые поля используются в основном для отображения данных

Вот я и пытаюсь их использовать для отображения

Цитата:
Лучше использовать какое то вычисляемое поле в самом запросе

Но ужасно не хочется, довольно много запросов переписать надо. Отсюда и вопрос возник - это баг или фича? Если баг, есть надежда что он будет исправлен, если фича - буду переписывать запросы.
Автор: volser
Дата сообщения: 10.11.2009 10:23
AlexMoor
Есть еще DevExpress. Возможно ихний лукап вам подойдет.
Автор: AlexMoor
Дата сообщения: 11.11.2009 08:26
volser
Смотрел. Увы, в нем нет самого главного для меня - в Rx'овском лукапе это называлось DisplayEmpty и EmptyValue, в EhLib'овском DropDownBox.SpecRow (СellsText, Value). Ну и плюс в EhLib'овском есть EditButtons, которые на Rx'овском приходилось вставлять ручками.
Автор: SergKhM
Дата сообщения: 25.11.2009 12:37
Всем привет!

Проблема с отрисовкой TDBLookupComoBoxEh во всех версиях после 4..
Если положить на простую форму, все Ок. Но если положить на панель с градиентом, то получаешь мусор по краям.

Кто-нибудь боролся с этим?
Автор: volser
Дата сообщения: 25.11.2009 12:52
SergKhM
Привели бы скриншот ошибки. Может проблема в панели с градиентом?
Автор: SergKhM
Дата сообщения: 25.11.2009 18:05
Нет, проверил на LMD и TMS (да и на "своем" градиенте). Впервые проявилась на D2009.

Выглядит это как разноцветная рамка внутри, такое ощущение что эта область не очищается, но когда на этот элемент щелкнуть мышкой, то все ок.

Автор: baic
Дата сообщения: 25.11.2009 18:16
EhLib 5.1.29

В Demo проекте при попытке выделить всю строку вылетает ошибка...

List index out of bounds (-1).


может кто по-борол...поделитесь плиз
Автор: snike555
Дата сообщения: 27.11.2009 22:45
Огласите пожалуйста что нового в EhLib 5.1.29 по сравнению с 5.0
Автор: fcdobpiy
Дата сообщения: 28.11.2009 08:58
[more=изменения]Версия 5.1

+ В TColumnEhRestoreParam добавлено значение crpRowPanelColPlacementEh,
в тип TDBGridEhRestoreParam добавлено значение grpRowPanelColPlacementEh.
Теперь в процедурах RestoreGridLayout можно востанавливать положение ячеек
в режиме RowPanel.

+ Добавлено public свойство RowDetailPanelControl. Используйте это свойство чтобы
добавлять компоненты на панель детальной информации в режиме RunTime.
Для добавления компонентов на RowDetailPanel используйте следующий код
MyControl.Parent := DBGridEh1.RowDetailPanelControl;

+ В свойство Grid.STFilter добавлено подсвойство
InstantApply: Boolean - определяет что фильтр будет применяться сразу при
изменении или закрытии выпадающего списка значений для фильтрации
(STFilter).
Location: TSTFilterLocationEh - определяет месотоположение STFilter'а.
Под заголовком (stflUnderTitleFilterEh) или в заголовке
(stflInTitleFilterEh). В режиме 'в заголовке' STFilter не поддерживает
встроенную строку ввода фильтра.

+ Изменился интерфейс отображения выпадающего списка в SubTitleFilter.
Теперь можно галочками выбирать небоходимые значения для фильтрации.
В списке появился пункт (Custom...). При выборе этого появляется
простой диалог задания фильтра.

+ В режиме автоматического формирования списка значений для выподающего
фильтра (Когда грид подключен к MemTableEh) список формируется с учетом
наложенного фильтра в других колонках.

+ Глобальная перерменная DBGridEhShowInTitleFilterBox. Содержить комбинацию
клавишь для открытия выпадающего списка фильтрации значений когда
STFilter.Location = stflInTitleFilterEh. По умолчанию содержить значение
'Ctrl-T'.

+ Определен новый тип события
TDBGridEhFillSTFilterListValuesEvent = procedure(Sender: TCustomDBGridEh;
Column: TColumnEh; Items: TStrings; var Processed: Boolean) of object;

Событие этого типа добавлено в Grid (TDBGridEh.OnFillSTFilterListValues),
в колонку грида (TColumnEh.OnFillSTFilterListValues) и в TDBGridEhCenter
(TDBGridEhCenter.OnFillSTFilterListValues)
Напишите обработчик этого события чтобы изменить алгоритм заполнения
выпадающего списка значений в ячейки задания фильтра (STFilter). В событии
вы можете вызвать обработчик события по умолчанию
DefaultFillSTFilterListValues. Каждый элемент списка Items должен состоять
из двух значений: Строки Items[i] и объекта Items.Objects[i]. Элементы
объектного типа должны наследоваться от типа TPopupListboxItemEh и должны
быть созданы глобально. В модуле DBGridEh уже предопределны следующие
глобальные переменные
PopupListboxItemEhSortAsc: TPopupListboxItemEhSort;
// Элемент списка отображает значек сортировки Asc и выполеняет
сортировку по возрастанию.
PopupListboxItemEhSortDes: TPopupListboxItemEhSort;
// Элемент списка отображает значек сортировки Des и выполеняет
сортировку по убыванию.
PopupListboxItemEhLine: TPopupListboxItemEhLine;
// Элемент списка отображает горизональную линию. При выборе не
выполеняет никаких действий.

PopupListboxItemEhClearFilter: TPopupListboxItemEhSpec;
PopupListboxItemEhAll: TPopupListboxItemEhSpec;
PopupListboxItemEhEmpties: TPopupListboxItemEhSpec;
PopupListboxItemEhNotEmties: TPopupListboxItemEhSpec;
PopupListboxItemEhDialog: TPopupListboxItemEhSpec;
PopupListboxItemEhApplyFilter: TPopupListboxItemEhSpec;

PopupListboxItemEhData: TPopupListboxItemEhData;
// Элемент списка отображает текст определяющий значение для фильтрации.
При выборе, помечает текущий элемент галочкой и добавляет в список
элементов, которые задают значения для фильтрации.

+ В TDBGridEhCenter добавлены свойства STFilterDefaultStringOperator,
STFilterDefaultNumberOperator, STFilterDefaultDateTimeOperator,
STFilterDefaultBooleanOperator. Используйте эти свойства чтобы задать
оператор по умолчанию который будет использоваться когда в строке
фильтрации STFilter явно не прописывается оператор. Операторы можно задать
отдельно для строковых полей, числовых полей, полей типа DateTime и
логических.
[/more]
Автор: snike555
Дата сообщения: 28.11.2009 11:57
fcdobpiy

Цитата:
изменения

Спасибо, класс!
Автор: MikhR
Дата сообщения: 30.11.2009 14:27
Люди помогите
в общем есть ехлибовский грид , включена опция multiSelect.
при добавлении новой строки выделялся весь грид!
в Ехлиб 3.6 была исправлено следующим образом - на событие OnSelectionChanged было навешано условие SelectedRows.Clear
и все работало.

Вот на днях поставил новый ехлиб 5.0.13 теперь при попытке добавить строку - из этого события OnSelectionChanged не выходит - зацикливается...
ЗЫ продублировал вопрос)
Автор: snike555
Дата сообщения: 30.11.2009 20:09
Ну поставь условие что делать клир только если есть выделенные строки.
Автор: MikhR
Дата сообщения: 01.12.2009 05:58

Цитата:
Ну поставь условие что делать клир только если есть выделенные строки.

ну саму проблему вроде как решил но непонятка осталась с событием OnSelectionChanged и почему в версии 3.6 нормально из него выходит а в последующих зацикливается?
Автор: snike555
Дата сообщения: 01.12.2009 08:46
сколько версий прошло, я тебе что больше не работает могу кучу примеров привести.
Автор: greenpc
Дата сообщения: 01.12.2009 11:29
MikhR

Цитата:
при добавлении новой строки ... на событие OnSelectionChanged было навешано условие SelectedRows.Clear

а если поставить это на DataSource.afterinsert (.beforeInsert) наверное так будет правильнее
ОФФ
snike555
не понял смысл вашего поста.
а ВЫ являетесь разработчиком еха? Хотя посмотрел другой топ где вы собираетесь покупать сабж.

Страницы: 1234567891011121314151617181920212223

Предыдущая тема: Конвертация char в ASCII код; c


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.