Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / DevExpress - tcxBarEditItem не очищает значение, если он в фокусе / 19 сообщений из 19, страница 1 из 1
19.06.2018, 02:34
    #39662230
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
На две кнопки повесил два события: - на первую "..." - выбор из диалогового окна,
на вторую "x" - очистка контрола.
Первая работает хорошо - выбираешь значение из диалога, и оно подставляется в контрол (здесь: Взвешивание).
Но вторая очищает внутренние переменные, как и требуется, но сам контрол не очищает.
Многочисленными экспериментами было установлено, что если событие очищения вешаешь на кнопку ВНЕ контрола (на рисунке правая синяя стрелка), то контрол очищается нормально. Т.е. если событие инициировано изнутри контрола, он находится в фокусе, то он не очищается. Вышел из положение следующим образом: при нажатии этого крестика сначала принудительно смещаю фокус на соседний контрол, потом вызываю очищение - так работает. Но это "костыль". Можно ли как-то добиться правильной работы самого элемента tcxBarEditItem без таких танцев с бубном?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
procedure TfmTehnicProcess.actClearReportCodeExecute(Sender: TObject);
begin
  EditFindTehnicProcessName.SetFocus(); // принудительно уводим фокус на другой контрол, иначе не очищается
  FindReportCodeId := 0;
end;

procedure TfmTehnicProcess.SetFindReportCodeId(const Value: integer);
var
  q: TBISMySQLQuery;
begin
  FFindReportCodeId := Value;
  if FFindReportCodeId = 0 then
    begin
      EditFindReportCode.EditValue := '';
    end
  else
    begin
      q := TBISMySQLQuery.Create;
      try
        q.From('report_code', 'rc');
        q.Find(FFindReportCodeId);
        EditFindReportCode.EditValue := q.GetVal('report_code_name');
      finally
        q.Free;
      end;
    end;
  UpdateData;
end;


Первая кнопка "..." работает нормально только потому, что при ее нажатии вызывается диалоговое окно, и фокус, соответственно с контрола убирается.
...
Рейтинг: 0 / 0
19.06.2018, 05:31
    #39662241
ma1tus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
svnvlad,
https://www.devexpress.com/Support/Center/Question/Details/Q255800/setting-and-clearing-the-tcxbaredititem-content
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
uses
  cxEdit;

procedure TForm2.cxBarEditItem1PropertiesButtonClick(Sender: TObject;
  AButtonIndex: Integer);
begin
  case AButtonIndex of 
    // ...
    1:
    begin
      TcxCustomEdit(Sender).EditValue := Null;
    end;
  end;
end;
...
Рейтинг: 0 / 0
19.06.2018, 13:01
    #39662400
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
ma1tus, ну там же написано
// Only when the focus goes to another component the control's text is appears empty
TcxCustomEdit(Sender).EditValue := Null;

Я Null тоже прописывал, поведение не изменялось. Работало только тогда, когда фокус был вне компонента.
...
Рейтинг: 0 / 0
19.06.2018, 13:14
    #39662416
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
Причем в этом примере написано, что компонент корректно отобразит изменения только, если он потеряет фокус. В примере все работает, но фокус ведь продолжает оставаться (курсор мигает внутри). Как это так?
...
Рейтинг: 0 / 0
19.06.2018, 13:41
    #39662450
AJi
AJi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
Попробуйте так:
Код: sql
1.
2.
TcxCustomEdit(Sender).EditValue := Null;
TcxCustomEdit(Sender).PostEditValue;
...
Рейтинг: 0 / 0
19.06.2018, 13:45
    #39662455
ma1tus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
svnvladв этом примере написано, что компонент корректно отобразит изменения только, если он потеряет фокусТС-ом на том форуме
svnvladно фокус ведь продолжает оставаться (курсор мигает внутри). Как это так?и оставлено без изменений автором ответа
...
Рейтинг: 0 / 0
20.06.2018, 05:11
    #39662777
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
ma1tus,

Вызывает ошибку
...
Рейтинг: 0 / 0
20.06.2018, 06:40
    #39662792
ma1tus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
svnvlad,

Не очевидно, как у вас вызывается actClearReportCodeExecute. На всякий: Using the Sender Parameter

Этот код для обработчика кнопки у самого компонента:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
    object cxBarEditItem1: TcxBarEditItem
      Caption = 'New Item'
      Category = 0
      Hint = 'New Item'
      Visible = ivAlways
      PropertiesClassName = 'TcxButtonEditProperties'
      Properties.Buttons = <
        item
          Default = True
          Kind = bkEllipsis
        end>
      Properties.OnButtonClick = cxBarEditItem1PropertiesButtonClick
    end



Для "доступа снаружи"... что-нибудь вроде (ExpressBars 17.2.7):
Код: pascal
1.
2.
3.
4.
5.
procedure TForm1.Action2Execute(Sender: TObject);
begin
  cxBarEditItem1.SetFocus(); // чтобы "появился" Edit
  TcxBarEditItemControl(cxBarEditItem1.Links[0].Control).Edit.EditValue := Null;
end;
...
Рейтинг: 0 / 0
20.06.2018, 07:03
    #39662800
ma1tus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
ma1tusДля "доступа снаружи"К TcxCustomEdit
...
Рейтинг: 0 / 0
20.06.2018, 13:59
    #39663031
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
ma1tus,
клево!
Вот так работает:
Код: pascal
1.
2.
3.
4.
procedure TForm1.Action2Execute(Sender: TObject);
begin
  TcxBarEditItemControl(cxBarEditItem1.Links[0].Control).Edit.EditValue := Null;
end;


даже без этого:
Код: pascal
1.
  cxBarEditItem1.SetFocus(); // чтобы "появился" Edit


Видимо фокус уже находится на нем, раз нажали его кнопку.
А зачем фокус, он разве без фокуса не способен присваивать значение?
И что такое Links[0].Control?
...
Рейтинг: 0 / 0
20.06.2018, 14:02
    #39663032
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
Спасибо!
...
Рейтинг: 0 / 0
20.06.2018, 15:17
    #39663105
ma1tus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
svnvladраз нажали его кнопку.В той версии, где проверял, "Inner"Edit'у присваивается nil после ухода фокуса, и на кнопки ButtonEdit'a не предусмотрено назначение экшенов... хотя, если, зачем-либо, вызывать ActionExecute из ButtonClick... )
...
Рейтинг: 0 / 0
20.06.2018, 15:27
    #39663117
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
Проверить настройку AlwaysSaveText, по которой можно отключить/включить очистку текстового поля в баре при потере фокуса.
...
Рейтинг: 0 / 0
20.06.2018, 15:29
    #39663122
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
ma1tussvnvladраз нажали его кнопку.В той версии, где проверял, "Inner"Edit'у присваивается nil после ухода фокуса, и на кнопки ButtonEdit'a не предусмотрено назначение экшенов... хотя, если, зачем-либо, вызывать ActionExecute из ButtonClick... )
Дык, контрол с редактором создается динамически поверх бара только в момент фокусировки, до этого его просто не существует (InnerEdit = nil).
...
Рейтинг: 0 / 0
20.06.2018, 16:01
    #39663147
ma1tus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
JaDiДык, ...Вроде того, потом подставляется из созданныхJaDiAlwaysSaveTextУ ТС'а до смены значения не доходитsvnvladLinks[0].ControlВ хелпе же)
...
Рейтинг: 0 / 0
20.06.2018, 16:41
    #39663174
shaposh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
Установите у соответсвующего tdxBarManager значение AlwaysSaveText в true
...
Рейтинг: 0 / 0
21.06.2018, 05:24
    #39663349
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
shaposhУстановите у соответсвующего tdxBarManager значение AlwaysSaveText в true
Установлено.
...
Рейтинг: 0 / 0
21.06.2018, 05:26
    #39663350
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
JaDiДык, контрол с редактором создается динамически поверх бара только в момент фокусировки, до этого его просто не существует (InnerEdit = nil).
Визуально существует, а на самом деле не существует?
...
Рейтинг: 0 / 0
21.06.2018, 05:58
    #39663352
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DevExpress - tcxBarEditItem не очищает значение, если он в фокусе
На самом деле еще проверку на Nil надо делать, иначе, если это диалоговое окно и фильтр назначается извне, то происходит Access violation.
Код: pascal
1.
2.
if Assigned(TcxBarEditItemControl(EditFindReportCode.Links[0].Control).Edit) then
        TcxBarEditItemControl(EditFindReportCode.Links[0].Control).Edit.EditValue := Null;
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / DevExpress - tcxBarEditItem не очищает значение, если он в фокусе / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]