Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 [2]  Все   Вниз
  Печать  
Автор Тема: Вопрос по ShowModal  (Прочитано 50233 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Rockerok
Гость
« Ответ #30 : 27-03-2008 14:23 » new

З.Ы.
О, подумалось, правильнее вызывать рабочее окно, а при его открытии создавать модальный диалог выбора даты. Тогда пусть рабочее окно само управляет данными и вызывает выбор даты повторно в случае неправильного ввода. Это зависит от структуры приложения.
Кстати, Это идея... Ага
Записан
DrGluck
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #31 : 28-03-2008 07:29 » 

2 RXL
Слу, может ты мне переформулируешь его задачу, а то я все посты прочитал, но нифига не понял чего надо сделать.
Имхо, два равноправных окна (рабочее и дата) там точно не нужны. Выбор даты - однозначно маленькое модальное окно, которое вызывается (создается) в другом окне (главном или рабочем). Там вроде и проблемы нет.
А если ему надо много документов одновременно открывать, то тогда MDI или нет. Это уже решать в зависимости от удобства.
Но, повторяю, при всех условиях, окно с датой должно создаваться только на время выбора даты.

Я бы сделал примерно так:

Код:
unit u_MyDateForm;

interface

юзес
  Вындовз, Классес, Мессагес, СысУтилз и чо там еще  :)

type
  TMyDate = record  // вот тока не надо спрашивать, нахрена я создал свою структуру, описывающую дату, просто так нагляднее
    Year: BYTE;
    Month: BYTE;
    Day: BYTE;
  end;

  TMyDateForm = class(TForm)  // Класс формы с выбором даты
     бла бла бла контролы
    ......
  public
    procedure SetDate(Date: TMyDate); // Процедура будет разбираться с переданой на форму датой и инициализировать контролы
    // в соответствии с этим
    function GetDate: TMyDate;  // Функция будет возвращать дату, выбранную пользователем
  end;

  // А вот это самое главное: из других форм будем вызывать только эту функцию
  // Делать это можно из разных форм
  // Параметры:
  // Date - дата для инициализации
  // OwnerForm - форма-родитель
  // Функция возвращает выбранную дату
  function ChooseDateTime(Date: TMyDate; OwnerForm: TForm): TMyDate;


implementation

{$R *.DFM}

function ChooseDateTime(Date: TMyDate; OwnerForm: TForm): TMyDate;
var
  _Form: TMyDateForm;
begin
  _Form := TMyDateForm.Create(OwnerForm);
  if not(Assigned(_Form)) then х.з. чо делать, форма не создалась
  try
    _Form.SetDate(Date);  // Процедура разбирается в структуре Date и инициализирует контролы на форме
    _Form.ShowModal;  // Показываем форму
    Result := _Form.GetDate;  // Вызываем процедуру, которая собирает данные с контролов обратно в структуру
  finally
    _Form.Free;  // не забыть почистить за собой
  end;
end;

Вот примерно так. Это только форма с датой.
По поводу проверки на создание формы. Ну не знаю, я ни разу не сталкивался с тем, что простая форма не создалась. Но проверка на не nil перед употреблением является хорошим тоном.
Больно за код не бейте, писал в текстовом редакторе. Может чо не так. Но идея понятна.
Записан

Good user - dead user
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #32 : 28-03-2008 20:11 » 

DrGluck, я так понимаю, что выбор даты вторичен, а первична рабочая форма. Соотв., я посчитал, что модальный вызов диалога выбора даты будет оптимальным. Тем более, что такую задачу я уже решал. Я привел рабочий код, который можно вызывать из разных окон по многу раз.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
DrGluck
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #33 : 31-03-2008 04:22 » 

Ну дык и я об этом. Примерно так.
Ну, пусть выбирает. Ему всё показали и рассказали.

З.Ы. А чо, у меня непонятно что то написано? Я ему пытался показать как можно модальные окна выводить. А разбор даты я вообще вопросом не считаю. Там вроде проблем нету.
« Последнее редактирование: 31-03-2008 04:48 от DrGluck » Записан

Good user - dead user
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #34 : 31-03-2008 11:43 » 

DrGluck, все путем Улыбаюсь Будут у него вопросы - тогда и будем репы чесать.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
DrGluck
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #35 : 01-04-2008 04:48 » 

mrOk  Да-да
« Последнее редактирование: 01-04-2008 04:52 от DrGluck » Записан

Good user - dead user
Страниц: 1 [2]  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines