Уже недели две долблюсь об стенку, никак не пойму в чём дело, какой-то непонятный глюк, поэтому прошу помощи!
На форме есть поля TEdit 3 штуки.
При вводе значений происходит запрос к базе данных и отображение отфильтрованного в DBGrid под ними.
Если запрос выдаёт 0 записей, то значения в этих полях - новые и в последствии будут вноситься в базу.. Когда запрос выдал 0 записей, то под третьим (последним) TEDit появляется DBLookupComboBox, содержащий отфильтрованный по третьему полю список компаний, к которой принадлежит филиал компании, который хотим добавить...
(например, филиал: ЮНГ=ОАО "Юганскнефтегаз", а принадлежит к компании РОСНЕФТЬ...)
//процедура при изменении любого из трёх полей ввода
Код:
procedure TFaddeditoiljob.edt_Change(Sender: TObject);
var
pos:Integer;
sndr:TEdit;
begin
//Запоминаем позицию курсора в поле ввода
pos:=(Sender as TEdit).SelStart;
//Сворачиваем комбобокс
if dbcbb_companies1.Visible then dbcbb_companies1.CloseUp(false);
//Фильтруем (запрос филиалов для таблицы)
if (Sender=edt_branchname1) or (Sender=edt_branchfullname1) or (Sender=edt_company1) then BranchesFilter(1);
//Комбобокс видим когда филиала не найдено и (значение в третьем поле не равно значению в комбобоксе или в комбобоксе более одного значения)
dbcbb_companies1.Visible:=(mrdm.qr_branches1.RecordCount=0) and
((AnsiUpperCase(edt_company1.Text)<>AnsiUpperCase(mrdm.qr_companies1.FieldByName('company').AsString)) or
(dbcbb_companies1.ListSource.DataSet.RecordCount>1));
edt_companyClick(Sender as TEdit);
(Sender as TEdit).SetFocus;
(Sender as TEdit).SelStart:=pos;
end;
Процедура возникает при клике на третьем поле, чтобы сразу раскрывался комбобокс. Также эта процедура вызывается из предудущей процедуры когда происходит фильтрация по другим полям
Код:
procedure TFaddeditoiljob.edt_companyClick(Sender: TObject);
begin
//сначала сворачиваем без подтверждения
if dbcbb_companies1.Visible then dbcbb_companies1.CloseUp(false);
//если комбобокс виден, то раскрываем его
if (Sender=edt_company1) or (Sender=edt_branchname1) or (Sender=edt_branchfullname1)then
if dbcbb_companies1.Visible then dbcbb_companies1.DropDown;
end;
Теперь сама проблема: проблема в том, что почему-то разворачивание списка происходит через раз при вызове из предудыщей процедуры... То есть видно, как он быстро разворачивается и сворачивается обратно... При этом пропадает возвращение фокуса ввода в это поле
Код:
(Sender as TEdit).SetFocus;
(Sender as TEdit).SelStart:=pos;