![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Смена модального окна [D7, WinXP]
Zloy © (2005-02-08 13:39:00)Суть в общем такая, вызывая Form2.ShowModal потом из Form2 вызываю Form3.ShowModal, затем мне требуется на закрывая Form3 сдлать модальной Form2, вот здесь у меня возникает ошибка, подскажите как ее правильновызвать, если обе они были вызваны как модальные
КаПиБаРа (2005-02-09 11:33:00) [1]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
const
WM_ShowModalForm = WM_User + 101;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
procedure ShowModalForm(var Msg: TMessage); message WM_ShowModalForm;
end;
var
Form1: TForm1;
implementation
uses Unit2, Unit3;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.ShowModal;
end;
procedure TForm1.ShowModalForm(var Msg: TMessage);
begin
case Msg.WParam of
1: Form2.ShowModal;
2: Form3.ShowModal;
end;
end;
end.
----------------------------
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
uses Unit3, Unit1;
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
begin
Close;
PostMessage(Form1.Handle, WM_ShowModalForm, 2, 0);
end;
end.
--------------------------
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm3 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
uses Unit2, Unit1;
{$R *.dfm}
procedure TForm3.Button1Click(Sender: TObject);
begin
Close;
PostMessage(Form1.Handle, WM_ShowModalForm, 1, 0);
end;
end.
Zloy (2005-02-09 11:13:00) [2]Я к сожалению не знаю как это реализовать, но по сути что требуется. Расрушить модальную форму, затем сделать ее видимой, и вызвать другую форму и сделать ее модальной, разве это настолько нереализуемо
Anatoly Podgoretsky (2005-02-09 10:15:00) [3]Почему бы и нет, вроде не пятница.
Плохиш (2005-02-09 10:12:00) [4]
>Anatoly Podgoretsky © (09.02.05 10:08) [11]
Не надо давать повод для новых вопросов :-)
Anatoly Podgoretsky (2005-02-09 10:08:00) [5]Модальная форма это стек
КаПиБаРа (2005-02-09 09:53:00) [6]Zloy © (09.02.05 9:50) [9]
Ваша концепция приложения не привязана к платформе. Отсюда сложности с реализацией. Рекомендую пересмотреть коцепцию.
Zloy (2005-02-09 09:50:00) [7]но мне надо чтобы она не закрылась а стала неактивной, соот-но чтобы ее было видно но за form2
Anatoly Podgoretsky (2005-02-09 09:28:00) [8]Zloy © (09.02.05 09:23) [7]
Очень просто Form3.Close
Zloy (2005-02-09 09:23:00) [9]Ну все очень просто, мне нужно чтобы form3 потеряла свою модальность, а вторая ее снова приобрела
vvllaadd (2005-02-08 18:01:00) [10]используй одну модальную форму на ней две Panel:
1. Panel1.Visible:=True;
Panel2.Visible:=False;
2. Panel1.Visible:=False;
Panel2.Visible:=True;
msguns (2005-02-08 17:39:00) [11]ИМХО, в данном случае надо либо обе формы вызывать немодально, либо вообще создавать их как MDIChild. Модальная форма она для того и модальная, чтобы не давала "проехать", как знак кирпича на дороге.
Defunct (2005-02-08 16:56:00) [12]> Form2.ShowModalпотом из Form2 вызываю Form3.ShowModal, затем мне требуется на закрывая Form3 сдлать модальной Form2
Что за бред?
Form2 и так модальная в чем проблема?
GanibalLector (2005-02-08 16:34:00) [13]> подскажите как ее правильновызвать, если обе они были вызваны как модальные
А никак! Ты противоречишь законам винды.
icWasya (2005-02-08 15:57:00) [14]Единственное, что могу посоветовать
//Unit1
type
TForm1 = Class(TForm)
...
public
MForm:TForm;
...
end;
...
procedure TForm1.Button1Click(Sender:TObject);
begin
MForm:=Form2;
ModalForms;
end;
procedure TForm1.ModalForms;
var
Form:TForm;
begin
while MForm<>Nil do begin
Form:=MForm;
MForm:=Nil;
Form.ShowModal;
end;
end;
......
//Unit2
procedure TForm2.ShowForm3Click(Sender:TObject);
begin
Form1.MForm:=Form3;
Close;
end;
......
//Unit3
procedure TForm3.ShowForm2Click(Sender:TObject);
begin
Form1.MForm:=Form2;
Close;
end;
Zloy (2005-02-08 15:24:00) [15]Ну не уж то ни кто не знает решения этой задачи