Форум: "Начинающим";
Текущий архив: 2005.12.04;
Скачать: [xml.tar.bz2];
ВнизВозврат значений формой... Найти похожие ветки
← →
MakNik (2005-11-15 11:34) [0]Есть форма, которая создается динамически. В форме выбирается 2-е даты. Затем эти даты нужно вернуть в первую форму. Подскажите, плз., как это правильно сделать?
← →
Digitman © (2005-11-15 11:40) [1]
> Есть форма, которая создается динамически
режим ее визуализации модальный ?
← →
MakNik (2005-11-15 11:47) [2]
> режим ее визуализации модальный ?
Да
← →
Digitman © (2005-11-15 11:55) [3]with TMyForm.Create(..) do
try
if ShowModal = mrOk then
begin
SelectedDate1 := DateTimePicker1.Date;
SelectedDate2 := DateTimePicker2.Date;
end;
finally
Free;
end;
здесь DateTimePicker1,2 - компоненты для выбора даты на создаваемой и вызываемой модально форме TMyForm, SelectedDate1,2 - переменные или поля поля класса вызывающей формы, в которые будут возвращены соответствующие выбранные юзером даты
← →
msguns © (2005-11-15 11:59) [4]>Digitman © (15.11.05 11:40) [1]
>режим ее визуализации модальный ?
Какая в принципе разница ?
По сабжу. Передачу значений можно осуществить в вызываемой форме присвоением значений параметрам, определенным:
а) глобально (не по-джидайски)
б) как поля объекта, существующего на момент вызова формы и "видимого" как из этой формы, так и из той, которая "принимает" переданные значения.
(Например, объявленные в гл.форме либо датамодуле переменные)
← →
Джо © (2005-11-15 12:00) [5]
> Подскажите, плз., как это правильно сделать?
Да по-разному можно.
Например, так:
В модуле с определением формы определяешь публичную функцию
function DisplayDateDialog (var Date1,Date2: TDateTime): Boolean;
var
Dlg: TDateDialog;
begin
Dlg := TDateDialog.Create(nil);
try
Dlg.DateTimePicker1.DateTime := Now();
Dlg.DateTimePicker2.DateTime := Now();
Result := Dlg.ShowModal = mrOK;
if Result then
begin
Date1 := Dlg.DateTimePicker1.DateTime;
Date2 := Dlg.DateTimePicker2.DateTime;
end;
finally
Dlg.Free;
end;
end;
← →
Джо © (2005-11-15 12:01) [6]
> [5] Джо © (15.11.05 12:00)
TDateDialog, разумеется -- класс этой самой модальной формы.
← →
Digitman © (2005-11-15 12:13) [7]
> msguns © (15.11.05 11:59) [4]
> Какая в принципе разница ?
в принципе - никакой.
но случае с модальным режимом итоговый код, реализующий сабж, до смешного примитивен.. что как вариант и было продемонстрировано выше
← →
MakNik (2005-11-15 12:31) [8]А как сделать для немодального режима?
← →
Ega23 © (2005-11-15 12:39) [9]
> А как сделать для немодального режима?
Да, в общем-то, также, как и для модального.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls;
type
TNonModalDateForm = class(TForm)
DateTimePicker1: TDateTimePicker;
DateTimePicker2: TDateTimePicker;
private
function GetDate1: TDateTime;
function GetDate2: TDateTime;
procedure SetDate1(const Value: TDateTime);
procedure SetDate2(const Value: TDateTime);
{ Private declarations }
public
{ Public declarations }
property Date1:TDateTime Read GetDate1 Write SetDate1;
property Date2:TDateTime Read GetDate2 Write SetDate2;
end;
var
NonModalDateForm: TNonModalDateForm;
implementation
{$R *.DFM}
{ TNonModalDateForm }
function TNonModalDateForm.GetDate1: TDateTime;
begin
Result:=DateTimePicker1.Date;
end;
function TNonModalDateForm.GetDate2: TDateTime;
begin
Result:=DateTimePicker2.Date;
end;
procedure TNonModalDateForm.SetDate1(const Value: TDateTime);
begin
DateTimePicker1.Date:=Value;
end;
procedure TNonModalDateForm.SetDate2(const Value: TDateTime);
begin
DateTimePicker2.Date:=Value;
end;
end.
← →
MakNik (2005-11-15 14:12) [10]... что-то я запутался...
Создаю форму для выбора интервала дат. на форме кнопка ОК при нажатии которой выполняетсяModalResult:=mrOK;
В форме, из которой вызывается диалог создаю
Dlg := TDateDialog.Create(nil);
With Dlg do
Begin
try
if ShowModal = mrOk then
begin
Этот пункт никогда не выполняется, хотя ошибка и не возникает...
....
end;
finally
Free;
end;
End;
...подозреваю что дело в том, как правильно присвоить ModalResult:=mrOK...
Подскажите,плз., как сделать правильно?
← →
Джо © (2005-11-15 14:16) [11]
> ОК при нажатии которой выполняется ModalResult:=mrOK;
Свойство ModalResult какого компонента ты меняешь? Может, кнопки?
← →
MakNik (2005-11-15 14:18) [12]... а как указать формы, чтобы форма того же класса, созданная под другим именем правильно работала?
← →
Плохиш © (2005-11-15 14:18) [13]
> MakNik (15.11.05 14:12) [10]
> ... что-то я запутался...
> Создаю форму для выбора интервала дат. на форме кнопка ОК
> при нажатии которой выполняется ModalResult:=mrOK;
Убери из этого обработчика Close
← →
Джо © (2005-11-15 14:19) [14]Ничего не понял.
← →
Джо © (2005-11-15 14:19) [15]
> [14] Джо © (15.11.05 14:19)
Это к [12] MakNik (15.11.05 14:18)
← →
Digitman © (2005-11-15 14:23) [16]
> MakNik (15.11.05 14:12) [10]
а при чем тогда немодальный режим, про который ты так же интересовался ?
ты уж определись наконец, модально или немодально ты будешь предлагать юзеру выбрать те самые даты ...
← →
MakNik (2005-11-15 14:26) [17]... я и сам толком не понял... ;)
... в общем, если я в обработчике нажатия кнопки просто пишу ModalResult:=mrOK; - диалог закрывается, но условие if ShowModal = mrOk then... не выполняется... Если пишу DateDialog.ModalResult:=mrOK; - компилируется, но на попытку нажать ОК ругается...
← →
MakNik (2005-11-15 14:30) [18]... предлагать юзеру буду модально, просто мне было интересно как еще можно реализовать (для общего развития)...
← →
Плохиш © (2005-11-15 14:35) [19]
> MakNik (15.11.05 14:26) [17]
Как ты думаешь, для чего в делфи существует отладчик?
← →
Leonid Troyanovsky © (2005-11-15 14:36) [20]
> MakNik (15.11.05 14:12) [10]
> Создаю форму для выбора интервала дат. на форме кнопка ОК
> при нажатии которой выполняется ModalResult:=mrOK;
..
> ...подозреваю что дело в том, как правильно присвоить ModalResult:
> =mrOK...
> Подскажите,плз., как сделать правильно?
Правильнее, вообще, не писать ничего в обработчике кнопки.
Достаточно, чтобы у этой кнопки было (можно в design time) ModalResult = mrOK.
Т.к. [Help: ShowModal] Note: If the form contains buttons with a
ModalResult property set to a value other than mrNone, the form automatically
closes when the user clicks one of those buttons and returns the ModalResult
value as the return value of ShowModal.
А твоя ошибка, видимо, в том, что в конце обработчика есть, например,
Close, который и изменяет результат на mrNone.
--
Regards, LVT.
← →
Ega23 © (2005-11-15 14:36) [21]
Dlg := TDateDialog.Create(nil);
With Dlg do
Begin
try
ShowModal;
if ModalResult = mrOk then
begin
Этот пункт никогда не выполняется, хотя ошибка и не возникает...
....
end;
finally
Free;
end;
End;
сделай так и не парься.
← →
MakNik (2005-11-15 15:09) [22]Спасибо Всем! Все работает!!! ... сам виноват... сам тормознул... вместо того, чтобы Close написать в обработчике события нажатия кнопки Отмена, написал (совершенно случайно) в обработчике события onClose формы...
← →
Leonid Troyanovsky © (2005-11-15 15:35) [23]
> MakNik (15.11.05 15:09) [22]
> .. вместо того, чтобы Close написать в обработчике события
> нажатия кнопки Отмена, написал (совершенно случайно) в
Там тоже не надо ничего писать, т.е. кнопке назначается
ModalResult = mrCancel, и все, собс-но. Ну, или еще Cancel = True.
--
Regards, LVT.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2005.12.04;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.037 c