Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.02.2014, 13:24
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
По умолчанию DBLookupComboBox сам быстро сворачивается обратно

Уже недели две долблюсь об стенку, никак не пойму в чём дело, какой-то непонятный глюк, поэтому прошу помощи!

На форме есть поля 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;

Последний раз редактировалось sorockinalex, 10.02.2014 в 13:29.
Ответить с цитированием
  #2  
Старый 10.02.2014, 13:39
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
По умолчанию

Ещё заметил, что самосворачивание происходит ровно через 1 раз... То есть один раз как положено сворачивается, а затем после фильтрации разворачивается, а на следующий раз происходит самосворачивание. А ещё более точно - когда список был развёрнут - тогда не разворачивается после сворачивания... Когда был свёрнут - всё работает...

Последний раз редактировалось sorockinalex, 10.02.2014 в 13:59.
Ответить с цитированием
  #3  
Старый 10.02.2014, 15:50
sorockinalex sorockinalex вне форума
Начинающий
 
Регистрация: 08.08.2012
Сообщения: 178
Репутация: 10
По умолчанию

каким-то чудесным образом разобрался )) дело в фокусе ввода. фокус ввода при сворачивании комбобоксов уходит на них. переместил восстановление фокуса и позиции курсора под строки сворачивания комбобоксов и всё работает!
Ответить с цитированием
  #4  
Старый 10.02.2014, 16:16
Аватар для Mrak
Mrak Mrak вне форума
Местный
 
Регистрация: 26.01.2013
Адрес: МО
Сообщения: 438
Версия Delphi: XE2
Репутация: 17
По умолчанию

обращайся еще!

но с красным перебор

p.s. неплохие статьи
http://habrahabr.ru/post/155085/
http://habrahabr.ru/post/208966/
__________________
Я за здоровый экстрим!
Спасибо за "спасибо")
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:05.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter