Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.04;
Скачать: CL | DM;

Вниз

Возврат значений формой...   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.03 c
4-1128330458
yura_moz
2005-10-03 13:07
2005.12.04
usb devices


10-1108642942
Карелин Артем
2005-02-17 15:22
2005.12.04
Авторизация для вызова удаленного com-интерфейса. Как?


6-1124310306
nes
2005-08-18 00:25
2005.12.04
TClient/Server-socket, dynamic ip


2-1132216159
pavel_guzhanov
2005-11-17 11:29
2005.12.04
Использование таймера


2-1132221778
IAMDANIL
2005-11-17 13:02
2005.12.04
Ловушка