![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как найти и подсветить компоненты
Александр_2012 © (2013-02-04 16:18:00)Доброго дня.
Задача: есть компонент PageControl, на нескольких страницах которого расположены компоненты DBEdit. Программа проверяет логику заполнения (зависимости между различными полями БД) и выводит сообщения в Memo обо всех несоответствиях. Есть StringList куда прописываются наименования полей, в которых допущена ошибка в логике заполнения. Это всё работает. Хотелось бы при двойном щелчке на сообщении в Memo чтобы производился поиск по всем страницам PageControl компонентов DBEdit, которые относятся к полям неправильно заполненным (с нарушением логики заполнения) и чтобы эти компоненты были подсвечены, например цветом шрифта, чтобы пользователь сразу мог определить где сделана ошибка. Не могу сообразить как это сделать, но уверен, что вполне возможно.
Игорь Шевченко (2013-02-04 18:03:00) [41]
> Мне кажется, что здесь скорее подходит что-то типа FindComponent,
> но как это реализовать пока не понимаю.
RTFS: DBCtrls.pas, FocusControl
Александр_2012 (2013-02-04 17:32:00) [42]
> procedure TForm1.DBEdit1Change(Sender: TObject);
> begin
> with TDBEdit(Sender) do
> if Field.AsInteger in [6..16]
> then Color:= clRed
> else Color:= clWindow;
> end;
>
Ммм. Я, наверное, не понял кода. Или не поняли меня. Проверка на допустимость диапазонов значений для каждого поля БД у меня есть и работает. Есть также проверка, реализуемая SQL-запросами, о допустимых значениях одного поля, если другое приняло определённое значение. Реализовывать в виде фильтров это сложно или вообще невозможно, т.к. зависимости реально могут быть и между двумя и трем и более полями БД.
Мне нужно программным путём найти компонент (или компоненты) типа DBEdit, к которому (или к к которым) привязано поле БД, заполненное неправильно. Мне кажется, что здесь скорее подходит что-то типа FindComponent, но как это реализовать пока не понимаю.
Игорь Шевченко (2013-02-04 17:25:00) [43]
> Разве DataSet об этом знает?
TField.FocusControl ?
Плохиш (2013-02-04 17:20:00) [44]TDBEdit.Field - поле в запросе к которому подключён элемент редактирования.
TDBEdit.DataSource - источник данных для элемента редактирования.
sniknik (2013-02-04 17:17:00) [45]
procedure TForm1.DBEdit1Change(Sender: TObject);
begin
with TDBEdit(Sender) do
if Field.AsInteger in [6..16]
then Color:= clRed
else Color:= clWindow;
end;
Александр_2012 (2013-02-04 17:01:00) [46]
> Inovet © (04.02.13 16:55) [3]
>
> Проверка на уровне ДатаСет? В нём можно посмотреть, что
> там подключено к полям для редактирования.
Не понял. Например, у меня поле TOVAR связано с компонентом DBEdit25. Я получаю информацию, что ошибочно заполнено поле TOVAR, значит мне надо найти на какой странице находится DBEdit25 и подсветить его. Разве DataSet об этом знает?
Inovet (2013-02-04 16:55:00) [47]Проверка на уровне ДатаСет? В нём можно посмотреть, что там подключено к полям для редактирования.
Александр_2012 (2013-02-04 16:46:00) [48]В БД есть таблица, состоящая из двух полей: в одном SQL-запрос, которым проверяется логика заполнения, в другом сообщение, которое будет выдано в случае ошибки. Проблема в том, что компонентов DBEdit много и они просто пронумерованы в соответствии с принятой формой отчетности. Поэтому оператор получив сообщение типа "данный товар не может иметь указанный артикул" вынужден брать бумажный вариант формы и искать какому полям (DBEdit) соответствует данное сообщение, что неудобно. У меня по двойному щелчку по строке сообщения в Memo в StringList из SQL-запроса (см. выше) прописываются имена всех проверяемых полей в данном запросе. Т.е. имена полей где допущены ошибки заполнения у меня уже есть. Надо найти и подсветить компоненты DBEdit, которые связаны с данными полями.
Cobalt (2013-02-04 16:32:00) [49]TMemo.SelText тебе в руки
или SelStart