Последняя версия DataExpress 3 beta от 15 июня 2019 года.
Изображение Скачать | Изображение Что нового?
См. также: Энциклопедия DX | Форум на develop-soft | Песочница
ИзображениеИзображениеИзображение

Tdx-компонент внутри динамической формы

Вопросы о применении того или иного класса или функции.
Аватара пользователя
YurAnt
Эксперт
Сообщения: 3361
Зарегистрирован: Чт апр 13, 2017 8:57 am
Поблагодарили: 1 раз
Контактная информация:

Tdx-компонент внутри динамической формы

Сообщение YurAnt » Чт ноя 23, 2017 11:06 am

Ввиду отсутствия в VCL-наборе компонента "дата" решил попробовать TdxDateEdit. Компонент создал, на динамическую форму положил... Дальше затык. При выборе даты и потере фокуса поле очищается. Если правильно понимаю - для корректной работы компонент необходимо преобразовать в TField, но как это сделать? Можно подсказать маленький пример?

Код: Выделить всё

W:=TForm.Create(nil);
...
Dt1:=TdxDateEdit.Create(W); Dt1.Parent:=W; Dt1.Top:=4; Dt1.Left:=4
Dt2:=TdxDateEdit.Create(W); Dt2.Parent:=W; Dt2.Top:=4; Dt2.Left:=150;

// Пф-ф-ф... ((

Аватара пользователя
admin
Разработчик
Сообщения: 4410
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская
Благодарил (а): 12 раз
Поблагодарили: 41 раз

Re: Tdx-компонент внутри динамической формы

Сообщение admin » Чт ноя 23, 2017 11:09 am

Никак. dx-компоненты привязаны к датасету. А вот TFormView вполне можно разместить на обычной форме (окне).

Аватара пользователя
YurAnt
Эксперт
Сообщения: 3361
Зарегистрирован: Чт апр 13, 2017 8:57 am
Поблагодарили: 1 раз
Контактная информация:

Re: Tdx-компонент внутри динамической формы

Сообщение YurAnt » Чт ноя 23, 2017 11:13 am

admin писал(а):А вот TFormView вполне можно разместить на обычной форме (окне).

Т.е. - создать некоторое подобие "простой формы"? Так это же намного "проще" :lol: (Блин, ну буду пробовать разобраться :()

Vofka18
Интересующийся
Сообщения: 216
Зарегистрирован: Вс мар 04, 2018 4:54 pm
Благодарил (а): 3 раза

Re: Tdx-компонент внутри динамической формы

Сообщение Vofka18 » Вт мар 05, 2019 3:51 pm

Так сказать, подниму старую тему :-)
Подскажите не появилась ли возможность использовать dateEdit и timeEdit в собственном окне.
Мне нужно создать свое диалоговое окно в котором пользователь должен будет выбрать дату и время.
С FormView я что-то не совсем понял...

Аватара пользователя
admin
Разработчик
Сообщения: 4410
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская
Благодарил (а): 12 раз
Поблагодарили: 41 раз

Re: Tdx-компонент внутри динамической формы

Сообщение admin » Вт мар 05, 2019 6:14 pm

Вы можете задать TFormView любое окно в качестве родителя.

Код: Выделить всё

var
   W: TWindow;
   FV: TFormView;
begin
   W := TWindow.Create;
   FW := TFormView.Create(W, 'Какая-то форма', vtSimpleForm);
   FW.Parent := W;
   FW.Align := alClient;
   W.ShowModal;
   W.Free;
end;

Vofka18
Интересующийся
Сообщения: 216
Зарегистрирован: Вс мар 04, 2018 4:54 pm
Благодарил (а): 3 раза

Re: Tdx-компонент внутри динамической формы

Сообщение Vofka18 » Вт мар 05, 2019 6:43 pm

admin писал(а):Вы можете задать TFormView любое окно в качестве родителя.

Код: Выделить всё

var
   W: TWindow;
   FV: TFormView;
begin
   W := TWindow.Create;
   FW := TFormView.Create(W, 'Какая-то форма', vtSimpleForm);
   FW.Parent := W;
   FW.Align := alClient;
   W.ShowModal;
   W.Free;
end;

Не могу понять какую форму нужно указать? Та поверх которой будет открываться диалог? Простите за глупый вопрос...

Аватара пользователя
Гocть
Эксперт
Сообщения: 1582
Зарегистрирован: Пн ноя 27, 2017 8:02 am
Поблагодарили: 4 раза

Re: Tdx-компонент внутри динамической формы

Сообщение Гocть » Вт мар 05, 2019 7:36 pm

Код: Выделить всё



procedure DateTimeSet(var Dt,Tm:variant);
 var
   W: TWindow; // динамически создаваемое окно
   FW: TFormView; // контейнер для TdxForm: должна быть заранее созданная в дизайнере форма "ДатаВремя" с полями "Дата" (тип: дата) и "Время" (тип: время)
begin
   W := TWindow.Create;  // создали динамическое окно
   W.Position:=poOwnerFormCenter; // пуст будет по центру родителя
   FW := TFormView.Create(W, 'ДатаВремя', vtSimpleForm); // создаем форму 'ДатаВремя'
   FW.Parent := W; // вставляем конейнер с TdxForm в динамическое окно.
   FW.Align := alClient; // растягиваем его на всю область окна
   FW.Form.Open; // открывается набор данных TdxForm для редактирования
   W.ShowModal; // Показываем динамическое окно в модальном режиме
   // устанавливаем переменные из полей "Дата", "Время" формы "ДатаВремя":
   Dt := FW.Form['Дата'];
   Tm := FW.Form['Время'];
   FW.Form.Close; // набор данных TdxForm закрывается для редактирования
   W.Free; // разрушается динамическое окно. Результаты остаются в переменных.
end;

procedure test(Sender: TObject);
  var Dt,Tm:variant;
begin
  DateTimeSet(Dt,Tm);
  debug(Dt)
  debug(Tm)
end;


procedure Form_Create;
begin
  dxButton1.OnClick:=@test;
end;
Фрилансер. Разработка на заказ. Консультирование.

Vofka18
Интересующийся
Сообщения: 216
Зарегистрирован: Вс мар 04, 2018 4:54 pm
Благодарил (а): 3 раза

Re: Tdx-компонент внутри динамической формы

Сообщение Vofka18 » Вт мар 05, 2019 7:44 pm

Гocть писал(а):

Код: Выделить всё



procedure DateTimeSet(var Dt,Tm:variant);
 var
   W: TWindow; // динамически создаваемое окно
   FW: TFormView; // контейнер для TdxForm: должна быть заранее созданная в дизайнере форма "ДатаВремя" с полями "Дата" (тип: дата) и "Время" (тип: время)
begin
   W := TWindow.Create;  // создали динамическое окно
   W.Position:=poOwnerFormCenter; // пуст будет по центру родителя
   FW := TFormView.Create(W, 'ДатаВремя', vtSimpleForm); // создаем форму 'ДатаВремя'
   FW.Parent := W; // вставляем конейнер с TdxForm в динамическое окно.
   FW.Align := alClient; // растягиваем его на всю область окна
   FW.Form.Open; // открывается набор данных TdxForm для редактирования
   W.ShowModal; // Показываем динамическое окно в модальном режиме
   // устанавливаем переменные из полей "Дата", "Время" формы "ДатаВремя":
   Dt := FW.Form['Дата'];
   Tm := FW.Form['Время'];
   FW.Form.Close; // набор данных TdxForm закрывается для редактирования
   W.Free; // разрушается динамическое окно. Результаты остаются в переменных.
end;

procedure test(Sender: TObject);
  var Dt,Tm:variant;
begin
  DateTimeSet(Dt,Tm);
  debug(Dt)
  debug(Tm)
end;


procedure Form_Create;
begin
  dxButton1.OnClick:=@test;
end;

Спасибо огромное, я не понял, что форму нужно в дизайнере создавать... Теперь все понятно. Спасибо ещё раз :-)

Аватара пользователя
Гocть
Эксперт
Сообщения: 1582
Зарегистрирован: Пн ноя 27, 2017 8:02 am
Поблагодарили: 4 раза

Re: Tdx-компонент внутри динамической формы

Сообщение Гocть » Вт мар 05, 2019 8:09 pm

Примерно то же самое:

Код: Выделить всё

procedure DateTimeSet(var Dt,Tm:variant);
var
  Fm: TdxForm;
begin
  Fm := TdxForm.Create('ДатаВремя');
  Fm.Open;
  Fm.Append;
  Fm.EditWindow.ShowModal;
  if Fm.EditWindow.ModalResult = mrOk then
  begin
    Dt := Fm['Дата'];
    Tm := Fm['Время'];
  end
  else
  begin
    Dt := null;
    Tm := null;
  end;
  Fm.Cancel;
  Fm.Close;
  Fm.Free;
end;
Фрилансер. Разработка на заказ. Консультирование.

Vofka18
Интересующийся
Сообщения: 216
Зарегистрирован: Вс мар 04, 2018 4:54 pm
Благодарил (а): 3 раза

Re: Tdx-компонент внутри динамической формы

Сообщение Vofka18 » Вт мар 05, 2019 8:30 pm

Спасибо!


Вернуться в «Вопросы по API DataExpress.»