Valdemar |
Отправлено: 21.03.2007, 11:35 |
|
Мастер участка
Группа: Участник
Сообщений: 433
|
Я использую поиск в DBGridEh по комбинации клавиш Ctrl+F.
Можно ли программно установить поле, по которому будет происходить поиск? По умолчанию для поиска выбирается поле, которое было выделено в DBGridEh, а если для таблицы установлено выделение строки, то всегда получается выделена первая колонка. |
|
olegenty |
Отправлено: 21.03.2007, 11:57 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
ExecuteDBGridEhFindDialogProc(грид, текст, поле, массив колонок, признак модальности). см. сорцы и разберёшься.
|
|
Valdemar |
Отправлено: 21.03.2007, 13:12 |
|
Мастер участка
Группа: Участник
Сообщений: 433
|
Спасибо. Буду разбираться. |
|
Valdemar |
Отправлено: 21.03.2007, 14:36 |
|
Мастер участка
Группа: Участник
Сообщений: 433
|
Что-то не получилось у меня.
Делал так:
CODE | TColumnFieldItemEh f;
f.Caption="Название"; //заголовок поля
f.Column=docsDBGridEh->Columns->Items[1]; //колонка (поле), по которому хочу искать
DynamicArray<TColumnFieldItemEh> arrayFields;
arrayFields.Length=1; //искать только по одному полю
arrayFields[0]=f;
ExecuteDBGridEhFindDialogProc(docsDBGridEh,
"", //текст для поиска
"name", //имя поля
arrayFields,
false); |
Эффекта никакого. Появляется окно поиска, в котором выбрано поле, являющееся текущим в гриде, и в списке полей для поиска перечислены все поля, а не одно как ожидалось.
P.S. EhLib 4.1.4 |
|
olegenty |
Отправлено: 21.03.2007, 18:17 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
посмотрел сорцы:
CODE |
cbFindIn.ItemIndex := cbFindIn.Items.IndexOf(FGrid.Columns[FGrid.SelectedIndex].Title.Caption);
|
никакой ориентации ни на FieldName, ни на массив колонок. жестоко, но выходит никак.
|
|
Valdemar |
Отправлено: 22.03.2007, 08:49 |
|
Мастер участка
Группа: Участник
Сообщений: 433
|
Жаль. |
|
olegenty |
Отправлено: 22.03.2007, 09:31 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
Но! Ты можешь САМ написать поисковую функцию требуемого типа и в рантайме заменить ExecuteDBGridEhFindDialogProc на указатель на свою функцию. Только сорцы долго ковырять придётся...
|
|
AVC |
Отправлено: 22.03.2007, 09:47 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
QUOTE |
Но! Ты можешь САМ написать поисковую функцию требуемого типа и в рантайме заменить ExecuteDBGridEhFindDialogProc на указатель на свою функцию. Только сорцы долго ковырять придётся...
|
Не совсем в тему.
Когда-то давным давно на TC и некоторых других компиляторах (скорее построителях) можно было перекрывать функции задавая линковщику порядок подключаемых модулей.
Что имеется ввиду:
Допустим мне нужно подменить функцию Aaa из модуля M1. Я пишу свою Ааа, оформляю её в отдельный файл А1.obj, а линковщику ставлю А1.obj раньше M1. Построитель немного ругается, но включает в приложение первое встреченное определение Aaa (моё).
Никто такое в Buildere не исследовал? |
|
olegenty |
Отправлено: 22.03.2007, 10:37 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
ExecuteDBGridEhFindDialogProc — глобальная переменная типа указатель на функцию. ею пользоваться вообще не обязательно. она инициализируется адресом вполне конкретной функции. можно просто разработать свою функцию, воспользовавшись поисковой формой Дмитрия, всего лишь переопределив инициализацию поисковой формы, после чего пользоваться своей функцией, а не указанным выше глобальным указателем.
2 AVC — не-а, я не сталкивался с такой фичей.
|
|