Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
14-1131757507
TStas
2005-11-12 04:05
2005.12.04
КАк в Ворде нумеровать рисунки автоматически?


2-1132038926
Silvestr
2005-11-15 10:15
2005.12.04
Как в RishEdit поменять цвет определёной строки ?


1-1131299363
Aldor
2005-11-06 20:49
2005.12.04
Корректно ли, если контейнер ответственен за уничтожение


14-1131908060
Wolfram
2005-11-13 21:54
2005.12.04
Как заставить Delphi выделять, а не просто подсвечивать текст?


10-1108091214
TheDog
2005-02-11 06:06
2005.12.04
Что это должно быть?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский