Попробуйте через конструкцию с макросами, типа такого, для примера:
//+------------------------------------------------------------------+ //| Class IntegralCControlsDialog | //| Usage: main dialog of the Controls application | //+------------------------------------------------------------------+ class IntegralCControlsDialog : public CAppDialog { public: CEdit m_edit; public: IntegralCControlsDialog(void); ~IntegralCControlsDialog(void); //--- create virtual bool Create(const long chart,const string name,const int subwin,const int x1,const int y1,const int x2,const int y2); //--- chart event handler virtual bool OnEvent(const int id,const long &lparam,const double &dparam,const string &sparam); public: void OnChangeComboBox(void); void OnClickButton(void); void OnEndEditEdit(void); }; //+------------------------------------------------------------------+ //| Event Handling | //+------------------------------------------------------------------+ EVENT_MAP_BEGIN(IntegralCControlsDialog) ON_EVENT(ON_CHANGE,m_combo_box,OnChangeComboBox) ON_EVENT(ON_CLICK,m_button,OnClickButton) ON_EVENT(ON_END_EDIT,m_edit,OnEndEditEdit) - нужное событие EVENT_MAP_END(CAppDialog) void IntegralCControlsDialog::OnEndEditEdit(void) { тут то что происходит при срабатывании события конца редактирования поля ввода. Например, добавить метод класса, который реализует ON_START_EDIT следующего контрола }
IntegralCControlsDialog ExtDialog;
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { ExtDialog.OnEvent(id,lparam,dparam,sparam); }
Генерация события не поможет. Если объект генерирует событие, это совсем не значит, что он на него реагирует.
Генерация события не поможет. Если объект генерирует событие, это совсем не значит, что он на него реагирует.
а если текст в элементе поменять программно события тоже не генерируются? тогда попадос
Если менять программно, то можно обойтись без события, потому-что и так понятно, когда текст изменился, потому-что сам менял.
Как понял, тут надо поставить фокус другому полю ввода, чтобы ввод продолжался в него. Что-то типа метода SetFocus() нужно.
Если менять программно, то можно обойтись без события, потому-что и так понятно, когда текст изменился, потому-что сам менял.
Как понял, тут надо поставить фокус другому полю ввода, чтобы ввод продолжался в него. Что-то типа метода SetFocus() нужно.
Да, нужно что-то типа SetFocus() или ON_START_EDIT. Однако, как выяснилось, генерации одного только ON_START_EDIT недостаточно, так как это событие с кодом 1005, а нужна связка из трех событий: с кодами 1, 4 и 1005. Или же каким-то образом сгенерировать клик мышью по эдиту. Пробовал через CHARTEVENT_OBJECT_CLICK - получается событие с кодом 1001, то есть это пользовательское событие, код которого (1) добавляется к 1000 (начало нумерации кодов пользовательских событий), а мне нужно сгенерировать событие не с кодом 1001, а именно с кодом 1.
Генерация событий в терминале не поможет. Клик мышью может быть, но это делается средствами Windows API. Переместить указатель мыши, сгенерировать событие нажатия кнопки.
Только зачем оно такое нужно... нужно иметь здоровые, естественные потребности.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Прошу помочь в решении задачи. Есть торговая панель, на которой расположено несколько графических объектов типа CEdit. Нужно чтобы после окончания введения данных в один из Edit'ов и нажатия на клавишу (например, TAB) фокус переходил к следующему Edit'у.
Если кликнуть мышью на Edit, то в логе можно увидеть три строки (см.скриншот) с кодами событий 1, 4 и 1005. А после окончания ввода данных (END_EDIT) - две строки с кодами событий 3 и 1006.
Я пытаюсь привязать окончание ввода данных в один Edit к активации другого Edit'а, чтобы он перешел в состояние ON_START_EDIT.
Пробовал через EventChartCustom(INTERNAL_EVENT,ON_START_EDIT,560,175,m_name+"m_EdtLossQuanUnits"); - генерируется одна из трех необходимых строк, которые видны на скриншоте - с кодом события 1005. Как сгенерировать события с кодами 1 и 4, если события пользователя начинаются с 1000?
EventChartCustom(INTERNAL_EVENT,CHARTEVENT_OBJECT_CLICK,560,175,m_name+"m_EdtLossQuanUnits"); тоже не подходит.