Перейти к содержимому

Фотография

Скрипт для обработки пользовательской формы


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 6

#1 mskffo

mskffo

    Новый участник

  • Members
  • Pip
  • 63 сообщений
  • ФИО:Мария
  • Город:Москва

Отправлено 13 июня 2012 - 08:02

Доброго времени суток, дамы и господа.
При запуске скрипта открывается форма (скрин приложила).
В TextEdit нужно ввести произвольный номер проекта, состоящий только из 6 цифр. По кнопке "ОК" форма закрывается и введенное значение присваивается глобальной переменной NumProject. По кнопке "Отмена" форма закрывается, скрипт останавливается. По кнопке "Очистить" поле TextEdit очищается.
Помогите, плиз, как описать эти действия с формой.

Прикрепленные файлы

  • Прикрепленный файл  Форма.JPG   30,92К   19 Количество загрузок:

  • 0

#2 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 13 июня 2012 - 11:44

Сначала общие советы/замечания:
  • Кнопке "Отмена" поставьте ModalResult = mrCancel, Cancel = True.
  • Вместо TextEdit + кнопка я бы посоветовала использовать компонент TcxButtonEdit, в котором кнопки встроенные. Зайдите в редактор свойства Properties.Buttons и установите кнопке Kind = bkText и Caption = Очистить. Получится так, как на скриншоте в аттаче.
    Так лучше в плане user experience - понятно, что кнопка "Очистить" относится именно к данному полю.
    К тому же, компоненту TcxButtonEdit можно назначить маску, чтобы запретить ввод невалидных символов (букв и т.п.).
  • На кнопку "OK" я бы навесила дополнительную проверку, что текст непустой.
Код - примерно так:
function Main() {
  var frm = UserForms.Form1;

  var res = frm.ShowModal();
  if (res == mrOk) {
    NumProject = parseInt(frm.cxButtonEdit1.Text);
  }
  else {
    Runner.Stop();
  }
}

// Этот обработчик надо прикрутить к событию OnButtonClick компонента TcxButtonEdit
function Form1_cxButtonEdit1_OnButtonClick(Sender, AButtonIndex) {
  UserForms.Form1.cxButtonEdit1.Text = "";
}

// Этот обработчик надо прикрутить к событию OnClick кнопки "ОК"
function Form1_cxButton1_OnClick(Sender) {
  if (UserForms.Form1.cxButtonEdit1.Text == "") {
    ShowMessage("Пожалуйста, введите номер проекта.");
  }
  else {
    UserForms.Form1.ModalResult = mrOk;
  }
 }
 

Прикрепленные файлы

  • Прикрепленный файл  ClearButton.png   23,88К   10 Количество загрузок:

  • 1

#3 mskffo

mskffo

    Новый участник

  • Members
  • Pip
  • 63 сообщений
  • ФИО:Мария
  • Город:Москва

Отправлено 13 июня 2012 - 13:09

Сначала общие советы/замечания:

  • Кнопке "Отмена" поставьте ModalResult = mrCancel, Cancel = True.
  • Вместо TextEdit + кнопка я бы посоветовала использовать компонент TcxButtonEdit, в котором кнопки встроенные. Зайдите в редактор свойства Properties.Buttons и установите кнопке Kind = bkText и Caption = Очистить. Получится так, как на скриншоте в аттаче.
    Так лучше в плане user experience - понятно, что кнопка "Очистить" относится именно к данному полю.
    К тому же, компоненту TcxButtonEdit можно назначить маску, чтобы запретить ввод невалидных символов (букв и т.п.).
  • На кнопку "OK" я бы навесила дополнительную проверку, что текст непустой.
Код - примерно так:
function Main() {
  var frm = UserForms.Form1;

  var res = frm.ShowModal();
  if (res == mrOk) {
    NumProject = parseInt(frm.cxButtonEdit1.Text);
  }
  else {
    Runner.Stop();
  }
}

// Этот обработчик надо прикрутить к событию OnButtonClick компонента TcxButtonEdit
function Form1_cxButtonEdit1_OnButtonClick(Sender, AButtonIndex) {
  UserForms.Form1.cxButtonEdit1.Text = "";
}

// Этот обработчик надо прикрутить к событию OnClick кнопки "ОК"
function Form1_cxButton1_OnClick(Sender) {
  if (UserForms.Form1.cxButtonEdit1.Text == "") {
    ShowMessage("Пожалуйста, введите номер проекта.");
  }
  else {
    UserForms.Form1.ModalResult = mrOk;
  }
 }
 

Спасибо, Ваш ответ очень помог.
Только у меня курсор в cxButtonEdit1 при открытии формы почему-то по центру устанавливается...
  • 0

#4 mskffo

mskffo

    Новый участник

  • Members
  • Pip
  • 63 сообщений
  • ФИО:Мария
  • Город:Москва

Отправлено 13 июня 2012 - 13:13

Сначала общие советы/замечания:

  • Кнопке "Отмена" поставьте ModalResult = mrCancel, Cancel = True.
  • Вместо TextEdit + кнопка я бы посоветовала использовать компонент TcxButtonEdit, в котором кнопки встроенные. Зайдите в редактор свойства Properties.Buttons и установите кнопке Kind = bkText и Caption = Очистить. Получится так, как на скриншоте в аттаче.
    Так лучше в плане user experience - понятно, что кнопка "Очистить" относится именно к данному полю.
    К тому же, компоненту TcxButtonEdit можно назначить маску, чтобы запретить ввод невалидных символов (букв и т.п.).
  • На кнопку "OK" я бы навесила дополнительную проверку, что текст непустой.
Код - примерно так:
function Main() {
  var frm = UserForms.Form1;

  var res = frm.ShowModal();
  if (res == mrOk) {
    NumProject = parseInt(frm.cxButtonEdit1.Text);
  }
  else {
    Runner.Stop();
  }
}

// Этот обработчик надо прикрутить к событию OnButtonClick компонента TcxButtonEdit
function Form1_cxButtonEdit1_OnButtonClick(Sender, AButtonIndex) {
  UserForms.Form1.cxButtonEdit1.Text = "";
}

// Этот обработчик надо прикрутить к событию OnClick кнопки "ОК"
function Form1_cxButton1_OnClick(Sender) {
  if (UserForms.Form1.cxButtonEdit1.Text == "") {
    ShowMessage("Пожалуйста, введите номер проекта.");
  }
  else {
    UserForms.Form1.ModalResult = mrOk;
  }
 }
 

Спасибо, Ваш ответ очень помог.
Только у меня после появления сообщения о вводе номера проекта и нажатия в нем кнопки "Ок" скрипт прерывается
  • 0

#5 mskffo

mskffo

    Новый участник

  • Members
  • Pip
  • 63 сообщений
  • ФИО:Мария
  • Город:Москва

Отправлено 13 июня 2012 - 13:18


Сначала общие советы/замечания:

  • Кнопке "Отмена" поставьте ModalResult = mrCancel, Cancel = True.
  • Вместо TextEdit + кнопка я бы посоветовала использовать компонент TcxButtonEdit, в котором кнопки встроенные. Зайдите в редактор свойства Properties.Buttons и установите кнопке Kind = bkText и Caption = Очистить. Получится так, как на скриншоте в аттаче.
    Так лучше в плане user experience - понятно, что кнопка "Очистить" относится именно к данному полю.
    К тому же, компоненту TcxButtonEdit можно назначить маску, чтобы запретить ввод невалидных символов (букв и т.п.).
  • На кнопку "OK" я бы навесила дополнительную проверку, что текст непустой.
Код - примерно так:
function Main() {
  var frm = UserForms.Form1;

  var res = frm.ShowModal();
  if (res == mrOk) {
    NumProject = parseInt(frm.cxButtonEdit1.Text);
  }
  else {
    Runner.Stop();
  }
}

// Этот обработчик надо прикрутить к событию OnButtonClick компонента TcxButtonEdit
function Form1_cxButtonEdit1_OnButtonClick(Sender, AButtonIndex) {
  UserForms.Form1.cxButtonEdit1.Text = "";
}

// Этот обработчик надо прикрутить к событию OnClick кнопки "ОК"
function Form1_cxButton1_OnClick(Sender) {
  if (UserForms.Form1.cxButtonEdit1.Text == "") {
    ShowMessage("Пожалуйста, введите номер проекта.");
  }
  else {
    UserForms.Form1.ModalResult = mrOk;
  }
 }
 

Спасибо, Ваш ответ очень помог.
Только у меня курсор в cxButtonEdit1 при открытии формы почему-то по центру устанавливается...

Здесь сама виновата...пробелы в свойстве "Text" стояли
  • 0

#6 mskffo

mskffo

    Новый участник

  • Members
  • Pip
  • 63 сообщений
  • ФИО:Мария
  • Город:Москва

Отправлено 14 июня 2012 - 11:04

Коллеги, а есть ли какой-нибудь способ дефолтной установки курсора в объект ButtonEdit при открытии пользовательской формы?
  • 0

#7 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 14 июня 2012 - 11:22

Коллеги, а есть ли какой-нибудь способ дефолтной установки курсора в объект ButtonEdit при открытии пользовательской формы?

Поставьте ему TabOrder = 0:

The component which has a tab index of 0, is focused when the form is displayed on the screen.


  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных