Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Возврат значений формой... [D5, XP]


Страницы:   1 2

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]
>режим ее визуализации модальный ?

Какая в принципе разница ?

По сабжу. Передачу значений можно осуществить в вызываемой форме присвоением значений параметрам, определенным:
а) глобально (не по-джидайски)
б) как поля объекта, существующего на момент вызова формы и "видимого" как из этой формы, так и из той, которая "принимает" переданные значения.
(Например, объявленные в гл.форме либо датамодуле переменные)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо