Добрый день.
Помогите пожалуйста в решении такой задачи:
На событии OnKeyUp проверяется некое условие, если оно верно, то в поле нужно вставить строку и продолжыть ввод текста с клавиатуры. Но при вставке строки, курсор оказывается в начале строки, а нужно чтобы он был в конце. Можно ли это реализовать? Можно ли вызвать событие то же событие, что выполняется при нажатии на кнопку END?
Terrasoft 3.4.0.130

Нравится

3 комментария

Здравствуйте, Юрий!

Для решения проблемы рекомендую Вам обновиться до последней версии 3.4.1.

Для того, чтобы получить файлы обновления на эту версию, обратитесь, пожалуйста, в службу поддержки Terrasoft - напишите электронное письмо на адрес: support@terrasoft.ru.

И как мне это поможет?

Здравствуйте, Юрий!

Я предположила, что в последней версии 3.4.1, данное событие отрабатывает иначе, чем в 3.4.0.130, но, к сожалению, в этой версии поведение курсора аналогичное.

Решить данную задачу можно таким образом.

Вместо контрола Edit используйте MemoControl. В обработчике OnKeyUp пропишите такой код:

function edtMemoControl1OnKeyUp(Control, Key, Shift) {
var saveValue = Control.Value;
Control.Value = "";
Control.SelectedText = "@" + saveValue;
}

Для того, чтобы в MemoControl не срабатывал переход на новую строку в свойстве WordWrap установить значение False и в обработчике события OnKeyPress написать код:

function edtMemoControl1OnKeyPress(Control, Char) {
if (Char.Value == 13) {
Char.Value = 0;
}
}

Показать все комментарии

Возникла задача изменить настраиваемое окно редактирования в БП таким образом, чтобы при допустимом количестве символов, превышающем 250, в окне формировался не 'TextDataControl' (как реализовано в базовой версии), а 'MemoDataControl'.
Решается задача модификацией логики function BuildDataControl(Window, ParentComponent, DatasetLink, DataField) сервиса wnd_CustomEditWindowScript.
Данная функция динамически создает и отрисовывает компоненты в настраиваемом окне редактирования.
Для решения задачи необходимо заменить функцию function BuildDataControl на приведенную ниже:

function BuildDataControl(Window, ParentComponent, DatasetLink, DataField) {
        var ComponentType = GetComponentTypeByDataField(DataField);
        if (IsEmptyStr(ComponentType)) {
                return;
        }
        var DataFieldName = DataField.Name;
        var ComponentName = GetControlName(Window, DataFieldName);
                if ((ComponentType == 'TextDataControl')&& (DataField.TextLength > 250)){
                 var Component = Window.CreateComponent('MemoDataControl', ComponentName);
                 Component.Height = 45;
                } else{
                var Component = Window.CreateComponent(ComponentType, ComponentName);
                }
        Component.DataFieldName = DataFieldName;
        Component.DatasetLink = DatasetLink;
        ParentComponent.Add(Component);
        Component.AlignHorizontal = alhClient;
        return Component;
}

Результат будет иметь вид:

/system/files/2_61.png

Нравится

Поделиться

0 комментариев
Показать все комментарии

Здраствуйте. Помогите узнать значение из TextDataControl чтобы передать это значение в фильтр ApplyDatasetFilter(Dataset,'PovtorPhone', TextDataControl.value?? , true);

Нравится

3 комментария

var TextValue = dlData.Dataset.Values('Имя поля Dataset-a подключенного к данному контролу');
Где dlData.Dataset - имя DatasetLink-а.
Соответствено:
ApplyDatasetFilter(Dataset,'PovtorPhone', TextValue, true);

Спасибо помогло

или var TextValue = TextDataControl.DataField.Value

Показать все комментарии