![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Возврат значений формой... [D5, XP]
MakNik © (2005-11-15 11:34:00)Есть форма, которая создается динамически. В форме выбирается 2-е даты. Затем эти даты нужно вернуть в первую форму. Подскажите, плз., как это правильно сделать?
Leonid Troyanovsky (2005-11-15 15:35:00) [1]
> MakNik (15.11.05 15:09) [22]
> .. вместо того, чтобы Close написать в обработчике события
> нажатия кнопки Отмена, написал (совершенно случайно) в
Там тоже не надо ничего писать, т.е. кнопке назначается
ModalResult = mrCancel, и все, собс-но. Ну, или еще Cancel = True.
--
Regards, LVT.
MakNik (2005-11-15 15:09:00) [2]Спасибо Всем! Все работает!!! ... сам виноват... сам тормознул... вместо того, чтобы Close написать в обработчике события нажатия кнопки Отмена, написал (совершенно случайно) в обработчике события onClose формы...
Ega23 (2005-11-15 14:36:00) [3]
Dlg := TDateDialog.Create(nil);
With Dlg do
Begin
try
ShowModal;
if ModalResult = mrOk then
begin
Этот пункт никогда не выполняется, хотя ошибка и не возникает...
....
end;
finally
Free;
end;
End;
сделай так и не парься.
Leonid Troyanovsky (2005-11-15 14:36:00) [4]
> 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.
Плохиш (2005-11-15 14:35:00) [5]
> MakNik (15.11.05 14:26) [17]
Как ты думаешь, для чего в делфи существует отладчик?
MakNik (2005-11-15 14:30:00) [6]... предлагать юзеру буду модально, просто мне было интересно как еще можно реализовать (для общего развития)...
MakNik (2005-11-15 14:26:00) [7]... я и сам толком не понял... ;)
... в общем, если я в обработчике нажатия кнопки просто пишу ModalResult:=mrOK; - диалог закрывается, но условие if ShowModal = mrOk then... не выполняется... Если пишу DateDialog.ModalResult:=mrOK; - компилируется, но на попытку нажать ОК ругается...
Digitman (2005-11-15 14:23:00) [8]
> MakNik (15.11.05 14:12) [10]
а при чем тогда немодальный режим, про который ты так же интересовался ?
ты уж определись наконец, модально или немодально ты будешь предлагать юзеру выбрать те самые даты ...
Джо (2005-11-15 14:19:00) [9]
> [14] Джо © (15.11.05 14:19)
Это к [12] MakNik (15.11.05 14:18)
Джо (2005-11-15 14:19:00) [10]Ничего не понял.
MakNik (2005-11-15 14:18:00) [11]... а как указать формы, чтобы форма того же класса, созданная под другим именем правильно работала?
Плохиш (2005-11-15 14:18:00) [12]
> MakNik (15.11.05 14:12) [10]
> ... что-то я запутался...
> Создаю форму для выбора интервала дат. на форме кнопка ОК
> при нажатии которой выполняется ModalResult:=mrOK;
Убери из этого обработчика Close
Джо (2005-11-15 14:16:00) [13]
> ОК при нажатии которой выполняется ModalResult:=mrOK;
Свойство ModalResult какого компонента ты меняешь? Может, кнопки?
MakNik (2005-11-15 14:12:00) [14]... что-то я запутался...
Создаю форму для выбора интервала дат. на форме кнопка ОК при нажатии которой выполняетсяModalResult:=mrOK;
В форме, из которой вызывается диалог создаю
Dlg := TDateDialog.Create(nil);
With Dlg do
Begin
try
if ShowModal = mrOk then
begin
Этот пункт никогда не выполняется, хотя ошибка и не возникает...
....
end;
finally
Free;
end;
End;
...подозреваю что дело в том, как правильно присвоить ModalResult:=mrOK...
Подскажите,плз., как сделать правильно?
Ega23 (2005-11-15 12:39:00) [15]
> А как сделать для немодального режима?
Да, в общем-то, также, как и для модального.
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 12:31:00) [16]А как сделать для немодального режима?
Digitman (2005-11-15 12:13:00) [17]
> msguns © (15.11.05 11:59) [4]
> Какая в принципе разница ?
в принципе - никакой.
но случае с модальным режимом итоговый код, реализующий сабж, до смешного примитивен.. что как вариант и было продемонстрировано выше
Джо (2005-11-15 12:01:00) [18]
> [5] Джо © (15.11.05 12:00)
TDateDialog, разумеется -- класс этой самой модальной формы.
Джо (2005-11-15 12:00:00) [19]
> Подскажите, плз., как это правильно сделать?
Да по-разному можно.
Например, так:
В модуле с определением формы определяешь публичную функцию
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;
msguns (2005-11-15 11:59:00) [20]>Digitman © (15.11.05 11:40) [1]
>режим ее визуализации модальный ?
Какая в принципе разница ?
По сабжу. Передачу значений можно осуществить в вызываемой форме присвоением значений параметрам, определенным:
а) глобально (не по-джидайски)
б) как поля объекта, существующего на момент вызова формы и "видимого" как из этой формы, так и из той, которая "принимает" переданные значения.
(Например, объявленные в гл.форме либо датамодуле переменные)