Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сообщение о закрытии формы 
:(
    Опции темы
Kuper
Дата 1.2.2006, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 31.1.2006

Репутация: нет
Всего: нет



У меня есть форма fsMDIForm и две формы fsMDIChild.
Проблема в следующем: мне необходимо узнать о закрытии одной из форм fsMDIChild и в зависимости от того, по нажатию на какую кнопку она была закрыта, выполнить одно из двух действий на другой fsMDIChild форме.
Подскажите какие-нибудь варианты, как это сделать.
PM MAIL   Вверх
Rennigth
Дата 1.2.2006, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Цитата(Kuper @ 1.2.2006, 14:35 Найти цитируемый пост)

по нажатию на какую кнопку она была закрыта

то есть? из систем меню или твоя кнопка?

а вообще вариантов много:
- если одна форма знает о другой то можно на Event сажать.
- если одна форма знает о другой то можно посылать ей сообщения.
- можно сообщения слать Broadcast-ом.
- можно что бы Main форма управляла ею
- итд...
...
Все зависит от конкретной ситуации.


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Kuper
Дата 1.2.2006, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 31.1.2006

Репутация: нет
Всего: нет



Одна форма fsMDIChild отображает данные из БД.
Другая fsMDIChild форма вызывается из первой fsMDIChild для редактирования одной записи.
На второй форме есть две кнопки "Ok" и "Cancel".
Мне необходимо при нажатии на кнопку "Ok" обновить на первой форме fsMDIChild данные, при условии что она ещё нее закрыта.
Если она закрыта или нажата кнопка "Cancel", то ничего не делать.
PM MAIL   Вверх
Rennigth
Дата 1.2.2006, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Вторую форму вызывай модально (ShowModal), т.е.:
На кнопку Ок ModalResult := mrOK, на Cancel соответственно mrCancel.

на дальше:
Код

  if fmMDIChildDialog.ShowModal = mrOK then
  begin
    {твои действия при "ОК"}
  end else
    {твои действия при "Cancel"}
  end;

Добавлено @ 15:08
fmMDIChildDialog твоя вторая форма с кнопочками OK и Cancel.

Это сообщение отредактировал(а) Rennigth - 1.2.2006, 15:07


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Kuper
Дата 1.2.2006, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 31.1.2006

Репутация: нет
Всего: нет



Так было первоначально. Но трудность в том, что первая форма в этом случае недоступна, то есть на ней нельзя ничего посмотреть.
А это бывает необходимо, т.к. на первой fsMDIChild отображаютя иерархично несколько справочников из БД.
PM MAIL   Вверх
Rennigth
Дата 1.2.2006, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Тогда вешать Event-ы на нажатие кнопок. а формы вызывать StayOnTop.
Добавлено @ 15:21
Сейчас если хочешь набросаю код.


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Kuper
Дата 1.2.2006, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 31.1.2006

Репутация: нет
Всего: нет



Если не трудно, но приведи пример!
PM MAIL   Вверх
Rennigth
Дата 1.2.2006, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Unit2, StdCtrls;

type
  TfmMain = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  protected
    procedure btnOKClick(ASender: TObject);
    procedure btnCancelClick(ASender: TObject);
  end;

var
  fmMain: TfmMain;

implementation

{$R *.dfm}

procedure TfmMain.btnCancelClick(ASender: TObject);
begin
  fmChild.Hide;
  ShowMessage('Íàæàòà ÎÊ');
end;

procedure TfmMain.btnOKClick(ASender: TObject);
begin
  fmChild.Hide;
  ShowMessage('Íàæàòà Cancel');
end;

procedure TfmMain.Button1Click(Sender: TObject);
begin
  if not Assigned(fmChild) then
    fmChild := TfmChild.Create(Application);

  fmChild.btnOK.OnClick := btnOKClick;
  fmChild.btnCancel.OnClick := btnCancelClick;

  fmChild.FormStyle := fsStayOnTop;
  fmChild.Show;
end;

end.


Код


unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TfmChild = class(TForm)
    btnOK: TButton;
    btnCancel: TButton;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  fmChild: TfmChild;

implementation

{$R *.dfm}

end.




--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Kuper
Дата 1.2.2006, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 31.1.2006

Репутация: нет
Всего: нет



Это мне не подходит.
Так как если будет вызываться не одна форма fsMDIChild, а несколько (поочереди или сразу не имеет значения), то для них нужно будет в Unit1
описывать нажатие данных кнопок. А нажатие данных кнопок на этих формах сопровождается не только закрытием формы, но и сохранением данных в БД.
Проблема ещё в том, что форма отображения данных разрабатывал я, а формы редактирования разрабатывают другие люди и у каждого свои способы сохранения изменений. Мне лишь остаётся подключить даные формы к себе в модуль и вызывать обновления при закрытии форм редактирования по нажатии на кнопки "Ok".
Поэтому мне и требуется отловить как-нибудь закрытие форм редактирования и определить как они закрыты: "Ok" - с сохранением изменений; "Cancel" - без сохранения изменений.
Связи между моей формой и формами редактирования никакой нет, кроме вызова.
PM MAIL   Вверх
Rennigth
Дата 1.2.2006, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



подругому никак, или Event-ы тебе все равно должны отдавать или на всех дочерних формах (лутше пронаследоваться от одной) должна быть property какая-нибудь с OK или Cancel и ловить Onclose этих форм и проверять Property каким образом закрывали. Ну еще как вариант FindWindow, искать кнопки по Caption, кастить и также выдирать OnClick, кстати вполне реально но если честно то извращение жуткое. smile


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0480 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.